« iTextでPDFフォームにへの値のセット | Main | iTextでPDFフォームにへの値のセット(3) »

2008.02.25

iTextでPDFフォームにへの値のセット(2)

 フォーム付きのPDFに値をセットしながらマージしてみる。参考にしたのはiTextに同梱されているcom.lowagie.tools.concat_pdfクラス。

■複数のファイルをマージ
 ⇒複数のInputStreamの内容をマージ
 ⇒複数のByteArrayInputStreamの内容をマージ
 ⇒PdfStamperの出力先をByteArrayOutputStream
って方向性で。

 単純にPDFをマージするだけなら、PdfCopyを使うことでOKですが、それっぽいメソッド PdfCopy#copyAcroForm(PdfReader) を使った場合、フォーム情報をどんどん上書きしていくため、最初の方の内容が飛んでしまうようです。

 どうも、こういう場合は、PdfCopyFieldsを使えばいいようです。

こんな感じ。

ByteArrayOutputStream pdf1 = new ByteArrayOutputStream();
{
  PdfReader pdf = new PdfReader("hoge.pdf");
  PdfStamper stamper = new PdfStamper(pdf, pdf1);
  AcroFields fields = stamper.getAcroFields();
  fields.setField("Text1", "Hogeほげ");
  stamper.close();
}
ByteArrayOutputStream pdf2 = new ByteArrayOutputStream();
{
  PdfReader pdf = new PdfReader("hoge.pdf");
  PdfStamper stamper = new PdfStamper(pdf, pdf2);
  AcroFields fields = stamper.getAcroFields();
  fields.setField("Text1", "ほげhoge");
  stamper.close();
}
int f = 0;
String outFile = "hoge_merge.pdf";
byte[][] indata = new byte[][] { pdf1.toByteArray(), pdf2.toByteArray() };
PdfCopyFields writer = null;
while (f < indata.length) {
  PdfReader reader = new PdfReader(new ByteArrayInputStream(indata[f]));
  if (f == 0) {
    writer = new PdfCopyFields(new FileOutputStream(outFile));
    writer.open();
  }
  writer.addDocument(reader);
  f++;
}
writer.close();

|

« iTextでPDFフォームにへの値のセット | Main | iTextでPDFフォームにへの値のセット(3) »

Java」カテゴリの記事

Comments

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack


Listed below are links to weblogs that reference iTextでPDFフォームにへの値のセット(2):

« iTextでPDFフォームにへの値のセット | Main | iTextでPDFフォームにへの値のセット(3) »