「前パン愛好会」にようこそ! 

 電車といえば、やっぱり前パンがかっこいい!
 そんな皆さんに、前パンを揃えてみました。
 えっ?前パンって何??という方。
 先頭車の前側にパンタグラフがある電車の事です。
 ぜひ、前パンの魅力にはまって下さいませ♪

【2023年】VB.NETでPDFファイルを作成する

VB.NETで作成したアプリにPDF作成機能を追加しようと検索すると、有料のモジュールや10年以上に作られたページがヒットし、すでに使えない処理になっていました。
C#のソースは引っかかるのですが…。
そこで、色々と試してみたところ、印刷機能を使うと簡単にPDFが作れることがわかりました。
備忘録として記録しておきます。(Windows10以上のみ)

検索しても出てこない…

簡単にPDFファイルを作れると思い、「VB.NET PDF 作成」で検索してみると、
 ・2007年のソースが出てくる(もうこのモジュールはない…)
 ・有料のツールを使用
など、簡単に使えるようなものがでてきませんでした。
C#だと最新のソースが出てくるのですが、そのままでは活用できそうにありません。

ChatGPTに聞いてみた

そこで、プログラムのソースを調べるのに便利とのことで、ChatGPTに聞いてみました。
その結果、

VB.NETを使用してPDFを作成するには、iTextSharpと呼ばれるオープンソースライブラリを使用することができます。iTextSharpは、PDFファイルを生成、変更、操作するための強力なツールセットを提供します。

iTextSharp、今はオープンソースじゃないし、有償だし、元記事が2006年だし…。
この情報は使えないですね。
ネットに最新の情報が上がっていないと、ChatGPTも学習しないですね。
ChatGPTは、参考にはしても、鵜吞みにはしないようにしましょう。

”Microsoft Print to PDF”があるじゃないか!

モジュールではPDFの作成は難しそうだったのですが、
プリンターの中に「Microsoft Print to PDF」がある事に気が付きました。
Windows10から標準で搭載されている、仮想プリンターです。
プリンターを「Microsoft Print to PDF」に指定して印刷すると、PDFファイルが作成されます。
この機能を使うと、VB.NETでも印刷処理を活用してPDFファイルができそうです。
どうせなら、ファイル名をつけて保存したいフォルダに出力したいですよね。
ただ、普通の印刷はプリンターにデータを送るだけで出力されますが、
印刷コマンドに、ファイル出力の設定はあるのでしょうか。

PowerShellスクリプトをみつけた

調べてみると、「画像ファイルをPDFに変換するPowerShellスクリプト」を見つけました。
2022年の投稿なので新しいですし、Microsoft Print to PDFを使ってファイル出力をしています。
PowerShellは、C#と異なり、VB.NETと同じようなクラスとプロパティの書き方になっています。
もしかしたら、これが使えるかもしれません。
”PrinterSettings.PrintFileName”なんですね。

VB.NETでもできた!

同じように書いてみたところ、自動的にメッセージが選択でき、エラーも出ませんでした。
それがこちらになります。

VB.NET

' PDFファイルを指定フォルダ、ファイル名で出力 ' プリンター名を"Microsoft Print to PDF"で指定 pd.PrinterSettings.PrinterName = “Microsoft Print to PDF"
' 印刷出力をファイルにする設定(Trueにしないとファイル保存のダイアログが出るためファイル名の指定が意味をなさない)
pd.PrinterSettings.PrintToFile = True
' PDFの出力先とファイル名を指定
pd.PrinterSettings.PrintFileName = “C:\test\test.pdf"
' 印刷を開始する
pd.Print()

ドキドキしながらフォルダを確認してみたところ、

できていました!保存先を聞かれず、自動的にファイルができています。
本当にPDFなのか開いてみます。

PDFのビューワーで見られました!!
ちゃんとPDFのようですね。
ただ、画像が張り付いているだけかもしれません。
拡大してみました。

滑らかですね♪
ちゃんとテキストのPDFでした。
今回はファイル名を決め打ちしましたが、変数で与えると保存先やファイル名も自在に指定できますね。

まとめ

VB.NETでのPDF作成処理を調べ、まとめてみました。
やってみると簡単なんですが、古い情報しかなかったのでまとめるのが大変でした。
印刷のロジックなので、自由にPDFファイルが作れるようになるかと思います。
みなさんの参考になると嬉しいです。

その他

Posted by 管理者