top / index / prev / next / target / source

2009-12-09 diary: Java: iText を用いた フォーム PDF ファイルをもちいて PDF ファイルを作成するサンプル

いがぴょんの日記 日記形式でつづる いがぴょんコラム ウェブページです。

old-v2

Java: iText を用いた フォーム PDF ファイルをもちいて PDF ファイルを作成するサンプル

iText を使って、フォーム PDF ファイルをもちいて PDF ファイルを作成するサンプルです。このサンプルは、任意座標に文字や線を出力することを目的としています。

Java: iText を用いた フォーム PDF ファイルをもちいて PDF ファイルを作成するサンプル

iText を使って、フォーム PDF ファイルをもちいて PDF ファイルを作成するサンプルです。このサンプルは、任意座標に文字や線を出力することを目的としています。

確認に利用した動作環境。

import java.awt.Color; import java.io.BufferedOutputStream; import java.io.FileOutputStream; import java.io.OutputStream;

import com.lowagie.text.Document; import com.lowagie.text.pdf.BaseFont; import com.lowagie.text.pdf.PdfContentByte; import com.lowagie.text.pdf.PdfImportedPage; import com.lowagie.text.pdf.PdfReader; import com.lowagie.text.pdf.PdfWriter;

public class WritePdfWithFormSample { public static final int MARGIN_X = 20; public static final int MARGIN_Y = 20;

public static void main(final String[] args) throws Exception {
    // フォームとなる PDF ファイルの読み込み。
    final PdfReader form = new PdfReader("form.pdf");

    final BufferedOutputStream outStream = new BufferedOutputStream(
            new FileOutputStream("sample2.pdf"));

    try {
        new WritePdfWithFormSample().writePdf(form, outStream);

        outStream.flush();
    } finally {
        outStream.close();
        form.close();
    }
}

void writePdf(final PdfReader form, final OutputStream outStream)
        throws Exception {
    // 注意: 単一フォームのみに対応。
    final Document document = new Document(form.getPageSizeWithRotation(1));
    final PdfWriter writer = PdfWriter.getInstance(document, outStream);

    document.open();

    for (int page = 1; page <= 2; page++) {
        if (page != 1) {
            document.newPage();
        }

        applyForm(form, writer);

        writePage(writer);
    }

    document.close();

    writer.close();
}

void applyForm(final PdfReader form, final PdfWriter writer) {
    final PdfImportedPage importedPage = writer.getImportedPage(form, 1);

    final PdfContentByte cb = writer.getDirectContent();
    cb.saveState();
    cb.addTemplate(importedPage, 0, 0);
    cb.restoreState();
}

void writePage(final PdfWriter writer) throws Exception {
    final BaseFont bf = BaseFont.createFont(
            "c:\\windows\\fonts\\msgothic.ttc,1", BaseFont.IDENTITY_H,
            BaseFont.EMBEDDED);

    for (int x = 0; x < 10; x++) {
        for (int y = 0; y < 10; y++) {
            final PdfContentByte cb = writer.getDirectContent();
            cb.saveState();

            cb.setColorFill(Color.RED);
            cb.beginText();
            cb.moveText(MARGIN_X + x * 100, MARGIN_Y + y * 100);
            cb.setFontAndSize(bf, 10);
            cb.showText("" + x + ", " + y);
            cb.endText();

            cb.restoreState();
        }
    }

    for (int x = 0; x <= 10; x++) {
        final PdfContentByte cb = writer.getDirectContent();
        cb.saveState();

        cb.setColorStroke(Color.RED);
        cb.setLineDash(3, 3, 0);
        cb.moveTo(MARGIN_X + x * 100, MARGIN_Y + 0);
        cb.lineTo(MARGIN_X + x * 100, MARGIN_Y + 500);
        cb.stroke();

        cb.restoreState();
    }

    for (int y = 0; y <= 10; y++) {
        final PdfContentByte cb = writer.getDirectContent();
        cb.saveState();

        cb.setColorStroke(Color.RED);
        cb.setLineDash(3, 3, 0);
        cb.moveTo(MARGIN_X + 0, MARGIN_Y + y * 100);
        cb.lineTo(MARGIN_X + 800, MARGIN_Y + y * 100);
        cb.stroke();

        cb.restoreState();
    }
}

} ```

PDF の内容が新規 PDF のページにコピーされることを確認できました。

関連する日記


この日記について