PDF文書のページ境界を設定し直します。
この例では次の機能を使っています。
package cookbook; import java.io.*; import jp.co.antenna.ptl.*; public class SetBoundary { /** * @param args the command line arguments */ public static void main(String[] args) { if (args.length < 2) { System.out.println("usage: java SetBoundary in-pdf-file out-pdf-file"); return; } ...【AppendPages.javaと同じ処理のため省略 ・PtlParamInputを用いてPtlPDFDocument docに入力PDFをロード ・PtlParamOutputを用いて出力PDF名を指定】... // ページ数の取得 int numPages = doc.getPageCount(); System.out.println("ページ数:" + numPages); try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) { int boxType = setBoxType(br); //Boxの種類を数値で指定するメソッド int changingPage = setChangingPage(br);//境界値を変更したいページを指定するメソッド if((changingPage < 0)||(numPages < changingPage)) { System.err.println("変更したいページは正の、全ページ数より少ない値を指定してください。"); return ; } ...【RemovePages.javaと同じ処理のため省略 ・doc.getPages()メソッドを用いてPtlPages pagesにページコンテナを取得 ・ページコンテナが空だった場合にエラーを出力して終了】... // 変更したいページの取得 // PtlPages.get() のパラメータindexは0が先頭のため、changingPageから1引いています。 try (PtlPage page = pages.get(changingPage -1)) { float top, bottom, left,right; System.out.println("変更したい境界値の数値を入力してください。"); System.out.print("top (mm) : "); top = Float.parseFloat(br.readLine()); System.out.print("bottom (mm) : "); bottom = Float.parseFloat(br.readLine()); System.out.print("left (mm) : "); left = Float.parseFloat(br.readLine()); System.out.print("right (mm) : "); right = Float.parseFloat(br.readLine()); switch(boxType) { case 1://MediaBox try(PtlRect mediaBox = new PtlRect(left, bottom, right, top)) { System.out.println(changingPage +"ページ目 MediaBox の[top, bottom, left, right]を、"); System.out.println("[" + top +", " + bottom +", " + left +", " + right +"]に変更します。"); page.setMediaBox(mediaBox); } break; case 2: //CropBox try(PtlRect cropBox = new PtlRect(left, bottom, right, top)) { System.out.println(changingPage +"ページ目 CropBox の[top, bottom, left, right]を、"); System.out.println("[" + top +", " + bottom +", " + left +", " + right +"]に変更します。"); page.setCropBox(cropBox); } break; case 3: //BleedBox try(PtlRect bleedBox = new PtlRect(left, bottom, right, top)) { System.out.println(changingPage +"ページ目 BleedBox の[top, bottom, left, right]を、"); System.out.println("[" + top +", " + bottom +", " + left +", " + right +"]に変更します。"); page.setBleedBox(bleedBox); } break; case 4: //TrimBox try(PtlRect trimBox = new PtlRect(left, bottom, right, top)) { System.out.println(changingPage +"ページ目 TrimBox の[top, bottom, left, right]を、"); System.out.println("[" + top +", " + bottom +", " + left +", " + right +"]に変更します。"); page.setTrimBox(trimBox); } break; case 5: //ArtBox try(PtlRect artBox = new PtlRect(left, bottom, right, top)) { System.out.println(changingPage +"ページ目 ArtBox の[top, bottom, left, right]を、"); System.out.println("[" + top +", " + bottom +", " + left +", " + right +"]に変更します。"); page.setArtBox(artBox); } break; } } ...【AppendPages.javaと同じ処理のため省略 ・PtlParamOutputを用いてPtlPDFDocument docの内容を出力 ・PtlException, Exception, Error を catchするエラー処理 ・finally文で"--完了--"と表示する処理】... } public static int setBoxType(BufferedReader br) throws IOException{ int boxType = 0; System.out.println("変更したい境界値の種類を数値で指定してください。"); System.out.println("1: MediaBox, 2: CropBox, 3: BleedBox, 4: TrimBox, 5:ArtBox"); while((boxType < 1)||(5 < boxType)) { boxType = Integer.parseInt(br.readLine()); if((boxType < 1) || (5 < boxType)) { System.out.println("数値は1~5の範囲で指定してください。"); } } return boxType; } public static int setChangingPage(BufferedReader br) throws IOException{ int changingPage = 0; System.out.println("変更したいページを数値で指定してください。"); while(changingPage < 1) { changingPage = Integer.parseInt(br.readLine()); if(changingPage < 1) { System.out.println("数値は正の数を指定してください。"); } } return changingPage; } }
SetBoundary.java
C:\samples>java cookbook.SetBoundary usage: java SetBoundary in-pdf-file out-pdf-file C:\samples>java cookbook.SetBoundary CSS-Print-v4.pdf CSS-Print-v4-change.pdf ページ数:140 変更したい境界値の種類を数値で指定してください。 1: MediaBox, 2: CropBox, 3: BleedBox, 4: TrimBox, 5:ArtBox 2 変更したいページを数値で指定してください。 1 変更したい境界値の数値を入力してください。 top (mm) : 271 bottom (mm) : 14 left (mm) : 14 right (mm) : 196 1ページ目 CropBox の[top, bottom, left, right]を、 [271.0, 14.0, 14.0, 196.0]に変更します。 -- 完了 --
元のPDF文書:CSS-Print-v4.pdfのMediaBoxとCropBoxは1.2.1 ページ境界値の取得の例で示したように同じ値が設定されています。CropBoxの境界値をTrimBoxと同じ値に設定することにより、仕上がりサイズで表示(印刷)されるようになります。
本例では1ページ目だけに対してCropBoxの値を変更しています。