本文概述
Apache PDFBox库提供了PreflightParser类。使用此类, 我们可以验证PDF文档。 ApachePreflight库是一个Java工具, 可实现符合ISO-19005规范(又名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<ValidationResult> 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) {
Optional<ValidationResult>validationResult = 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.");
Optional<ValidationResult>validationResult = PDFTextStripperUtil.getValidationResult(fileName);
if (!validationResult.isPresent()) {
return;
}
ValidationResult result = validationResult.get();
for (ValidationError error : result.getErrorsList()) {
System.out.println(error.getErrorCode() + " : " + error.getDetails());
}
}
}
}
输出
成功执行以上程序后, 以下输出消息将显示如下。
评论前必须登录!
注册