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

时间:2012-01-05 12:40:25

标签: java itext

给出一个PDF模板,其中包含插入不同信息的位置的符号, 我的任务是检测这些符号并用动态数据替换它们 从HTML表格收到。例如,模板可能如下所示:

|FNAME||SNAME|

|TELCAP||PHONE1|
|CELLCAP||MOBILE|
|EMAIL|
|WEB|

我必须用我通过表单收到的名字替换|FNEME|

  1. 有没有办法获得位置,例如| FNAME |, 使用iText 函数,以便知道在哪里插入名字?

  2. 此外,在获得位置后,有没有办法删除 |FNAME|并将其替换为动态接收的名称 我的HTML格式?

1 个答案:

答案 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库可以做到这一点,但是我知道没有简单的方式来做它。