
PDF文書の指定位置に、予めPDF文書として用意したPDFのQRコード画像を貼り付けQRコードを貼り付けます。
QRコード画像をPDF文書(QRコードPDF文書)として用意します
他のPDF文書(貼り付け先PDF文書)の指定ページに、QRコード画像を貼り付ける矩形の大きさ(配置矩形)を指定します。
QRコードPDF文書を配置矩形の大きさに合うように拡大縮小して貼り付けます。こうして挿入されたQRコードは拡大・縮小でにじむことがありません。
package cookbook;
import java.io.*;
import jp.co.antenna.ptl.*;
public class AddPdfQRcodeOnAllPage {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
if (args.length < 3) {
System.out.println("usage: java AddPdfQRcodeOnAllPage in-pdf-file out-pdf-file insert-QRcode-pdf");
return;
}
try (PtlParamInput inputFile = new PtlParamInput(args[0]);
PtlParamOutput outputFile = new PtlParamOutput(args[1]);
PtlPDFDocument doc = new PtlPDFDocument();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) {
// PDFファイルをロードします。
doc.load(inputFile);
//コマンドライン引数の取得
String insertPdfURI = args[2];
int numPages = doc.getPageCount();
System.out.println("ページ数:" + numPages);
try (PtlPages pages = doc.getPages();
PtlRect outputRect = new PtlRect()) {
// ページコンテナが空かどうか
if (pages.isEmpty()) {
System.err.println("入力PDFのページコンテナが空");
return;
}
setQROutputRect(br, outputRect); // 出力矩形の設定(setQROutputRect()を用いる)
for(int i = 0; i < numPages; i++) {
try (PtlPage page = pages.get(i)) { // ページの取得
// フォームの描画処理
drawQRcode(page, insertPdfURI, outputRect);
}
}
}
...【AppendPages.javaと同じ処理のため省略
・PtlParamOutputを用いてPtlPDFDocument docの内容を出力
・PtlException, Exception, Error を catchするエラー処理
・finally文で"--完了--"と表示する処理】...
}
public static void drawQRcode (PtlPage page, String insertPdfURI, PtlRect outputRect)
throws PtlException, Exception, Error {
try(PtlContent content = page.getContent();// 挿入先ページコンテントの取得
PtlParamInput insertPdf = new PtlParamInput(insertPdfURI); // 挿入PDF指定に使うパラメータクラス
PtlPDFDocument doc2 = new PtlPDFDocument()) { // 挿入PDFの実体
doc2.load(insertPdf);
try(PtlPages pages2 = doc2.getPages()) {
// ページコンテナが空かどうか
if (pages2.isEmpty()) {
System.out.println("挿入するPDFのページコンテナが空");
return;
}
try(PtlPage pageInsert = pages2.get(0)) { // 先頭ページの取得
// 指定ページの挿入()
content.drawForm(outputRect, PtlContent.ALIGN.ALIGN_TOP_LEFT, pageInsert);
}
}
}
}
public static PtlRect setQROutputRect(BufferedReader br, PtlRect outputRect)
throws IOException, PtlException, Exception, Error{
float top, bottom, left, right;
boolean isValueOkay = false;
while(!isValueOkay) {
System.out.println("QRコードの配置矩形の各数値を入力してください。");
System.out.println("矩形の左上座標が配置の基準になり、");
System.out.println("そこから右下座標までの範囲を超えない範囲でQRコードが描画されます。");
System.out.print("top (mm) : ");
top = Float.parseFloat(br.readLine());
System.out.print("bottom (mm) : ");
bottom = Float.parseFloat(br.readLine());
if(top < bottom) { //不正矩形は再入力させる
System.out.println("topの値はbottomよりも大きい値を指定して再度入力してください。");
continue;
}
System.out.print("right (mm) : ");
right = Float.parseFloat(br.readLine());
System.out.print("left (mm) : ");
left = Float.parseFloat(br.readLine());
if(right < left) { //不正矩形は再入力させる
System.out.println("rightの値はleftよりも大きい値を指定して再度入力してください。");
continue;
}
//矩形を正しく指定できた場合の処理
isValueOkay = true;
outputRect.setTop(top);
outputRect.setBottom(bottom);
outputRect.setRight(right);
outputRect.setLeft(left);
}
return outputRect;
}
}
AddPdfQRcodeOnAllPage.java
C:\samples>java cookbook.AddPdfQRcodeOnAllPage tagged-pdf.pdf addPdfQROnAllPage.pdf QRcode.pdf ページ数:44 QRコードの配置矩形の各数値を入力してください。 矩形の左上座標が配置の基準になり、 そこから右下座標までの範囲を超えない範囲でQRコードが描画されます。 top (mm) : 255 bottom (mm) : 240 right (mm) : 35 left (mm) : 20 -- 完了 --
PDF形式で作成した文書の右上にPDF形式で作成したQRコードを追加した例を図に示しました。
