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; }
※エラー処理などは、それぞれで対応する。
実行結果
んな感じ