📜  PDFBox验证

📅  最后修改于: 2021-01-07 07:49:31             🧑  作者: Mango

PDFBox验证

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

验证错误的类别

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

  • X- >这是类别(示例-字体验证错误)
  • Y- >它代表类别的子节(示例-“带有字形(符号)错误的字体”)
  • Z- >它表示错误的原因(示例-“缺少字形的字体”)

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

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

加载现有文档

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);
          }

例-

import java.io.IOException;
import java.util.Objects;
import java.util.Optional;
import org.apache.pdfbox.preflight.PreflightDocument;
import org.apache.pdfbox.preflight.ValidationResult;
import org.apache.pdfbox.preflight.ValidationResult.ValidationError;
import org.apache.pdfbox.preflight.parser.PreflightParser;

public class PdfValidatonPage {    
    public static Optional getValidationResult(String fileName) {
        if (Objects.isNull(fileName)) {
        thrownew 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();
         }
        }
        publicstaticboolean isValidPDF(String fileName) {
         OptionalvalidationResult = getValidationResult(fileName);

        if (!validationResult.isPresent()) {
        returnfalse;
         }

         ValidationResult result = validationResult.get();
        if (result.isValid()) {
        returntrue;
         }
        returnfalse;
        }    
        publicstaticvoid 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.");
            
OptionalvalidationResult = PDFTextStripperUtil.getValidationResult(fileName);
            if (!validationResult.isPresent()) {
            return;
               }
               ValidationResult result = validationResult.get();
            for (ValidationError error : result.getErrorsList()) {
    System.out.println(error.getErrorCode() + " : " + error.getDetails());
               }
            }
    }
}

输出:

成功执行以上程序后,以下输出消息将显示如下。