可以使用iText或其他API将PDF中的可填充字段定位到坐标?

时间:2016-02-28 04:08:20

标签: java pdf itext pdfbox

我有一个要求将图像嵌入PDF的要求。 PDF大小和图像大小是相同的(我到目前为止一直在努力)。困难的部分是最终用户需要在图像的某些区域上方输入一些文本,这些区域将是预定义的,但是那些位置的文本不是。我知道可以使用像iText这样的工具创建可填写的字段。我已经搜索了如何使用iText来完成设置可填充字段和将任何类型的文本定位到绝对位置的日子,但令人沮丧的是没有取得进展。所以我真的可以在这个问题上使用某人的专业知识。 感谢

1 个答案:

答案 0 :(得分:1)

你的问题并不完全清楚,如果你做出不同的假设,答案会有所不同。

假设1:假设您的PDF包含填满整个页面的图像。您现在想要在事先知道的位置添加文本字段。

在这种情况下,您将使用PdfStamperaddAnnotation()方法,就像在StackOverflow问题How can I add a new AcroForm field to a PDF?

的答案中所做的那样
PdfReader reader = new PdfReader(src);
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
// create a field for which you define the coordinates using a Rectangle
stamper.addAnnotation(field, 1);
stamper.close();

我们在此处使用field方法将addAnnotation()添加到第1页。

现在提出问题:如何创建field对象。这很简单。例如,参见ReadOnlyField示例:

Rectangle rect = new Rectangle(36, 720, 144, 806);
TextField tf = new TextField(stamper.getWriter(), rect, "text");
tf.setOptions(TextField.MULTILINE);
PdfFormField field = tf.getTextField();

请注意,我使用左下角(36, 720)和右上角(144, 806)的坐标来创建Rectangle对象。我使用TextField的{​​{1}}实例stamper创建PdWriter,我将该字段命名为rect。假设您希望包装输入的文本,我将文本字段设为text字段。然后,我从MULTILINE对象获取PdfFormField实例。

假设2:您正在从头开始创建PDF文档,在该文档中您可以创建一个页面,您可以使用相同大小的页面添加图像。现在您只想添加表单字段以添加文本。有很多关于如何在官方iText网站上定义和添加文本字段的示例:MultiLineFieldTextFieldsGenericFieldsCreateFormInTable等等。

您还可以在问题How to add a hidden text field?中找到一个很好的例子。问题中的示例显示了如何添加可见文本字段;答案显示了如何隐藏它。

在此示例中,TextFieldx是左下角的坐标,而yw是字段的宽度和高度:

h

这是一个iTextSharp示例(用C#编写),但将它移植到Java非常容易。

最后:也许你已经知道了这一切。也许你只是想知道所有这些坐标是什么。这个问题的答案也可以在iText官方网站上找到:

我的答案中的几乎所有链接都是针对StackOverflow上之前的问题而编写的示例和答案。请不要说像我已经搜索过如何使用iText完成设置可填写字段和将任何类型的文本定位到绝对位置的事情,因为很难相信那些知道这一点的人所有答案都可以在official iText web site找到。你的老板可能想知道那些日子你在搜索哪些网站。