Pregunta

¿Alguna idea de cómo mostrar un archivo PDF en una aplicación WPF para Windows?


Estoy usando el siguiente código para ejecutar el navegador pero el Browser.Navigate ¡El método no hace nada!

WebBrowser browser = new WebBrowser();
browser.Navigate("http://www.google.com");
this.AddChild(browser); // this is the System.Windows.Window
¿Fue útil?

Solución

Ups.Esto es para una aplicación Winforms.No para WPF.Publicaré esto de todos modos.

prueba esto

private AxAcroPDFLib.AxAcroPDF axAcroPDF1;
this.axAcroPDF1 = new AxAcroPDFLib.AxAcroPDF();
this.axAcroPDF1.Dock = System.Windows.Forms.DockStyle.Fill;
this.axAcroPDF1.Enabled = true;
this.axAcroPDF1.Name = "axAcroPDF1";
this.axAcroPDF1.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("axAcroPDF1.OcxState")));
axAcroPDF1.LoadFile(DownloadedFullFileName);
axAcroPDF1.Visible = true;

Otros consejos

Puede hacer que el control de Acrobat Reader funcione en una aplicación WPF utilizando el control WindowsFormHost.Tengo una publicación de blog al respecto aquí:

http://hugeonion.com/2009/04/06/displaying-a-pdf-file-within-a-wpf-application/

También tengo un screencast de 5 minutos de cómo lo hice aquí:

http://www.screencast.com/t/JXRhGvzvB

Simplemente podría alojar un control de navegador web en el formulario y usarlo para abrir el PDF.

Hay un nuevo control "WebBrowser" nativo de WPF en .NET 3.51, o puede alojar el navegador Windows.Forms en su aplicación WPF.

El siguiente código espera que se instale Adobe Reader y que la extensión Pdf esté conectada a este.Simplemente lo ejecuta:

String fileName = "FileName.pdf";
System.Diagnostics.Process process = new System.Diagnostics.Process(); 
process.StartInfo.FileName = fileName;
process.Start();
process.WaitForExit();

Simplemente use un marco y un navegador web como este.

Frame frame = new Frame();
WebBrowserbrowser = new WebBrowser();
browser.Navigate(new Uri(filename));
frame.Content = browser;

Luego, cuando ya no lo necesites, haz esto para limpiarlo:

WebBrowser browser = frame.Content as WebBrowser;
browser.Dispose();
frame.Content = null;

Si no lo limpia, es posible que tenga problemas de pérdida de memoria según la versión de .NET que esté utilizando.Vi malas pérdidas de memoria en .NET 3.5 si no limpiaba.

Divulgación:Aquí hay uno comercial y trabajo para esta empresa.

Me doy cuenta de que ya se aceptó una respuesta, pero lo siguiente no requiere Adobe Reader/Acrobat y es una solución WPF, a diferencia de Winforms.También me doy cuenta de que esta es una pregunta antigua, pero se acaba de actualizar, así que supongo que todavía es actual.

PDFRasterizer.NET 3.0 le permite renderizar en un documento fijo de WPF.Conserva todos los gráficos vectoriales (los gráficos PDF se convierten en elementos WPF más o menos equivalentes).Probablemente esto sea lo más cercano a lo que necesita.

using (FileStream file = new FileStream(path, FileMode.Open, FileAccess.Read))
{
  pdfDoc = new Document(file);

  ConvertToWpfOptions convertOptions = new ConvertToWpfOptions();
  RenderSettings renderSettings = new RenderSettings();
  ...

  FixedDocument wpfDoc = pdfDoc.ConvertToWpf(renderSettings, convertOptions, 0, 9, summary);
}

Puede pasar el wpfDoc a, por ejemplo.WPF DocumentViewer para implementar rápidamente un visor.

También puedes utilizar FoxitReader.Es gratis y viene con un control ActiveX que se registra en los navegadores web (IE y otros) después de instalar la aplicación FoxitReader.Entonces, después de instalar FoxitReader en el sistema, coloque un control WebBrowser y configure su propiedad Fuente para que apunte a la ruta del archivo PDF.

Mira esto: http://itextsharp.sourceforge.net/Es posible que tengas que usar WindowsFormsHost, pero como es de código abierto, es posible que puedas hacerlo un poco más elegante en WPF.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top