|
|||||
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分割サンプル-- |