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

如何识别PDF文件是否包含表单字段

佟和安
2023-03-14
PdfReader reader = new PdfReader(bytes);
AcroFields fields = reader.getAcroFields()
boolean hasFormFields = 
   (fields != null && fields.getFields() != null && fields.getFields().size() > 0);
if (hasFormFields) {
   // Report Error to User - throw exception, etc.
}

当PDF包含表单字段元素时,我希望getFields().size()大于0。是否有其他使用Java和iText标识表单字段的方法?

共有1个答案

严峰
2023-03-14

您使用了正确的方法来识别(有效的)PDF文件是否包含表单字段。您描述的问题是如何处理不符合标准的PDF文件,这些文件也包含表单字段,但确实存在一些问题,例如缺少AcroField字典、缺少字段数组或其他问题。您有三种可能:

  1. 忽略这些情况,因为它们是边缘情况
  2. 确定问题(例如,使用Acrobat预飞行),并编写检查这些情况的方法。在下面的示例中,我编写了一个方法来标识缺少fields数组的文档。
  3. 只需将所有已上载的文档拉平。

下面的代码检查方法返回true但仍包含表单字段的文档。这些字段也将显示在*Dobe Reader中。

   public boolean containsFormFields2() {

        AcroFields acroFields = reader.getAcroFields();

        if (acroFields.getFields() == null || acroFields.getFields().size() == 0) {
            // recheck "manually"
            for (int i = 1; i <= super.reader.getNumberOfPages(); i++) {
                PdfDictionary page = super.reader.getPageN(i);
                PdfArray annots = page.getAsArray(PdfName.ANNOTS);

                if (annots != null) {
                    // check for form fields in general
                    for (int j = 0; j < annots.size(); j++) {
                        PdfDictionary po2 = (PdfDictionary) annots.getDirectObject(j);

                        // FT key only exists for form fields
                        PdfName type = (PdfName) po2.get(PdfName.FT);
                        if (type != null) {
                           return true;
                        }
                    }
                }
            }
         return false;
        }
        else{
         return true;
        }
   }
 类似资料:
  • 我有一个项目,关于从URL获取XML文件,将其删除,提取数据,然后进行处理。此外,我正在使用用户输入创建URL。但是我需要检查URL是否包含要刮取的XML文件。有什么办法吗?那么基本上如何检查URL是否包含XML文件呢?

  • 问题内容: 如何检查字符串中是否包含字符列表,例如“ ABCDEFGH”,如何检查字符串中是否有字符列表。 问题答案: 在Java中使用正则表达式检查在Java中使用 正则表达式 例如:

  • 问题内容: 我正在尝试查看文件是否包含发送到页面的字符串。我不确定这段代码有什么问题: 问题答案: 简单得多: 回应有关内存使用的评论:

  • 问题内容: 我在Java中使用PdfBox从PDF文件提取文本。提供的某些输入文件无效,这些文件上的PDFTextStripper暂停。有没有一种干净的方法来检查提供的文件是否确实是有效的PDF? 问题答案: 您可以找出文件(或字节数组)的mime类型,因此不必盲目地依赖扩展名。我是用光圈的MimeExtractor(http://aperture.sourceforge.net/)来完成的,或者

  • 问题内容: 这个问题的答案是 社区的努力。编辑现有答案以改善此职位。它目前不接受新的答案或互动。 考虑: 假设我有上面的代码,编写该语句的正确方法是什么? 问题答案: 您可以使用该函数来查找另一个字符串中另一个字符串的出现: 注意,of的使用是故意的(既不会也不返回期望的结果);返回大海捞针字符串中针线串起始处的偏移量,或者返回boolean值(如果找不到针)。由于0是有效的偏移量,而0是“假”,

  • 我想知道,我“正在寻找在我的片段中添加更新按钮,当用户单击时会检查更新是否可用。 我“正在寻找如何从url访问json文件并检查json值是否包含新值的解决方案。如果键与已经指定的值匹配,则显示消息您的数据已更新,如果不匹配,则显示无可用更新。 例如,如果下面是json文件 如果它包含除1之外的其他内容,则显示带有可用更新的toast消息。