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













