« 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

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/3959/40242041

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

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