C# iTextSharp でPDFを1ページ毎に分割し新しいPDFファイルを作成する。

  • デル株式会社
  • iTextSharp でPDFを1ページ毎に分割し新しいPDFファイルを作成する。

    PDFファイルを、1ページ毎に分割して、ファイルを作成するサンプル。

    ソース

    取り敢えず、動く。かも。。

    using System;
    using System.Windows.Forms;
    
    using iTextSharp.text;
    using iTextSharp.text.pdf;
    using System.IO;
    using System.Diagnostics;
    
           private void button1_Click(object sender, EventArgs e)
            {
                if( SplitPDFfile(@"D:\TEST\Test.pdf", @"D:\TEST") == false )
                {
                    //エラー処理
                    MessageBox.Show( "エラーが発生したよ。", 
                                     "ERROR", 
                                      MessageBoxButtons.OK, 
                                      MessageBoxIcon.Error );
                   
                    return;
                }
    
                MessageBox.Show( "完了",
                                 "INFO", 
                                 MessageBoxButtons.OK, 
                                 MessageBoxIcon.Information );
            }
    
    
            /// <summary>
            /// PDFファイルを1ページ毎に分割し、ファイル出力する。
            /// </summary>
            /// <param name="sOrigPDFPath">
            /// ]分割対象のPDFパス
            /// </param>
            /// <param name="sOutPutDir">
            /// 分割後出力ディレクトリパス
            /// </param>
            /// <returns>
            /// true:正常
            /// false:以上
            /// </returns>
            private bool SplitPDFfile( string sOrigPDFPath, string sOutPutDir )
            {
                bool bRet = true; // 戻り値
                
                string sOrigFileName = Path.GetFileName( sOrigPDFPath );
                PdfReader objPdfReader = new PdfReader(sOrigPDFPath); // PDFリーダ
    
                // PDFファイルページ分ループ
                for ( int nCount = 1; nCount <= objPdfReader.NumberOfPages; nCount++)
                {
                    Document objITextDoc = null;
                    PdfWriter objPDFWriter = null;
                    PdfContentByte objPDFContByte = null;
                    PdfImportedPage objPDFImpPage = null;
    
                    try
                    {
    
                        // 出力ファイル名
                        string sNewPDFPath = sOutPutDir + 
                                            "\\" + 
                                            nCount.ToString("D4") + 
                                            "_" + 
                                            sOrigFileName;
                       
    
                        // PDFドキュメント作成(対象ページサイズ)
                        objITextDoc = new Document(objPdfReader.GetPageSize(nCount));
    
                        // pdfのライターを作成・オープンし、セキュリティの設定を行う。
                        objPDFWriter = PdfWriter.GetInstance( objITextDoc,
                                                              new FileStream( sNewPDFPath, FileMode.OpenOrCreate ) );
    
                        // PDFライターオープン
                        objPDFWriter.Open();
    
                        // 分割後PDFセキュリティ設定
                        // セキュリティ設定が不要な場合は、下記、SetEncryptionをコメント
                        // パスワード部分を、ブランク""にすると、パスワードは設定されない
                        objPDFWriter.SetEncryption(PdfWriter.STRENGTH128BITS,   // 暗号化の強度(128bit暗号)
                                                    "pass1",                    // ユーザーパスワード 
                                                    "pass2",                    // オーナーパスワード
                                                    PdfWriter.ALLOW_COPY |      // コピーを許可
                                                    PdfWriter.ALLOW_PRINTING);  // 印刷を許可
    
    
                        // ドキュメントオープン
                        objITextDoc.Open();
    
                        // コンテンツ設定
                        objPDFContByte = objPDFWriter.DirectContent;
    
                        // 新ページ作成
                        objITextDoc.NewPage();
    
                        // 入力ファイルのページ取得( 元PDFの対象ページ )
                        objPDFImpPage = objPDFWriter.GetImportedPage( objPdfReader, nCount );
    
                        // 入力ファイルのページ内容を挿入
                        objPDFContByte.AddTemplate( objPDFImpPage, 0, 0);
    
                        // 文書プロパティ設定
                        objITextDoc.AddKeywords("PDF分割してみた、キーワード");
                        objITextDoc.AddAuthor  ("作者");
                        objITextDoc.AddTitle   ("PDFファイル分割");
                        objITextDoc.AddCreator ("PDFファイル分割くん");
                        objITextDoc.AddSubject ("分割してみた");
                   
                        Debug.WriteLine( sNewPDFPath );
    
    
                    }
                    catch (Exception exp)
                    {
                        MessageBox.Show(exp.Message);
    
                        bRet = false;
                    }
                    finally
                    {
                        if (objITextDoc != null)
                        {
                            objITextDoc.Close();
                        }
    
                        if(objPDFWriter != null )
                        {
                            objPDFWriter.Close();
                        }
                    }
    
                    if (bRet == false)
                    {
                        break;
                    }
    
                } // Exit For
    
                objPdfReader.Close();
    
                return bRet;
            }
    
    

    ※エラー処理などは、それぞれで対応する。



    実行結果

    んな感じ

    関連記事

    ページ上部へ戻る