Eu estava cegamente focado em ghostscript
, mas graças a Stephen, descobri que isso parece devido a um erro em qpdf
. Vou enviar um relatório claro por meio do GitHub.
Podemos fazer todo o trabalho com ghostscript
sozinho, já que a partir da versão 9.07 ele pode linearizar PDFs com um simples sinalizador adicional, conforme relatado também aqui .
Desejo concluir minha resposta não apenas fornecendo um método atualizado para converter um PDF no formato A-1b com ghostscript
, mas também informando como validá-lo localmente com java
e a ferramenta de comprovação do Apache PDFBox biblioteca.
Convertendo qualquer PDF para PDF / A-1b com o 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
Validando seu PDF / A-1b localmente com Java 8 e preflight do Apache PDFBox
Todas as informações nos comentários do código. Baixe o mais recente preflight-app
do site do Apache PDFBox .
No momento da redação, a versão mais recente é 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());
}
}
}