Проверка Ghostscript + QPDF и PDF / A-1b: как добавить разделитель EOL перед конечными потоками

Предполагая, что ваши пути не содержат пробелов или новых строк:

find . -name \*.tar.\* -execdir sh -c "echo -n \"\${PWD} \"; ls -t *.tar.* | head -n 1" \; | sort -u -k1,1

найдет все tar-архивы, запустит данный фрагмент оболочки в каждом содержащем каталоге и отфильтрует результат, чтобы только один результат хранится для каждого каталога.

Чтобы просмотреть содержимое архивов, предполагая, что их имена файлов также не содержат пробелов или новых строк:

find . -name \*.tar.\* -execdir sh -c "echo -n \"\${PWD} \"; ls -t *.tar.* | head -n 1" \; | sort -u -k1,1 | tr ' ' / | xargs -n 1 tar tvf

заменит пробел, отделяющий путь от имени файла, на «/» и передаст результат в xargs , который будет запускать tar tvf для каждого файла.

Для запроса между каждым тарболом добавьте -p к команде xargs:

find . -name \*.tar.\* -execdir sh -c "echo -n \"\${PWD} \"; ls -t *.tar.* | head -n 1" \; | sort -u -k1,1 | tr ' ' / | xargs -p -n 1 tar tvf
1
10.08.2016, 20:45
1 ответ

Я был слепо сосредоточен на ghostscript , но благодаря Стивену я узнал, что это похоже на ошибку в qpdf . Я отправлю четкий отчет через GitHub.

Мы можем проделать всю работу только с ghostscript , поскольку с версии 9.07 он может линеаризовать PDF-файлы с помощью простого дополнительного флага, о чем также сообщается здесь .

Я хочу закончить свой ответ, не только предоставив актуальный метод преобразования PDF-файла в формат A-1b с помощью ghostscript , но и сообщив, как проверить его локально с помощью java и инструмент предварительной проверки из библиотеки Apache PDFBox.

Преобразование любого PDF в PDF / A-1b с помощью Ghostscript 9.19

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

Проверка вашего PDF / A-1b локально с помощью Java 8 и предварительной проверки Apache PDFBox

Вся информация в комментариях к коду. Загрузите последнюю версию предполетного приложения с сайта 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());
        }
    }
}
1
28.01.2020, 01:13

Теги

Похожие вопросы