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());
}
}
}
}
输出结果如下:
热门文章
优秀文章