皆さん、こんにちは!
上越市を拠点にし、「FA設備・装置開発」と「画像処理」に強い会社、NSIです!
私達は豊富な経験と専門知識で、各種業界の自動化・システム化のお手伝いをしています。
今回は C#を使ってPDFを編集する方法 をまとめました。
PDFを結合・抽出したい!という方の参考になれば嬉しいです。
PDFとは?
PDFとは、Portable Document Formatの略で、Adobe Systems社が開発した電子文書フォーマットで、特定の環境に依存せずに表示できる のが特徴です。
PDFは、電子文書の配布や共有、印刷物の電子化など、様々な用途で利用されています。
活用事例を元にメリットを考える
本記事では、主にPDFの結合・抽出方法について説明していきます。
これらができるメリットとは何なのか、活用事例を元に考えてみました。
事例1. 報告書の統合(結合)
例えば、複数人の報告書をメールで送付する際、資料が個別になっていると1つずつ開く必要があり、確認が大変です。
PDFを結合することで、効率的に内容の確認が可能となります。
事例2. スキャン資料の抜粋(抽出)
例えば、ある別々の資料を誤って連続でスキャンしてしまった場合、別々にスキャンし直すのは手間となります。
PDFを抽出することで、スキャンし直す手間がなくなります。
事例3. マニュアルの作成(結合+抽出)
例えば、あるマニュアルを作成する際、資料Aから一部分だけ抽出し、それを資料Bと結合させたいという場合があったとします。
PDFの結合と抽出を組み合わせることで、複雑な編集も可能となります。
PDFを編集してみる:導入
それでは早速、PDFを編集する処理を作っていきましょう!
長くなりそうなので、今回は要点を絞って説明していきます。
C#でPDFを扱えるライブラリは「iTextSharp」「PDFSharp」「Spire.PDF」など、いくつか存在します。
今回はオープンソースの「PDFSharp」を使用します。こちらはMITライセンスであるため、商用利用も可能です。
MITライセンスを商用利用する場合、著作権の記載をお忘れなく!
まず、Windowsアプリケーション(.NET Framework)のプロジェクトを作成します。
NuGetパッケージマネージャーで「PDFSharp」と検索し、先頭に表示された項目をインストールします。
なお、バージョンは「1.50.5147」を選択しました。
補足:バージョンについて
バージョンは「6.0.0」が最新ですが、.NET Framework6.0が必要となります。
使用しているPCの環境に応じてバージョンを選択してください。
PDFを編集してみる:作成
続いて、画面と処理を作成していきます。
画面の作成
以下の画面を作成します。
No. | コントロール名 | 名前 |
① | ListBox | listBox_結合 |
② | Button | button_結合 |
③ | Button | button_結合実行 |
④ | TextBox | textBox_抽出 |
⑤ | Button | button_抽出 |
⑥ | NumericUpDown | numericUpDown_開始ページ |
⑦ | NumericUpDown | numericUpDown_終了ページ |
⑧ | Button | button_抽出実行 |
今回は必要最低限の機能ですが、対象のPDFの中身も閲覧できるとより使いやすくなりそうですね。
C#でPDFを表示させる方法は、こちらの記事をご覧ください。
処理の作成
複数のPDFを結合する処理を作成します。
「button_結合実行」のクリックイベントに以下の処理を追加します。
/// <summary>
/// 結合実行
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button_結合実行_Click(object sender, EventArgs e)
{
// 結合先のPDFを作成
PdfDocument dstPDF = new PdfDocument();
// リストボックス内のPDF
foreach(string pdf in listBox_結合.Items)
{
// PDFを開く
PdfDocument srcPDF = PdfReader.Open(pdf, PdfDocumentOpenMode.Import);
foreach(PdfPage page in srcPDF.Pages)
{
// 結合先のPDFに各ページを追加
dstPDF.AddPage(page);
}
}
// PDF保存
dstPDF.Save($"{DateTime.Now.ToString("yyMMddHHmmss")}.pdf");
}
続いて、1つのPDFから指定したページ範囲を抽出する処理を作成します。
「button_抽出実行」のクリックイベントに以下の処理を追加します。
/// <summary>
/// 抽出実行
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button_抽出実行_Click(object sender, EventArgs e)
{
// PDFを開く
PdfDocument srcPDF = PdfReader.Open(textBox_抽出.Text, PdfDocumentOpenMode.Import);
// 抽出先のPDFを作成
PdfDocument dstPDF = new PdfDocument();
// 抽出範囲
int startPage = (int)numericUpDown_開始ページ.Value;
int endPage = (int)numericUpDown_終了ページ.Value;
// 指定範囲のページ
for (int i = startPage; i <= endPage; i++)
{
// 抽出するページを取得
PdfPage page = srcPDF.Pages[i - 1]; // Indexは0スタートなので-1
// 抽出先のPDFにページを追加
dstPDF.AddPage(page);
}
// PDF保存
dstPDF.Save($"{DateTime.Now.ToString("yyMMddHHmmss")}.pdf");
}
後は、ファイル選択処理を作成すれば準備完了です。
ソースコードは省略しますが、ファイル選択ダイアログを表示 → 選択されたファイル名を画面にセット というような処理を作成します。注意点として、結合時は複数ファイル選択をできるようにする必要があるため、忘れないようにしてください。
PDFを編集してみる:実行
それでは早速、作成した処理を実行してみましょう!
今回は2つのPDFファイルを用意しました。
【テスト用PDF①.pdf】
【テスト用PDF②.pdf】
PDFの結合
ソフトを起動し、[…]ボタンから結合するPDFを選択します。
リストボックスにPDFのパスが追加されていることを確認し、[結合]をクリックします。
結合されたPDFは、exeと同じ階層に保存されています。
果たして結合できているのか…?
バッチリ結合できました!
PDFの抽出
ソフトを起動し、[…]ボタンから抽出するPDFを選択します。
テキストボックスにPDFのパスが追加されていることを確認後、抽出したいページ範囲を指定し、 [抽出]をクリックします。
保存先は結合と同様です。
果たして抽出できているのか…?
指定したページが抽出できました!
最後に
今回は C#でPDFを編集する方法 をご紹介しました。
ライブラリを使用することで、簡単にPDFの結合・抽出ができました。
PDFの編集は意外と使うので、ぜひ参考にしてみてください。
ここまで読んでいただき、ありがとうございました。
ご質問・ご要望・ご相談などは、下記お問い合わせフォームからお気軽にご連絡ください。
http://www.net-nsi.co.jp/toiawase.html
この記事が役に立ったらGoodボタンを押してね~