Pergunta

Alguma idéia de como exibir um arquivo PDF em um aplicativo WPF do Windows?


Estou usando o seguinte código para executar o navegador, mas o Browser.Navigate método não faz nada!

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

Solução

Ops.isto é para um aplicativo winforms.Não para WPF.Vou postar isso de qualquer maneira.

tente isso

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;

Outras dicas

Você pode fazer com que o controle do Acrobat Reader funcione em um aplicativo WPF usando o controle WindowsFormHost.Tenho um post no blog sobre isso aqui:

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

Também tenho um screencast de 5 minutos de como fiz isso aqui:

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

Você poderia simplesmente hospedar um controle de navegador da Web no formulário e usá-lo para abrir o PDF.

Há um novo controle "WebBrowser" WPF nativo no .NET 3.51, ou você pode hospedar o navegador Windows.Forms em seu aplicativo WPF.

O código a seguir espera que o Adobe Reader esteja instalado e a extensão PDF esteja conectada a ele.Ele simplesmente executa:

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

Basta usar um frame e um navegador da web como este

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

Então, quando você não precisar mais, faça o seguinte para limpá-lo:

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

Se você não limpá-lo, poderá ter problemas de vazamento de memória, dependendo da versão do .NET que estiver usando.Vi vazamentos de memória ruins no .NET 3.5 se não fiz a limpeza.

Divulgação:Aqui é um comercial e eu trabalho para esta empresa.

Sei que uma resposta já foi aceita, mas a seguinte não requer Adobe Reader/Acrobat e é uma solução WPF - ao contrário do Winforms.Também percebo que esta é uma pergunta antiga, mas acabou de ser atualizada, então acho que ainda é real.

PDFRasterizer.NET 3.0 permite renderizar em um WPF FixedDocument.Ele preserva todos os gráficos vetoriais (os gráficos PDF são convertidos em elementos WPF mais ou menos equivalentes.Provavelmente é o mais próximo do que você precisa.

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);
}

Você pode passar o wpfDoc para, por exemplo.o WPF DocumentViewer para implementar rapidamente um visualizador.

Você também pode usar o FoxitReader.É gratuito e vem com um controle ActiveX que é registrado nos navegadores da web (IE e outros) após a instalação do aplicativo FoxitReader.Portanto, depois de instalar o FoxitReader no sistema, coloque um controle WebBrowser e defina sua propriedade Source para apontar para o caminho do arquivo PDF.

Veja isso: http://itextsharp.sourceforge.net/Talvez seja necessário usar um WindowsFormsHost, mas como é de código aberto, você poderá torná-lo um pouco mais elegante no WPF.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top