
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の値を変更しています。
