【发布时间】:2018-06-02 01:47:10
【问题描述】:
我有一个包含表单域的现有 pdf 文件,可由用户填写。此表单字段具有在创建 pdf 文件时定义的字体和文本对齐方式。
我使用 Apache PDFBox 在 pdf 中查找表单域:
PDDocument document = PDDocument.load(pdfFile);
PDAcroForm form = document.getDocumentCatalog().getAcroForm();
PDTextField textField = (PDTextField)form.getField("anyFieldName");
if (textField == null) {
textField = (PDTextField)form.getField("fieldsContainer.anyFieldName");
}
List<PDAnnotationWidget> widgets = textField.getWidgets();
PDAnnotationWidget annotation = null;
if (widgets != null && !widgets.isEmpty()) {
annotation = widgets.get(0);
/* font and alignment needed here */
}
如果我用
设置表单域的内容textField.setValue("This is the text");
那么表单域中的文本具有与该域预定义的相同的字体和对齐方式。
但我需要第二个字段的对齐方式和字体(顺便说一句,这不是表单字段)。
如何找出为该表单域定义的对齐方式(左、中、右)和字体(我需要PDType1Font 及其大小)?某事。像 font = annotation.getFont() 和 alignment = annotation.getAlignment() 两者都不存在。
如何获取字体和对齐方式?
- 17:编辑
我需要的字体是这样的:
PDPageContentStream content = new PDPageContentStream(document, page, AppendMode.APPEND, false);
content.setFont(font, size); /* Here I need font and size from the text field above */
content.beginText();
content.showText("My very nice text");
content.endText();
我需要setFont() 调用的字体。
【问题讨论】:
-
重新对齐,见stackoverflow.com/questions/47767319/…或调用getQ()..
-
re 字体,最简单的方法是调用
getDefaultAppearance()并调用新字段的设置器。 -
getQ()工作,谢谢。我的问题的对齐部分现在已经解决了。但是对于字体我仍然需要一个解决方案。在这里复制外观是不可能的,因为我会覆盖目标字段的其他属性。 -
我不建议复制外观,只复制字段的默认外观。例如,如果是“/Helv 0 Tf 0 g”,那么字体部分就是“/Helv 0 Tf”(“0 g”是颜色)。字体要么已经存在于 /AcroForm/DR 部分(acroform 默认资源)中,要么您必须将其添加到您的字段的外观 stream 的资源中(更棘手 - 询问是否需要, 如果可能,请附上 PDF)。
-
谢谢,但我还是不知道怎么设置字体。我使用
PDPageContentStream。在我的问题中,我添加了一个我想使用字体的示例。
标签: java pdf pdf-generation pdfbox