PDFBox 数据格式校验

Apache PDFBox 库提供了PreflightParser类。使用这个类,我们可以验证 PDF 文档。该ApachePreflight库是一个Java工具,它实现了一个解析器符合了ISO-19005规范(又名PDF/A-1) 。

PDFBox 验证错误的类别

在 PDFBox 库中,如果验证失败,则验证结果的对象包含所有失败原因。为了理解的验证失败,所有的错误代码具有以下形式X [.Y [.Z]]

  • X -> 它是类别(如: 字体验证错误)
  • Y -> 它代表类别的一个子部分(如:“带有字形(符号)错误的字体”)
  • Z -> 它代表错误的原因(如: “缺少字形的字体”)

注意:根据识别错误详细信息的难度,类别 (' Y ') 和原因 (' Z ') 可能会丢失。

按照以下步骤在 PDF 文档中执行验证

PDFBox 加载现有文档

将fileName的路径作为字符串文件插入,如下代码所示。

String fileName= "Path of existing fileName";  

使用给定的 PDF 文件实例化解析器

实例化PreflightParser类并将现有的fileName作为其参数传递。

PreflightParser parser = new PreflightParser(fileName);  

调用 parse() 方法

parse()方法 被用于解析流和填充COSDocument对象。该COSDocument对象允许访问PDF文档的所有方面。

parser.parse();  

获取预检文件并验证。

try (PreflightDocument document = parser.getPreflightDocument()) {  
        document.validate();  
           ValidationResult result = document.getResult();  
        return Optional.of(result);  
          }  

PDFBox 数据格式校验 完整示例

package com.yiidian;

import org.apache.pdfbox.preflight.PreflightDocument;
import org.apache.pdfbox.preflight.ValidationResult;
import org.apache.pdfbox.preflight.parser.PreflightParser;

import java.io.IOException;
import java.util.Objects;
import java.util.Optional;

public class PdfValidatonPage {
    public static Optional<ValidationResult> getValidationResult(String fileName) {
        if (Objects.isNull(fileName)) {
            throw new NullPointerException ("fileName cannot be null.");
        }
        try {
            PreflightParser parser = new PreflightParser(fileName);

            parser.parse();

            try (PreflightDocument document = parser.getPreflightDocument()) {
                document.validate();
                ValidationResult result = document.getResult();
                return Optional.of(result);
            }

        } catch (IOException e) {
            return Optional.empty();
        }
    }

    public static boolean isValidPDF(String fileName) {
        Optional<ValidationResult> validationResult = getValidationResult(fileName);

        if (!validationResult.isPresent()) {
            return false;
        }

        ValidationResult result = validationResult.get();
        if (result.isValid()) {
            return true;
        }
        return false;
    }

    public static void main(String[] args) throws IOException {
        //Loading an existing file
        String fileName = "/eclipse-workspace/Merge.pdf";

        if (PDFTextStripperUtil.isValidPDF(fileName)) {
            System.out.println("The file " + fileName + " is a valid PDF/A-1b file");
        } else {
            System.out.println("The existing file is Not a valid PDF/A-1b.");

            Optional<ValidationResult> validationResult = PDFTextStripperUtil.getValidationResult(fileName);
            if (!validationResult.isPresent()) {
                return;
            }
            ValidationResult result = validationResult.get();
            for (ValidationResult.ValidationError error : result.getErrorsList()) {
                System.out.println(error.getErrorCode() + " : " + error.getDetails());
            }
        }
    }
}  

输出结果如下:

热门文章

优秀文章