2008-09-10 3 views
23

Любые идеи о том, как отображать PDF-файл в приложении WPF Windows?Показать PDF в приложении WPF


Я использую следующий код для запуска браузера, но метод Browser.Navigate ничего не делает!

WebBrowser browser = new WebBrowser(); 
browser.Navigate("http://www.google.com"); 
this.AddChild(browser); // this is the System.Windows.Window 
+0

является ли это для запуска извне в Acrobat или вам нужен контроль времени проектирования для отображения внутри приложения? – 2008-09-10 19:30:05

+0

хотите, чтобы отобразить PDF в WPF? – 2008-09-10 19:25:23

ответ

10

К сожалению. это для приложения 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; 
-2

Проверьте это: http://itextsharp.sourceforge.net/ Вы, возможно, придется использовать WindowsFormsHost, но так как он является открытым исходным кодом, вы могли бы сделать его немного более элегантно в WPF.

+1

IText это отличный инструмент, но он не поддерживает рендеринг PDF. – yms 2011-11-09 15:34:53

11

Вы можете просто разместить элемент управления веб-браузера в форме и использовать его для открытия PDF-файла.

В .NET 3.51 есть новый собственный элемент управления «WebBrowser» WPF, или вы можете разместить браузер Windows.Forms в своем приложении WPF.

+0

Нужно ли, чтобы Acrobat Reader был установлен на компьютере конечных пользователей? – drasto 2011-01-08 18:39:45

+0

В этом случае конечному пользователю потребуется какой-то PDF-чтение er, установленное и зарегистрированное в IE. Я рекомендую Foxit Reader, а не Adobe, он быстрее и не устанавливает шпионское ПО. – 2011-01-10 14:12:20

+8

+1; на самом деле самое простое решение: `` – jeroenh 2011-05-23 09:52:32

8

Следующий код ожидает Adobe Reader должен быть установлен и расширение Pdf быть связано с этим. Он просто запускает его:

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

Вы можете получить контроль над Acrobat Reader работает в приложении WPF с помощью элемента управления WindowsFormHost. У меня в блоге об этом здесь:

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

У меня также есть 5 минут скринкаст о том, как я сделал это здесь:

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

6

Просто используйте рамку и WebBrowser, как так

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, если я не очистил.

0

Вы также можете использовать FoxitReader. Он бесплатный и поставляется с элементом управления ActiveX, который регистрируется в веб-браузерах (IE и другие) после установки приложения FoxitReader. Итак, после установки FoxitReader в систему поставьте элемент управления WebBrowser и установите его свойство Source, чтобы указать путь к файлу вашего PDF-файла.

1

Раскрытие: Вот коммерческий один, и я работаю в этой компании.

Я понимаю, что ответ уже принят, но следующее не требует Adobe Reader/Acrobat, и это решение WPF - в отличие от Winforms. Я также понимаю, что это старый вопрос, но он только что обновлен, поэтому я думаю, что он по-прежнему актуальен.

PDFRasterizer.NET 3.0 позволяет визуализировать документ WPF FixedDocument. Он сохраняет всю векторную графику (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 быстро внедрить зритель.

Смежные вопросы