top / index / prev / next / target / source
日記形式でつづる いがぴょんコラム ウェブページです。
iText を使って、フォーム PDF ファイルをもちいて PDF ファイルを作成するサンプルです。このサンプルは、任意座標に文字や線を出力することを目的としています。
iText を使って、フォーム PDF ファイルをもちいて PDF ファイルを作成するサンプルです。このサンプルは、任意座標に文字や線を出力することを目的としています。
確認に利用した動作環境。
Sun Java2 SDK 1.6.0_17 (Windows版)
iTexthttp://sourceforge.net/projects/itext/ http://itextpdf.com/
iText-2.1.7.jar WritePdfWithFormSample
``` //*
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 のページにコピーされることを確認できました。
関連する日記