我正在阅读包含可编辑字段的PDF,并且可以通过Adobe Reader打开字段来编辑字段。我正在使用PDFBox API生成输出PDF,其中包含输入PDF中可编辑字段的数据。输出PDF可以使用Adobe Reader打开,我可以看到字段值,但我无法直接从Adobe阅读器编辑这些字段。
此问题还有一张JIRA票据,根据此链接尚未解决:
https://issues.apache.org/jira/browse/PDFBOX-1121
有人可以告诉我这是否得到解决?另外,如果可能,请回答与我的问题相关的以下问题:
为了编辑Adobe Reader的输出PDF,是否需要明确设置保护策略或访问权限?
每次打开使用pdfbox API编写的PDF时,都会收到此消息提示:
"该文档自创建以来已更改,并且不再使用扩展功能...."
我使用的是PdfBox 1.8.6 jar和Adobe Reader 11.0.8。如果有人能帮我解决这个问题,我将非常感激。
添加了代码段以帮助响应者进行调试:
String outputFileNameWithPath = "C:\myfolder\testop.pdf";
PDDocument pdf = null;
pdf = PDDocument.load( outputFileNameWithPath );
PDDocumentCatal og docCatalog = pdf.getDocumentCatalog();
PDAcroForm acroForm = docCatalog.getAcroForm();
//The map pdfValues is a collection of the data that I need to set in the PDF
//I am unable to go into the details of my data soutce
// The key in the data map corresponds to the PDField's expanded name and data
// corresponds to the data that I am trying to set.
Iterator<Entry<String, String>> iter=pdfValues.entrySet().iterator();
String name=null;
String value=null;
PDField field=null;
//Iterate over all data and see if the PDF has a matching field.
while(iter.hasNext()) {
Map.Entry<String, String> currentEntry=iter.next();
name=currentEntry.getKey();
value=currentEntry.getValue();
if(name!=null) {
name=CommonUtils.fromSchemaNameToPdfName(name);
field=acroForm.getField(name);
}
if( field != null && value!=null )
{
field.setValue( value ); //setting the values once field is found.
}
}
// Set access permissions / encryption here before saving
pdf.save(outputFileNameWithPath);
感谢。
答案 0 :(得分:0)
文档自创建以来已更改,并且不再使用扩展功能....
这表示原始表单已经 Reader-enabled ,即使用Adobe持有的私钥将一个集成的使用权数字签名应用于文档,该私钥告诉Adobe Reader它应该为查看该表单的用户提供一些额外的功能。
如果您不希望在使用PDFBox填写表单期间破坏该签名,则需要确保
如果您提供了表单填写代码和源PDF,则可以对此进行更详细的分析。