質問

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 分間のスクリーンキャストもあります。

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

フォーム上で 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();

このようにフレームとウェブブラウザを使用するだけです

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 でもう少しエレガントにできる可能性があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top