给定一个PDF模板,其中包含插入不同信息的注释,我的任务是检测这些符号,并用动态数据替换它们从html表单接收。例如,模板可以如下所示:
|FNAME||SNAME|
|TELCAP||PHONE1|
|CELLCAP||MOBILE|
|EMAIL|
|WEB|
我必须用我通过表格收到的名称替换CCD_ 1
有没有一种方法可以得到的位置,例如|FNAME|,使用
iText
函数,所以我知道在哪里插入名字?此外,在得到职位后,有没有办法删除
|FNAME|
并将其替换为从我的html表单?
我不知道用iText获取PDF中"字符串"的位置,但我知道用iTxt获取PDF中表单字段的位置。如果你不知道这个术语,表单是一个PDF文档,其中包含已命名的字段,如果表单是在可能的环境中呈现的,则最终用户可能会填写这些字段。
创建一个PdfWriter和PdfReader,获得表单模板,然后创建iText所称的"AcroFields"的集合:
Document document = new Document(PageSize.LETTER, 18, 18, 18, 18);
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(<<fileoutputpath>>);
DirectContent content = write.getDirectContent();
PdfReader reader = new PdfReader("<pdf form file specification>");
PdfImportedPage template = writer.getImportedPage(reader, 1); // gets first page
AcroFields acroFields = reader.getAcroFields();
表单的创建者将为每个可填充字段提供一个字段名称;你可以得到名称为的字段所覆盖的矩形的位置和大小
float[] positions = acroFields.getFieldPositions("<fieldName>");
然后将您的值写入该位置,以代替字段名称:
ColumnText columnText = new ColumnText(contentByte);
columnText.setSimpleColumn(new Phrase(value, fontToUse), pos1, pos2, pos3, pos4, Element.ALIGN_LEFT, false);
columnText.go(false);
我知道这很复杂,不幸的是仍然不完整,但在我/我们知道使用表格是你的一种选择之前,我不愿意完全解释它。iText库可以做到这一点,但据我所知,没有简单的方法。