Ghostscript 9.19を使用してすべてのPDFをPDF / A-1bに変換

Ghostscript 9.19を使用してすべてのPDFをPDF / A-1bに変換

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をWeb用に最適化された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おかげでこれが期限のようであることがわかり、qpdfGitHubを通じて明確な報告書を提出しました。

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以下から最新バージョンをダウンロードしてください。Apache 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());
        }
    }
}

おすすめ記事