NonSoft

PDFファイルを分割するサンプル(VB.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ファイルを出力するサンプル(VB.NET)
PDFファイルを結合するサンプル(VB.NET)
画像ファイルをPDF変換するサンプル(VB.NET)

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

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

★フォームモジュール(Form1.vb)
'--PDF分割サンプル--↓↓--PDF分割サンプル--↓↓--PDF分割サンプル--↓↓--PDF分割サンプル--
Imports System.io
Imports com.lowagie.text
Imports com.lowagie.text.pdf

Public Class Form1
    ' (注意1)vjslib.dll(J#.NET)を参照設定する必要があります。
    ' (注意2)iText.dllを参照設定する必要があります。
    ' (注意3)JSharpLib.dllを参照設定する必要があります。
    Private Sub Button1_Click( _
        ByVal sender As System.Object, ByVal e As System.EventArgs) _
        Handles Button1.Click
        ' 分割するページ番号
        Const PAGESPLIT As Integer = 2

        ' 入力用PDFファイルのオープン
        Dim rd As PdfReader = New PdfReader("test.pdf")

        ' 入力用PDFファイルのページ数取得
        Dim pn As Integer = rd.getNumberOfPages()

        ' 入力用PDFのページ数チェック
        If pn >= PAGESPLIT Then
            ' 出力用PDFオブジェクトの生成
            Dim dc1 As Document = New Document(rd.getPageSizeWithRotation(1))
            Dim dc2 As Document = New Document(rd.getPageSizeWithRotation(PAGESPLIT))
 
           ' 出力用PDFファイルのオープン
            Dim fs1 As FileStream = New FileStream("test1.pdf", FileMode.Create, FileAccess.Write)
            Dim fs2 As FileStream = New FileStream("test2.pdf", FileMode.Create, FileAccess.Write)

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

            ' PDF出力開始
            dc1.open()
            dc2.open()

            ' PdfContentByte取得
            Dim pcb1 As PdfContentByte = wr1.getDirectContent()
            Dim pcb2 As PdfContentByte = wr2.getDirectContent()

            ' 分割する1つ目のPDF出力処理
            For i As Integer = 1 To PAGESPLIT - 1
                ' ページサイズ設定
                dc1.setPageSize(rd.getPageSizeWithRotation(i))

                ' 改ページ
                dc1.newPage()

                ' ページ取得
                Dim pip As PdfImportedPage = wr1.getImportedPage(rd, i)

                ' ページ出力
                If rd.getPageRotation(i) = 0 Then
                    ' 回転しない
                    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())
                End If
            Next

            ' 分割する2つ目のPDF出力処理
            For i As Integer = PAGESPLIT To pn
                ' ページサイズ設定
                dc2.setPageSize(rd.getPageSizeWithRotation(i))

                ' 改ページ
                dc2.newPage()

                ' ページ取得
                Dim pip As PdfImportedPage = wr2.getImportedPage(rd, i)

                ' ページ出力
                If rd.getPageRotation(i) = 0 Then
                    ' 回転しない
                    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())
                End If
            Next

            ' PDF出力終了
            dc1.close()
            dc2.close()
        End If
    End Sub
End Class
'--PDF分割サンプル--↑↑--PDF分割サンプル--↑↑--PDF分割サンプル--↑↑--PDF分割サンプル--