【发布时间】:2013-01-05 10:29:42
【问题描述】:
如何使用 PDFBox “展平” PDF 表单(删除表单域但保留该域的文本)?
Same question was answered here:
执行此操作的快速方法是从 acrofrom 中删除字段。
为此,您只需要获取文档目录,然后获取 acroform 然后从此 acroform 中删除所有字段。
图形表示与注释链接并留在 文件。
所以我写了这段代码:
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDDocumentCatalog;
import org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm;
import org.apache.pdfbox.pdmodel.interactive.form.PDField;
public class PdfBoxTest {
public void test() throws Exception {
PDDocument pdDoc = PDDocument.load(new File("E:\\Form-Test.pdf"));
PDDocumentCatalog pdCatalog = pdDoc.getDocumentCatalog();
PDAcroForm acroForm = pdCatalog.getAcroForm();
if (acroForm == null) {
System.out.println("No form-field --> stop");
return;
}
@SuppressWarnings("unchecked")
List<PDField> fields = acroForm.getFields();
// set the text in the form-field <-- does work
for (PDField field : fields) {
if (field.getFullyQualifiedName().equals("formfield1")) {
field.setValue("Test-String");
}
}
// remove form-field but keep text ???
// acroForm.getFields().clear(); <-- does not work
// acroForm.setFields(null); <-- does not work
// acroForm.setFields(new ArrayList()); <-- does not work
// ???
pdDoc.save("E:\\Form-Test-Result.pdf");
pdDoc.close();
}
}
【问题讨论】:
-
代码的结果是什么?
-
@RachelGallen:结果是表单字段中带有“Test-String”的 PDF。但是表单域仍然存在并且可以编辑。
-
@Rachel:谢谢,但我必须自动完成,我用 PDFBox 搜索解决方案。但是我会仔细阅读文章,也许有一些有用的东西。
-
如果我将其作为答案发布,您会投票并接受吗?