はじめに
PDFを結合するプログラムを日本語で調べると、出てくる多くはiTextSharpを使う方法です。 これでもいいのですが、無料版のライセンスがAPGLであり商用ソフトを作る場合には支障をきたします。 そこで今回は、MITライセンスのpdfSharpを用いてPDFを結合してみます。※ライセンスの違いは以下の記事を参照 「オープンソースライセンス、どれなら使っても良いの??」@fate_shelled https://qiita.com/fate_shelled/items/a928709d7610cee5aa66
準備
まずはC#のプロジェクトをvisual studioで作成します。 次にそのプロジェクトにPdfSharpをインストールします。1.プロジェクト > NuGet パッケージの管理を開く 2.検索欄に"pdfSharp"を入力する 3.右側"インストール"ボタンをクリックする
コード実装
いよいよコードを実装します。 まずはライブラリをコードにインポートします。using PdfSharp.Pdf;
using PdfSharp.Pdf.IO;
つついて実際に処理を実装します。
1.結合後PDFのオブジェクトを作成
// PDFオブジェクト作成
PdfDocument document = new PdfDocument()
2.結合するPDFを開く
// file:結合するファイルのパス
// PdfDocumentOpenMode.Import:PDFを読み取りモードで開く
// 結合するPDFオブジェクトを作成
PdfDocument inputDocument = PdfReader.Open(file, PdfDocumentOpenMode.Import)
3.結合するPDFの全ページを結合後PDFに追加する
// 頁全件ループ
foreach (PdfPage page in inputDocument.Pages)
{
// PDF頁を追加
document.AddPage(page);
}
// 結合するPDFを閉じる
inputDocument.Close();
4.2,3を結合するPDFの数だけ繰り返す
5.PDFを保存し閉じる
// PDF保存
document.Save(selectedPath);
// PDFを閉じる
document.Close();
このようにして実際に作成したコードは以下の中の関数"pdfMerge"です。
https://github.com/HagiAyato/PDFmerger/blob/main/PDFmerger/IOpg.cs
以下補足
・結合するファイルのパスはListにまとめておき、foreachを回して上記処理2~4を繰り替えすのがおすすめです。
・PDFオブジェクト作成時はusing句を使うことで、確実に処理終了時の解放ができます。
・例外処理(try-catch等)もお忘れなく。
ライセンス表記
PdfSharpはMITライセンスのライブラリで、使用する際はライセンスの表記が必要です。 ソースコード中やreadmeなどにライセンス表記を入れましょう。/*
* PdfSharpライセンス表記
* Creator of PDFsharp is empira Software GmbH
* Kirchstrase 19 53840 Troisdorf Germany
* http://www.empira.de
* PDFsharp (R) is a registered trademark of empira Software GmbH
* Released under the MIT license
* http://www.pdfsharp.net/PDFsharp_License.ashx?AspxAutoDetectCookieSupport=1
*/