使用iText获取pdf文件中字符串的位置(xy坐标)



给定一个PDF模板,其中包含插入不同信息的注释,我的任务是检测这些符号,并用动态数据替换它们从html表单接收。例如,模板可以如下所示:

|FNAME||SNAME|
|TELCAP||PHONE1|
|CELLCAP||MOBILE|
|EMAIL|
|WEB|

我必须用我通过表格收到的名称替换CCD_ 1

  1. 有没有一种方法可以得到的位置,例如|FNAME|,使用iText函数,所以我知道在哪里插入名字?

  2. 此外,在得到职位后,有没有办法删除|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库可以做到这一点,但据我所知,没有简单的方法。

最新更新