質問
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 コントロールを使用すると、Acrobat Reader コントロールを WPF アプリで動作させることができます。それについてのブログ投稿がここにあります。
http://hugeonion.com/2009/04/06/displaying-a-pdf-file-within-a-wpf-application/
ここでの作成方法を示す 5 分間のスクリーンキャストもあります。
フォーム上で Web ブラウザ コントロールをホストし、それを使用して 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();
試す 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を必要とせず、WinformsではなくWPFソリューションです。また、これは古い質問であることも認識していますが、更新されたばかりなので、まだ実際のものだと思います。
PDFRasterizer.NET 3.0 WPFFixedDocument にレンダリングできます。すべてのベクター グラフィックスが保持されます (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 アプリケーションをインストールした後に Web ブラウザ (IE など) に登録される ActiveX コントロールが付属しています。そのため、システムに FoxitReader をインストールした後、WebBrowser コントロールを配置し、その Source プロパティを PDF ファイルのファイル パスを指すように設定します。
これをチェックしてください: http://itextsharp.sourceforge.net/WindowsFormsHost を使用する必要がある場合がありますが、これはオープン ソースであるため、WPF でもう少しエレガントにできる可能性があります。