やりたいこと
WinFormやWPFで表示しようとなると、AcrobatSDKが必要だとか
サードパーティライブラリが必要だとか、Win10のAPIを利用して画像を生成するだとか、色んな記事があります。
正直めんどいし、なんだったら割と簡単じゃない。(難しくはないんですがめんどくさいは否めない)
AcrobatSDK利用すると余計な機能が付いてくる、サードパーティだと料金が発生するかもだし、
配布時のライセンス問題も気にしなきゃとか、Win10のAPIで画像生成は、
所詮画像を生成するに留まるし、生成処理に時間もかかる等で、個人的には不満が多かったです。
ただ表示したいだけなのに。なんでこんなめんどいの?世の中からPDF無くなったらいいのに。。。
特定の環境下じゃないと再現できないドキュメントフォーマットなんて、HTML以下でしょ。
なんでこんなに世の中で流行ってんのさ。
なんて思った事も過去にありました。
そんな事を今でも思い悩んでる貴方に!
ただ表示したい!なんだったら印刷等もしたい!という場合に
私がお勧めしたい、多分これ以上ないだろうという簡単実装を紹介します。
難しいお話は全く無くて、単純にMicrosoft Edgeベースのブラウズが出来るコントロールである
Microsoft Edge WebView2を利用し、表示するという方法です。つまりEdge任せです。
条件
Windows 11、10、8.1、7等。
Win32 C/C++
.NET framework 4.5以降
.NET Core 3.1以降
.NET 5
.NET 6
WinUI 2.0(プレビュー)
WinUI 3.0
実行環境にWebView2ランタイムがインストールされている事。
Visual Studio 2017以降
詳しくは、Microsoftの公式ドキュメントを参照してください。
Microsoft Edge WebView2 の概要
WebView2 アプリと WebView2 ランタイムの配布
実際にやってみる
環境は、下記の通りです。
Windows 10 Pro 64bit 21H1
Microsoft Visual Studio Community 2019
今回はC# WindowsForm +.NET Freamwork 4.8の例で紹介します。
(もちろんVisualBasicだろうが、C++でも問題ありません)
1 NuGet パッケージマネージャーでWebView2をインストールする
空のWinformプロジェクトを作り、NuGetからWebView2を取得し、コントロールを使えるようにします。
2 フォームにButtonとWebView2を追加する
3 WebView2にPDFを読み込ませる処理を書く
PDFのファイルパスをURIにしてWebView2のSourceプロパティに渡す処理を書きます。
お決まりのパターンです。なんにも難しくないです。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
using (OpenFileDialog ofd = new OpenFileDialog())
{
ofd.Filter = "PDFファイル(*.pdf)|*.pdf";
if (ofd.ShowDialog() == DialogResult.OK)
{
this.webView21.Source = new Uri(ofd.FileName);
}
}
}
}
4 動かしてみる
以上です。ちゃんと表示されてます。
(手書き系等の機能は除いて)EdgeでPDFを表示した結果と全く同じです。
なので文字検索や回転、印刷や保存もできます。
5 感想
いや、簡単すぎる!!SDK?API?なんだったの?ってなりました。
Webブラウザを利用するという点でチート技だとも言えますが、
単に表示したいだけというニーズはあると思います。それをお手軽に実装するという点では有りかと。
一点だけ難癖を付けると、WebView2ランタイムなるものが必須であること。
このランタイムは、再配布可能という事になってるので、ライセンスの心配は無いでしょう。
他の方法も似たような事情を抱えるので、Microsoft謹製環境のみで実装できるのはうれしい事ではないでしょうか。
URIで渡す為、もちろんインターネット上のPDFも渡せますし、
試してないですが工夫次第ではSharePoint上のPDFファイルのURLとか、
Teamsに添付したPDF等も扱えるかも・・・?
なんにせよこんなに簡単に実装出来るんだから、活用しやすいかと思います。
また、WebView2の利用できる範囲が広い事。条件を満たせば、懐かしのWin7でも利用できるってのは、
一部の環境では大歓迎な実装方法なのではないでしょうか。
随分と時が経ってしまいましたが、まさしくWin7時代にこんな感じの仕組みが欲しかったものです。
PDFを表示するアプローチとして、あまりこの方法の紹介記事が無いようだったので、紹介しました。
参考になればと思います。