我有一个要求将图像嵌入PDF的要求。 PDF大小和图像大小是相同的(我到目前为止一直在努力)。困难的部分是最终用户需要在图像的某些区域上方输入一些文本,这些区域将是预定义的,但是那些位置的文本不是。我知道可以使用像iText这样的工具创建可填写的字段。我已经搜索了如何使用iText来完成设置可填充字段和将任何类型的文本定位到绝对位置的日子,但令人沮丧的是没有取得进展。所以我真的可以在这个问题上使用某人的专业知识。 感谢
答案 0 :(得分:1)
你的问题并不完全清楚,如果你做出不同的假设,答案会有所不同。
假设1:假设您的PDF包含填满整个页面的图像。您现在想要在事先知道的位置添加文本字段。
在这种情况下,您将使用PdfStamper
和addAnnotation()
方法,就像在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网站上定义和添加文本字段的示例:MultiLineField,TextFields,GenericFields,CreateFormInTable等等。
您还可以在问题How to add a hidden text field?中找到一个很好的例子。问题中的示例显示了如何添加可见文本字段;答案显示了如何隐藏它。
在此示例中,TextField
和x
是左下角的坐标,而y
和w
是字段的宽度和高度:
h
这是一个iTextSharp示例(用C#编写),但将它移植到Java非常容易。
最后:也许你已经知道了这一切。也许你只是想知道所有这些坐标是什么。这个问题的答案也可以在iText官方网站上找到:
我的答案中的几乎所有链接都是针对StackOverflow上之前的问题而编写的示例和答案。请不要说像我已经搜索过如何使用iText完成设置可填写字段和将任何类型的文本定位到绝对位置的事情,因为很难相信那些知道这一点的人所有答案都可以在official iText web site找到。你的老板可能想知道那些日子你在搜索哪些网站。