目次
経緯
C#でPDFが多数あって、それを手動で結合していた。
その作業がめんどくさいので、プログラムでできないか考えました。
「iTextSharp」を使う
まず、プログラムを書きます。PDFファイルを結合するためのMergePDFsメソッドを定義しています。
「iTextSharp」はインストールしないとないと思うので、まずインストールしてください。
using iTextSharp.text; using iTextSharp.text.pdf; private static void MergePDFs(List<string> inputFiles, string outputFile) { using (var fs = new FileStream(outputFile, FileMode.Create)) { var document = new Document(); var copy = new PdfCopy(document, fs); try { document.Open(); foreach (var inputFile in inputFiles) { var reader = new PdfReader(inputFile); var pageCount = reader.NumberOfPages; for (var i = 1; i <= pageCount; i++) { var page = copy.GetImportedPage(reader, i); copy.AddPage(page); } // パスワードが設定されている場合はパスワードを設定 if (reader.IsEncrypted()) { copy.SetEncryption( PdfWriter.STRENGTH128BITS, null, null, PdfWriter.ALLOW_PRINTING ); } reader.Close(); } } catch (Exception ex) { MessageBox.Show(ex.Message); } finally { if (document.IsOpen()) document.Close(); } } }
次に結合するプログラムを書きます。「フォルダーの中にあるPDFファイルをリスト化して、それを結合している」という感じです。
private void btn_merge_Click(object sender, EventArgs e)
{
string pdfFolder = txtBox_folderpath.Text;
string savepdfFolder = txtBox_savefolderpath.Text;
// PDFファイルのリストを作成
List<string> pdfList = new List<string>();
//pdfファイルを処理するループ
foreach (string pdfFile in Directory.GetFiles(pdfFolder, "*.pdf"))
{
// PDFファイルをリストに追加
pdfList.Add(pdfFile);
}
// PDFファイルを結合
string outputFile = savepdfFolder + "Merged.pdf";
MergePDFs(pdfList, outputFile);
MessageBox.Show("結合完了しました。");
}
私は「結合」ボタンを作って、そのボタンを押すと、プログラムが実行する仕組みにしています。
参考になれば、幸いです。
ここまで読んでいただきありがとうございました。