我试着用pdfbox填充pdf表单,我成功地用面向肖像的文档完成了这项工作。但我在横向模式下填充文档时遇到问题。字段已填充,但文本方向不好。它在垂直方向上看起来就像它仍然在肖像中,但旋转了90度。
以下是我的简化代码:
PDDocument pdfDoc = PDDocument.load(MY_FILE);
PDDocumentCatalog docCatalog = pdfDoc.getDocumentCatalog();
PDAcroForm acroForm = docCatalog.getAcroForm();
acroForm.getField("aAddressLine1").setValue("ADDRESS1_HERE");
acroForm.getField("aAddressLine2").setValue("ADDRESS1_HERE");
acroForm.getField("country").setValue("COUNTRY_HERE");
pdfDoc.save(PATH_HERE);
pdfDoc.close();
您是否设法以横向模式填充pdf文档?
谢谢你的帮助。
1条答案
按热度按时间hvvq6cgz1#
简短的回答
恐怕pdfbox(从1.8.2版开始)还不允许您像您提供的那样填写横向PDF,因为它似乎没有查询和考虑表单字段所在页面的信息。
长话短说
您可以使用不同的方式定义要创建的页面:
您可以通过媒体盒定义直接将其定义为a4横向尺寸:
在这种情况下
aAddressLine1
会是或者您可以将其定义为a4纵向尺寸并旋转90°(或270°):
在这种情况下
aAddressLine1
是您的示例文档使用后一种方法。
现在,在为该字段创建外观流时,pdfbox只查看定义该字段的矩形,而忽略页面的属性。因此,pdfbox会看到一个非常窄且非常高的文本字段,并像这样填充它。它完全不知道结果将在pdf查看器中旋转。
它应该做的是查看字段所在的页面。如果该页面具有/rotate条目,则应为显示反向旋转文本的字段创建外观流。
选择
你在评论中也问
如果pdfbox不能满足我的要求,你知道我可以使用另一个库吗?
我已经用itext 5.4.2测试了这一壮举:
(免费itext版本根据agpl获得许可;你必须决定这是否适合你的项目。如果不合适,还有商业许可证。)
我相信其他pdf库也可以做到这一点,毕竟它不是一个很奇特的功能。。。
但我也测试了pdf小丑0.1.3( Backbone.js 版本),它也不起作用: