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