LoginSignup
2
13

More than 3 years have passed since last update.

PdfSharpでPDFを結合する

Last updated at Posted at 2020-10-27

本記事は、自分サイトのこの記事と同一内容です。

はじめに


PDFを結合するプログラムを日本語で調べると、出てくる多くはiTextSharpを使う方法です。
これでもいいのですが、無料版のライセンスがAPGLであり商用ソフトを作る場合には支障をきたします。
そこで今回は、MITライセンスのpdfSharpを用いてPDFを結合してみます。

※ライセンスの違いは以下の記事を参照
 「オープンソースライセンス、どれなら使っても良いの??」@fate_shelled
 

準備


まずは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
 */
2
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
13