문제

WPF Windows 응용 프로그램에서 PDF 파일을 표시하는 방법에 대한 아이디어가 있습니까?


브라우저를 실행하기 위해 다음 코드를 사용하고 있지만 Browser.Navigate 메소드는 아무것도 하지 않습니다!

WebBrowser browser = new WebBrowser();
browser.Navigate("http://www.google.com");
this.AddChild(browser); // this is the System.Windows.Window
도움이 되었습니까?

해결책

이런.이것은 winforms 앱용입니다.WPF용이 아닙니다.어쨌든 나는 이것을 게시할 것이다.

이 시도

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;

다른 팁

WindowsFormHost 컨트롤을 사용하면 WPF 앱에서 Acrobat Reader 컨트롤이 작동하도록 할 수 있습니다.여기에 대한 블로그 게시물이 있습니다.

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

여기에 제가 어떻게 만들었는지에 대한 5분짜리 스크린캐스트도 있습니다.

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

간단히 양식에 웹 브라우저 컨트롤을 호스팅하고 이를 사용하여 PDF를 열 수 있습니다.

.NET 3.51에는 새로운 기본 WPF "WebBrowser" 컨트롤이 있거나 WPF 앱에서 Windows.Forms 브라우저를 호스팅할 수 있습니다.

다음 코드에서는 Adobe Reader가 설치되고 Pdf 확장이 여기에 연결될 것으로 예상합니다.간단히 실행됩니다.

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

그냥 프레임과 웹브라우저를 사용하세요

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

그런 다음 더 이상 필요하지 않으면 다음을 수행하여 정리하십시오.

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

정리하지 않으면 사용하는 .NET 버전에 따라 메모리 누수 문제가 발생할 수 있습니다.정리하지 않으면 .NET 3.5에서 잘못된 메모리 누수가 발생하는 것을 보았습니다.

폭로:여기는 상업용이고 저는 이 회사에서 일합니다.

답변이 이미 승인되었지만 다음에는 Adobe Reader/Acrobat이 필요하지 않으며 Winforms가 아닌 WPF 솔루션이라는 것을 알고 있습니다.나는 또한 이것이 오래된 질문이라는 것을 알고 있지만 방금 업데이트되었으므로 여전히 실제적인 것 같습니다.

PDFRasterizer.NET 3.0 WPF FixDocument로 렌더링할 수 있습니다.모든 벡터 그래픽을 유지합니다(PDF 그래픽은 다소 동등한 WPF 요소로 변환됩니다.이것은 아마도 당신이 필요로하는 것에 가장 가깝습니다.

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

예를 들어 wpfDoc을 전달할 수 있습니다.WPF DocumentViewer를 사용하면 뷰어를 빠르게 구현할 수 있습니다.

FoxitReader를 사용할 수도 있습니다.무료이며 FoxitReader 응용 프로그램을 설치한 후 웹 브라우저(IE 및 기타)에 등록되는 ActiveX 컨트롤이 함께 제공됩니다.따라서 시스템에 FoxitReader를 설치한 후 WebBrowser 컨트롤을 넣고 Source 속성이 PDF 파일의 파일 경로를 가리키도록 설정하십시오.

이것 좀 봐: http://itextsharp.sourceforge.net/WindowsFormsHost를 사용해야 할 수도 있지만 오픈 소스이므로 WPF에서 좀 더 우아하게 만들 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top