【C#】iTextSharpを利用してPDFファイルのページを削除する

前回の続きのはなし
ExcelファイルからPDFを生成する必要があったけど、
リンクされた図の仕様(?)のためにPDF生成してから冒頭のテンプレートを削除することになった。

参考
stackoverflow.com

using System.IO;
using iTextSharp.text.pdf;
using iTextSharp.text;

/// <summary>
/// PDFファイルから指定したページを削除する
/// </summary>
/// <param name="sourceFile">ページ削除するPDFファイル</param>
/// <param name="destinationFile">ページ削除後のPDFファイル</param>
/// <param name="pagesToRemove">削除ページ</param>
public void RemovePagesFromPdf(String sourceFile, String destinationFile, params int[] pagesToRemove)
{
    // ページ削除するPDFファイルを開く
    PdfReader pdfReader = new PdfReader(sourceFile);

    // ページサイズを取得する
    var rectangle = pdfReader.GetPageSize(1);

    // 削除後PDFを作成する
    using (FileStream fileStream = new FileStream(destinationFile, FileMode.Create, FileAccess.Write, FileShare.None))
    {
        using (Document document = new Document())
        {
            // ページサイズを設定する
            document.SetPageSize(rectangle);

            using (PdfWriter pdfWriter = PdfWriter.GetInstance(document, fileStream))
            {
                // 削除後PDFを開く
                document.Open();

                for (int i = 1; i <= pdfReader.NumberOfPages; i++)
                {
                    if (!pagesToRemove.Contains(i))
                    {
                        // 削除ページに含まれないページの場合は削除後PDFにコピーする
                        document.NewPage();
                        pdfWriter.DirectContent.AddTemplate(pdfWriter.GetImportedPage(pdfReader, i), 0, 0);
                    }
                }

                // ファイルをクローズしてPDFをコミットする
                document.Close();
            }
        }
    }
}