
挿入するレイヤーのZオーダーを指定します。
挿入するレイヤーのZオーダーを指定し、6.1.1 レイヤーに使用するPDF文書ページを設定と同様にしてレイヤーを挿入します。Zオーダーは前面と背面の二つから選択します。
PtlParamDrawLayer.APIsetZorder(int zorder): レイヤーのZオーダーを設定
Zオーダーは次表の列挙型定数で指定します。
| 列挙型定数 | 説明 |
|---|---|
| ZORDER_BACK | 背面 |
| ZORDER_FRONT | 前面 |
設定しない場合はデフォルト値としてZORDER_FRONTが使用されます。
package cookbook;
import jp.co.antenna.ptl.*;
public class DrawLayerSetZorder {
// そのクラスのusageを表示する関数
private static void printUsage() {
System.out.println("usage: java DrawLayerSetZorder in-pdf-file out-pdf-file" +
" page-num insert-pdf-file page-num-to-insert set-z-order");
System.out.println("set-z-order:");
System.out.println("0:レイヤーのZオーダーをに背面する" +
" 1:レイヤーのZオーダーを前面にする");
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
if (args.length < 6) {
printUsage();
return;
}
// コマンドライン引数の判定
boolean setZorder = true;
try
{
setZorder =
readBoolArgs(args[5], "set-z-order は 0か1で指定してください。");
}
catch (IllegalArgumentException ex) {
System.out.println(ex.getMessage());
printUsage(); // usageメッセージの表示
return;
}
try (PtlParamInput inputFile = new PtlParamInput(args[0]);
PtlParamOutput outputFile = new PtlParamOutput(args[1]);
PtlPDFDocument doc = new PtlPDFDocument()) {
// PDFファイルをロードします。
doc.load(inputFile);
// コマンドライン引数の判定
int pageToAdd = Integer.parseInt(args[2]);
int numPages = doc.getPageCount();
System.out.println("ページ数:" + numPages);
if((numPages < 0)||(numPages < pageToAdd)) {
System.err.println("page-numは入力PDFの全ページ数よりも小さい正の値を" +
"指定してください。");
return;
}
String insertPDFPath = args[3];
int insertPageNum = Integer.parseInt(args[4]);
try (PtlPages pages = doc.getPages()) { // ページコンテナの取得
// ページコンテナが空かどうか
if (pages.isEmpty()) {
System.out.println("ページコンテナが空");
return;
}
// ページの取得(パラメータindexは0が先頭のため1を引く)
try (PtlPage page = pages.get(pageToAdd - 1)) {
//レイヤーの描画
drawLayerSetShow(page, insertPDFPath, insertPageNum, setZorder);
}
}
// ファイルに保存します。
doc.save(outputFile);
}
...【ExtractText.javaと同じ処理のため省略
・エラーメッセージ処理と出力】...
}
public static void drawLayerSetShow(PtlPage page, String insertPDFPath,
int insertPageNum, boolean setZorder)
throws PtlException, Exception, Error {
try (PtlSize pageSize = page.getSize(); // ページサイズ
PtlContent content = page.getContent(); // ページコンテントの取得
PtlPDFDocument docToInsert = new PtlPDFDocument();
//挿入するPDF
PtlParamInput inputFileToInsert = new PtlParamInput(insertPDFPath);
// 描画矩形の指定(PDFいっぱいに指定)
PtlRect rect = new PtlRect(0.0f,
0.0f,
pageSize.getWidth(),
pageSize.getHeight())) {
// PDFファイルをロードします。
docToInsert.load(inputFileToInsert);
try (PtlPages pagesToInsert = docToInsert.getPages()) { // ページコンテナの取得
// ページコンテナが空かどうか
if (pagesToInsert.isEmpty()) {
System.out.println("ページコンテナが空");
return;
}
// ページの取得(パラメータindexは0が先頭のため1を引く)
// レイヤーのパラメーターの取得
try (PtlPage pageInsert = pagesToInsert.get(insertPageNum - 1);
PtlParamDrawLayer param = new PtlParamDrawLayer()) {
// レイヤーの配置のZオーダーを設定
if(setZorder){
param.setZorder(PtlParamDrawLayer.ZORDER.ZORDER_FRONT);
}else{
param.setZorder(PtlParamDrawLayer.ZORDER.ZORDER_BACK);
}
// レイヤーにするページ
param.setPage(pageInsert);
// レイヤーの名前
param.setName("Layer1");
// レイヤーの表示/非表示を指定
param.setShow(PtlParamDrawLayer.SHOW.SHOW_ON);
// レイヤーの描画
content.drawLayer(rect, PtlContent.ALIGN.ALIGN_CENTER, param);
}
}
}
}
/**
* 0または1を入力されたargsにより、trueまたはfalseを返すメソッド。
*
* @param args 与えられるコマンドライン引数。0または1でtrueまたはfalseを指定する。
* @param errorMessage argsが0か1でなかった場合に出力されるエラーメッセージを指定する。
* @return argsの数値を読み取った結果を戻す
* @throws java.lang.IllegalArgumentException argsが0か1でなかった場合に発生。
*/
public static boolean readBoolArgs(String args, String errorMessage)
throws IllegalArgumentException {
...【ExtractTextSetRect.javaと同じ処理のため省略】...
}
}
DrawLayerSetZorder.java
C:\samples>>java cookbook.DrawLayerSetZorder usage: java DrawLayerSetZorder in-pdf-file out-pdf-file page-num insert-pdf-file page-num-to-insert set-z-order set-z-order: 0:レイヤーのZオーダーをに背面する 1:レイヤーのZオーダーを前面にする C:\samples>>java cookbook.DrawLayerSetZorder novelText.pdf DrawLayerSetZorder0.pdf 1 AHLogo.pdf 1 0 ページ数:2 -- 完了 -- C:\samples>>java cookbook.DrawLayerSetZorder novelText.pdf DrawLayerSetZorder1.pdf 1 AHLogo.pdf 1 1 ページ数:2 -- 完了 --
次の図は左がレイヤーのZオーダーを背面に、右が前面に指定した結果です。
