给出一个PDF模板,其中包含插入不同信息的位置的符号, 我的任务是检测这些符号并用动态数据替换它们 从HTML表格收到。例如,模板可能如下所示:
|FNAME||SNAME|
|TELCAP||PHONE1|
|CELLCAP||MOBILE|
|EMAIL|
|WEB|
我必须用我通过表单收到的名字替换|FNEME|
。
有没有办法获得位置,例如| FNAME |,
使用iText
函数,以便知道在哪里插入名字?
此外,在获得位置后,有没有办法删除
|FNAME|
并将其替换为动态接收的名称
我的HTML格式?
答案 0 :(得分:1)
我不知道如何在带有iText的PDF中获取“字符串”的位置,但我知道如何使用iText获取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库可以做到这一点,但是我知道没有简单的方式来做它。