【2023年】VB.NETで複数ページのPDFファイルを作成する
前回の投稿で、VB.NETで印刷機能を活用するとPDFファイルが作れることがわかりました。
ただ、複数ページの場合は複数ファイルの作成になってしまい、まとめる事ができませんでした。
そこで調べてみたところ、複数ページのPDFが作れることがわかりました。
再び、備忘録として記録しておきます。(Windows10以上のみ)
※ 前回の投稿(【2023年】VB.NETでPDFファイルを作成する)に追加した部分ですので、
基本的な作成部分はそちらを参考にしてください。
複数ページのPDFファイルが欲しい
複数ページを印刷した場合、綴じてあると、内容がまとまっているしページの順も気にしなくていいし便利ですよね。
PDFファイルも、1枚1枚別ファイルより、一つのファイルに複数のページがあると使い勝手がよくなります。
無駄にファイル数を増やすこともありませんので。
前回、VB.NETでPDFファイルが作れることがわかったので、
今度は複数ページのPDFファイルの作成にチャレンジしてみます。
HasMorePagesがあるが…
複数ページの印刷処理について調べると、「HasMorePagesプロパティ」を利用するというのが多く出てきます。
自分も、紙での印刷処理ではこちらを使っておりました。
PDF作成も同じ印刷ロジックなので、大丈夫でしょう。
e.HasMorePages = True
を組み込んで印刷してみたところ、
と、改ページはされたものの、同じページに重なってしまいました。
見づらいし、意味がありません。
もしかすると上手くできるかもしれませんが、他のやり方を探ってみます。
PrintController.OnEndPageがあるらしい
調べてみたところ、「VB.NetでVB6のNewPageのような改ページ処理をする」というページが見つかりました。
PrintController.OnEndPageメソッドを呼び出すと、改ページ印刷ができるようです。
印刷処理の流れになっているので、
プリンター名を"Microsoft Print to PDF"で指定すれば、複数ページのPDFファイルが作成できるかもしれません。
今度は、重ならないように祈りながら…。
VB.NETで複数ページのPDFファイルが作成できた
このように書いて試してみたところ、こちらでは上手くできました。
'publicで宣言しておくといい
Public pd As New System.Drawing.Printing.PrintDocument
Public endpage_flg As Boolean
Dim g As Graphics = e.Graphics
' 最初のページは、そのまま印刷。最終ページフラグを印刷サブルーチンの中で判定しておく。
Call page_show(g)
' 最終ページフラグがオンになるまで、改ページして印刷。
Do Until endpage_flg = True
'ページを終了する。
pd.PrintController.OnEndPage(pd, e)
'新ページ開始。gは新ページとして更新し、印刷サブルーチンに引き渡す。
g = pd.PrintController.OnStartPage(pd, e)
Call page_show(g)
Loop
ファイルを開いてみると、
と、重ならずに別ページになりました。
これは使えそうです。
マイクロソフトのPrintController.OnStartPageの解説ページをみると、
戻り値がGraphicsになっています。
別のGraphicsを指定できるため、
HasMorePagesと違ってページが重ならずできるのかもしれません。
注意点
OnEndPageとOnStartPageの関係ですが、
1ページ | 2ページ | 3ページ |
End | Start End | Start |
となり、Endから始めてStartで終わる処理になります。
ついつい最後にEndPageを入れてしまいそうですが、
EndPageを入れると空のページが1枚後ろにつきますので、ご注意ください。
まとめ
前回の投稿で、VB.NETでPDFファイルが作成できるようになりましたが、
今回、機能を追加し、複数ページのPDFファイルを作る事ができました。
さらに使い勝手がよくなったかと思います。
みなさんの参考になると嬉しいです。
最近のコメント