Отображение PDF-файла в приложении WPF [закрыто]
Вопрос
Есть идеи, как отобразить PDF-файл в приложении WPF для Windows?
Я использую следующий код для запуска браузера, но 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;
Другие советы
Вы можете заставить элемент управления Acrobat Reader работать в приложении WPF, используя элемент управления WindowsFormHost.У меня есть запись в блоге об этом здесь:
http://hugeonion.com/2009/04/06/displaying-a-pdf-file-within-a-wpf-application/
У меня также есть 5-минутный скринкаст о том, как я сделал это здесь:
Вы могли бы просто разместить элемент управления веб-браузера в форме и использовать его для открытия PDF-файла.
В .NET 3.51 появился новый собственный элемент управления WPF "WebBrowser", или вы могли бы разместить браузер Windows.Forms в своем приложении WPF.
Следующий код предполагает, что Adobe Reader будет установлен и к нему будет подключено расширение Pdf.Он просто запускает его:
String fileName = "FileName.pdf";
System.Diagnostics.Process process = new System.Diagnostics.Process();
process.StartInfo.FileName = fileName;
process.Start();
process.WaitForExit();
Попробуй MoonPdfPanel - A WPF-based PDF viewer control
http://www.codeproject.com/Articles/579878/MoonPdfPanel-A-WPF-based-PDF-viewer-control
Просто используйте фрейм и веб-браузер следующим образом
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, и это решение 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 для быстрого внедрения средства просмотра.
Вы также можете использовать FoxitReader.Это бесплатно и поставляется с элементом управления ActiveX, который регистрируется в веб-браузерах (IE и других) после установки приложения FoxitReader.Поэтому после установки FoxitReader в систему установите элемент управления WebBrowser и установите его свойство Source таким образом, чтобы оно указывало путь к вашему PDF-файлу.
Посмотри на это: http://itextsharp.sourceforge.net/ Возможно, вам придется использовать WindowsFormsHost, но поскольку у него открытый исходный код, вы могли бы сделать его немного более элегантным в WPF.