PDF를 통과할 수 있는 PDF/A-1b로 변환하기 위한 최첨단 방법을 정의하려고 합니다.3-하이랜드확인하다. 나는 Ghostscript를 사용하여 이 스크립트를 생각해 냈습니다.qpdf:
#! /bin/bash
# transforms input PDF into an optimized PDF/A-1b
# usage: $0 input.pdf output.pdf
gs -sDEVICE=pdfwrite -dBATCH -dNOPAUSE -dSAFER -sColorConversionStrategy=UseDeviceIndependentColor -dEmbedAllFonts=true -dPrinted=true -dPDFA -sProcessColorModel=DeviceRGB -dPDFACompatibilityPolicy=1 -dDetectDuplicateImages -r150 -sOutputFile=$2 $1
qpdf --linearize $2 $2.optimized
mv $2.optimized $2
모든 PDF를 웹에 최적화된 PDF/A-1b로 변환합니다.
Ghostscript가 터미널 스트림 앞에 누락된 EOL을 추가하지 않는 것 같아 처리된 문서가 유효성 검사를 통과할 수 없다는 점을 제외하면 모든 것이 괜찮습니다. 제가 받은 확인 결과는 다음과 같습니다.
Validating file "document.pdf" for conformance level pdfa-1b
The separator before 'endstream' must be an EOL. (5)
The document does not conform to the requested standard.
The file format (header, trailer, objects, xref, streams) is corrupted.
Done.
이러한 EOL 구분 기호를 추가할 수 있는 방법이나 도구를 알고 있습니까?
PDF를 PDF/A-1b로 변환하기 위한 유효한 최신 대체 제안도 환영합니다.
답변1
맹목적으로 따라하고 있었는데 ghostscript
Stephen 덕분에 이것이 기한인 것 같다는 것을 알게 되었고 qpdf
GitHub를 통해 명확한 보고서를 제출하게 되었습니다.
ghostscript
보고된 대로 버전 9.07부터 간단한 추가 플래그를 사용하여 PDF를 선형화할 수 있기 때문에 이 모든 것을 혼자서 수행할 수 있습니다.여기.
PDF를 A-1b 형식으로 변환하는 최신 방법을 제공할 뿐만 아니라 Apache PDFBox 라이브러리의 프리플라이트 도구를 사용하여 로컬에서 유효성 검사를 수행하는 ghostscript
방법을 보고하여 답변을 완성하고 싶습니다.java
Ghostscript 9.19를 사용하여 모든 PDF를 PDF/A-1b로 변환
gs -sDEVICE=pdfwrite -dBATCH -dNOPAUSE -dSAFER -sColorConversionStrategy=UseDeviceIndependentColor -dEmbedAllFonts=true -dPrinted=true -dPDFA -sProcessColorModel=DeviceRGB -dPDFACompatibilityPolicy=1 -dDetectDuplicateImages -r150 -dFastWebView=true -sOutputFile=output.pdf input.pdf
Java 8 및 Apache PDFBox 프리플라이트를 사용하여 로컬에서 PDF/A-1b 유효성을 검사합니다.
모든 정보는 코드 주석에 있습니다. preflight-app
다음에서 최신 버전을 다운로드하세요.아파치 PDFBox 사이트.
이 글을 쓰는 시점의 최신 버전은 2.0.2이다.
/**
* Source:
* https://pdfbox.apache.org/1.8/cookbook/pdfavalidation.html
*
* Compilation:
* $ javac -cp preflight-app.2.0.2.jar:. Validator.java
*
* Usage:
* $ java -cp preflight-app.2.0.2.jar:. Validator input.pdf
*/
import org.apache.pdfbox.preflight.ValidationResult;
import org.apache.pdfbox.preflight.parser.PreflightParser;
import org.apache.pdfbox.preflight.PreflightDocument;
import org.apache.pdfbox.preflight.exception.SyntaxValidationException;
import org.apache.pdfbox.preflight.ValidationResult.ValidationError;
public class Validator {
public static void main( String[] args ) throws Exception {
ValidationResult result = null;
PreflightParser parser = new PreflightParser(args[0]);
try {
parser.parse();
PreflightDocument document = parser.getPreflightDocument();
document.validate();
result = document.getResult();
document.close();
} catch (SyntaxValidationException e) {
result = e.getResult();
}
if( result.isValid() )
System.out.println("The file " + args[0] + " is a valid PDF/A-1b file");
else {
System.out.println("The file " + args[0] + " is not valid, error(s) :");
for( ValidationError error : result.getErrorsList() )
System.out.println(error.getErrorCode() + " : " + error.getDetails());
}
}
}