フォルダーの中に入っているPDFファイル全部結合する【C#】

目次

経緯

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("結合完了しました。");
    }

私は「結合」ボタンを作って、そのボタンを押すと、プログラムが実行する仕組みにしています。

参考になれば、幸いです。

ここまで読んでいただきありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次