当前位置: 首页 > 知识库问答 >
问题:

在使用Pdfbox API写入Adobe reader后,PDF acroform字段在Adobe reader中变得不可编辑

邓德厚
2023-03-14

我正在阅读一个PDF文件,它有可编辑的字段,这些字段可以通过Adobe Reader打开它来编辑。我正在使用PDFBox API生成一个输出PDF,输入PDF中的可编辑字段填充了数据。可以使用Adobe Reader打开输出PDF,我可以看到字段值,但无法直接从Adobe Reader编辑这些字段。

这个问题还有一张JIRA票,根据本链接未解决:

每次打开使用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);

共有1个答案

厉成仁
2023-03-14

文档自创建以来已更改,扩展功能的使用不再可用....

这表明原始表单已启用阅读器,即使用Adobe持有的私钥对文档应用了集成的使用权限数字签名,该私钥告诉Adobe Reader,它将为查看该表单的用户提供一些额外功能。

如果您不想在使用PDFBox填写表单过程中破坏签名,则需要确保您

    null

如果您提供了您的表单填写代码和您的源PDF,可以对此进行更详细的分析。

 类似资料:
  • 我想让我的实体中的@Embedded字段“foo”在JPA 2.0中不可更新 如果我有另一个实体而不是@Em的可嵌入,我可以使用@列注释的updatable=false属性,但@Em天呐没有这样的属性 我发现了一个示例,即@Col的(updatable=false)注解直接用在了嵌入式数据库的字段上。 ..但是,如果我将 FooEmbedable 也用于另一个我希望它可以更新的表,会发生什么? 我

  • 最后一点:如果这似乎与SO上的其他问题重复,我道歉。如前所述,我已经看了他们,但无法得到我想要的理解。

  • 我是新的PDF框,需要填写的信息在PDF表单,其中有节和字段名: 填写信息的名称和框 地址和填写信息的框 城市框来填充信息。 目前没有错误上面的代码正在工作填写一些垃圾字段。 需要用方框信息填满姓名,方框信息填满姓名,方框信息填满地址,方框信息填满地址,方框信息填满地址

  • 问题内容: 首先,让我感谢SO社区过去提供了很多次帮助我;你们是一个了不起的资源! 在我的工作中,我在一个Web应用程序上工作,该应用程序使用在Scribus和iText Java库中创建的PDF模板,以来自数据库的数据填充这些模板。有时,用户提供的字段是必填字段,iText不会触及。下载.pdf时,将编辑一个字段,并使用Evince保存一个副本,重新打开后生成的文件将不会显示编辑后的文本。但是,

  • 我目前正在开发一个程序,在我的子类中,我需要一个无参数构造函数,用空字符串初始化对象。 我尝试过使用super,我有setter和getter方法,但我一直得到“field Person.name不可见”。我得到这个地址和电话号码以及。 如何使其可见,并且我可以在不提供构造函数参数的情况下初始化对象?如果我做错了什么并需要修复某些内容,请告诉我(: