2.2.5 QRコードを配置

images/AddQRcodeOnAllPage-top.png

狙い・効果

QRコード画像を追加QRコード画像を用意しておき貼り付けます。

処理の概要

PDF文書の指定位置にQRコードを貼り付ける矩形領域を設定します。

QRコード画像を読み込んでPDF文書に追加します。

PDF Tool APIの主な機能

プログラム例

package cookbook;

import java.io.*;
import jp.co.antenna.ptl.*;


public class AddQRcodeOnAllPage {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        if (args.length < 3)
        {
            System.out.println("usage: java AddQRcodeOnAllPage in-pdf-file out-pdf-file insert-image-file");
            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 imageURI = args[2];
            int numPages = doc.getPageCount();
            System.out.println("ページ数:" + numPages);


        ...【RemovePages.javaと同じ処理のため省略
             ・doc.getPages()メソッドを用いてPtlPages pagesにページコンテナを取得
             ・ページコンテナが空だった場合にエラーを出力して終了】...

                try(PtlRect outputRect = setOutputRect(br))// 出力矩形の設定(setOutputRectを用いて初期化)
                {
                    for(int i = 0; i < numPages; i++)
                    {
                        try (PtlPage page = pages.get(i);// ページの取得(パラメータindexは0が先頭のため1を引く)
                             PtlContent content = page.getContent();// ページコンテントの取得
                             PtlParamDrawImage paramDrawImage = new PtlParamDrawImage(); //画像の描画に使うパラメータクラス
                             PtlParamInput insertImage = new PtlParamInput(imageURI)) //画像指定に使うパラメータクラス
                        {
                            //入力画像ストリームの設定
                            paramDrawImage.setImageStream(insertImage);

                            // 画像出力
                            content.drawImage(outputRect, PtlContent.ALIGN.ALIGN_TOP_LEFT, paramDrawImage);
                        }
                    }
                }
            }


        ...【AppendPages.javaと同じ処理のため省略
             ・PtlParamOutputを用いてPtlPDFDocument docの内容を出力
             ・PtlException, Exception, Error を catchするエラー処理
             ・finally文で"--完了--"と表示する処理】...

    }

    public static PtlRect setOutputRect(BufferedReader br) throws IOException, PtlException, Exception, Error{
        float top, bottom, left, right;
        boolean isValueOkay = false;
        PtlRect outputRect = new PtlRect();
        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("left (mm) : ");
            left = Float.parseFloat(br.readLine());
            System.out.print("bottom (mm) : ");
            bottom = Float.parseFloat(br.readLine());
            System.out.print("right (mm) : ");
            right = Float.parseFloat(br.readLine());
            if(top < bottom) //不正矩形は再入力させる
            {
                System.out.println("topの値はbottomよりも大きい値を指定して再度入力してください。");
                continue;
            }
            if(right < left) //不正矩形は再入力させる
            {
                System.out.println("rightの値はleftよりも大きい値を指定して再度入力してください。");
                continue;
            }

            //矩形を正しく指定できた場合の処理
            isValueOkay = true;
            outputRect.setLeft(left);
            outputRect.setBottom(bottom);
            outputRect.setRight(right);
            outputRect.setTop(top);
        }                   
            return outputRect;
    }
}

プログラムファイル名

AddQRcodeOnAllPage.java

入出力操作の例

images/AddQRcodeOnAllPage.png

images/AddQRcodeOnAllPage-example.png

図2・10 PDF文書にQRコードを追加