NonSoft

PDFファイルを分割するサンプル(C#.NET)


 サンプル(ソース/コード)
1つのPDFファイルを指定ページを境に2つのPDFファイルに分割するサンプルです。
PDF出力ライブラリとしてiText.NET(iText.NET.2005-dll-1.4.6-1.cab)を使用しています。
iText.NETのダウンロードサイト:http://sourceforge.net/projects/itextdotnet/

iText.NETはvjslib.dll(J#.NET)を参照設定して使用します。
iText.NETのiText.dllとJSharpLib.dllを参照設定して使用します。

PDF関係のプログラムを最初から作るより、こちらのPDF分割ツールと連携した方が早いかもしれません。

PDF関係のサンプルソースは他にもあります。
PDFファイルを出力するサンプル(C#.NET)
PDFファイルを結合するサンプル(C#.NET)
画像ファイルをPDF変換するサンプル(VB.NET)

VB.NET版はこちらです。
PDFファイルを出力するサンプル(VB.NET)
PDFファイルを分割するサンプル(VB.NET)
PDFファイルを結合するサンプル(VB.NET)
画像ファイルをPDF変換するサンプル(VB.NET)

関連ツールはこちらです。
PDF出力・分割・結合(ツール/ソフト)

★フォームモジュール(Form1.cs)
//--PDF分割サンプル--↓↓--PDF分割サンプル--↓↓--PDF分割サンプル--↓↓--PDF分割サンプル--
using System.IO;
using com.lowagie.text;
using com.lowagie.text.pdf;

public partial class Form1 : Form
{
    // (注意1)vjslib.dll(J#.NET)を参照設定する必要があります。
    // (注意2)iText.dllを参照設定する必要があります。
    // (注意3)JSharpLib.dllを参照設定する必要があります。
    // (注意4)using com.lowagie.text;
    // (注意5)using com.lowagie.text.pdf;
    private void Button1_Click(object sender, EventArgs e)
    {
        // 分割するページ番号
        int PAGESPLIT = 2;

        // 入力用PDFファイルのオープン
        PdfReader rd = new PdfReader("test.pdf");

        // 入力用PDFファイルのページ数取得
        int pn = rd.getNumberOfPages();

        // 入力用PDFのページ数チェック
        if (pn >= PAGESPLIT)
        {
            // 出力用PDFオブジェクトの生成
            Document dc1 = new Document(rd.getPageSizeWithRotation(1));
            Document dc2 = new Document(rd.getPageSizeWithRotation(PAGESPLIT));

            // 出力用PDFファイルのオープン
            FileStream fs1 = new FileStream("test1.pdf", FileMode.Create, FileAccess.Write);
            FileStream fs2 = new FileStream("test2.pdf", FileMode.Create, FileAccess.Write);

            // 出力用PDFオブジェクトとPDFファイルの関連付け
            PdfWriter wr1 = PdfWriter.getInstance(dc1, fs1);
            PdfWriter wr2 = PdfWriter.getInstance(dc2, fs2);

            // PDF出力開始
            dc1.open();
            dc2.open();

            // PdfContentByte取得
            PdfContentByte pcb1 = wr1.getDirectContent();
            PdfContentByte pcb2 = wr2.getDirectContent();

            // 分割する1つ目のPDF出力処理
            for (int i = 1; i <= PAGESPLIT - 1; i++)
            {
                // ページサイズ設定
                dc1.setPageSize(rd.getPageSizeWithRotation(i));

                // 改ページ
                dc1.newPage();

                // ページ取得
                PdfImportedPage pip = wr1.getImportedPage(rd, i);

                // ページ出力
                if (rd.getPageRotation(i) == 0)
                {
                    // 回転しない
                    pcb1.addTemplate(pip, 1.0F, 0, 0, 1.0F, 0, 0);
                }
                else
                {
                    // 回転する
                    pcb1.addTemplate(pip, 0, -1.0F, 1.0F, 0, 0, 
                        rd.getPageSizeWithRotation(i).height());
                }
            }

            // 分割する2つ目のPDF出力処理
            for (int i = PAGESPLIT; i <= pn; i++)
            {
                // ページサイズ設定
                dc2.setPageSize(rd.getPageSizeWithRotation(i));

                // 改ページ
                dc2.newPage();

                // ページ取得
                PdfImportedPage pip = wr2.getImportedPage(rd, i);

                // ページ出力
                if (rd.getPageRotation(i) == 0)
                {
                    // 回転しない
                    pcb2.addTemplate(pip, 1.0F, 0, 0, 1.0F, 0, 0);
                }else{
                    // 回転する
                    pcb2.addTemplate(pip, 0, -1.0F, 1.0F, 0, 0, 
                        rd.getPageSizeWithRotation(i).height());
                }
            }

            // PDF出力終了
            dc1.close();
            dc2.close();
        }
    }
}
//--PDF分割サンプル--↑↑--PDF分割サンプル--↑↑--PDF分割サンプル--↑↑--PDF分割サンプル--