19

Given a PDF of random origin, how do I, on Linux:

  • confirm whether it is in PDF/A format already?
  • if it is not in PDF/A format, convert it to PDF/A with a minimum loss of fidelity?

I am aware that the conversion may cause loss of exotic elements of the document, but let's assume that the ability to open the document at all in a relatively far future is more important than such spiffy features (which might not be available/readable at such a time anyway). I would rather be able to visually confirm the accuracy of the conversion when I can trivially view the documents side by side than risk not being able to open the original file.

0

5 Answers 5

12

Here is a bash script doing just that:

#!/bin/bash

pdf_input=$1
ps_output=${pdf_input%.*}.ps       # PDF to PS with pdftops
pdfa_output=${pdf_input%.*}_a.pdf  # PS to PDF/A, with gs -dPDFA

pdftops "${pdf_input}" "${ps_output}"

gs \
  -dPDFA \
  -dBATCH \
  -dNOPAUSE \
  -dNOOUTERSAVE \
  -sProcessColorModel=DeviceCMYK \
  -sDEVICE=pdfwrite \
  -sPDFACompatibilityPolicy=1 \
  -sOutputFile="${pdfa_output}" "${ps_output}"

Save it in a file called pdf2pdfa.sh that is in your $PATH (e.g., ~/.local/bin/), then call it like this:

pdf2pdfa.sh mypdf.pdf

It will create mypdf_a.pdf.

  1. The .pdf file, e.g., mypdf.pdf is converted into a .ps file using the command pdftops.  The result is, for example, mypdf.ps.

  2. The .ps file, e.g., mypdf.ps, is processed by the command gs into a PDF/A file; e.g., mypdf_a.pdf.

2
  • 2
    (1) Please explain what this does.  (2) What is input? I see pdf_input, but what is input?  (3) You should always quote shell variables unless you have a good reason not to, and you’re sure you know what you’re doing.  Please do not respond in comments; edit your answer to make it clearer and more complete. Commented Oct 15, 2018 at 2:48
  • Thx, works well. Did anyone got a similar notice? Use of -dUseCIEColor detected! Since the release of version 9.11 of Ghostscript we recommend you do not set -dUseCIEColor with the pdfwrite/ps2write device family.
    – b00r00x0
    Commented Jan 24, 2023 at 17:15
10

Identification

I found this tool which looks to be what you can use to identify PDF/A files. It's called DROID (Digital Record and Object Identification). It's Java based and can be run from a GUI or the command-line.

excerpt

DROID is a software tool developed by The National Archives to perform automated batch identification of file formats. Developed by its Digital Preservation Department as part of its broader digital preservation activities, DROID is designed to meet the fundamental requirement of any digital repository to be able to identify the precise format of all stored digital objects, and to link that identification to a central registry of technical information about that format and its dependencies.

Given it's sponsored by the National Archives I would assume it's the right tool for doing this, given the intended purpose of the PDF/A format. Also the project is open source and the code is available on Github as well as packaged in binary form from the National Archives website.

Validation & Conversion

If you're looking for a tool to perform validation & conversion I believe PDFBox can do this. PDFBox lists PDF/A validation right on the front page of their website. It's another Java application 8-).

excerpt from website

PDF/A Validation
Validate PDFs against the PDF/A ISO standard.

Under the command line tools section on the left of their main page the show the following usage for the tool:

$ java -jar pdfbox-app-x.y.z.jar org.apache.pdfbox.ConvertColorspace [OPTIONS] <inputfile> <outputfile>

veraPDF is another tool capable of validating PDF/A; it is part of the Open Preservation Foundation’s reference tool set. It’s also a Java application.

Conversion

For just doing conversion I found this method from a blog post titled: Free way to convert an existing PDF to PDF/A, that uses the following tools:

  • Ghostscript 8.64 Only.
  • PDFBox 0.7.3
  • pdfmarks ( file to supply additional meta data)
  • PDFA_def.ps
  • USWebCoatedSWOP.icc

With the above in place you use the following command:

$ gs -sDEVICE=pdfwrite -q -dNOPAUSE -dBATCH -dNOSAFER     \
-dPDFA -dUseCIEColor -sProcessColorModel=DeviceCMYK       \
-sOutputFile=Out_PDFA.pdf PDFA_def.ps pdfmarks IN_PDF.pdf

It isn't without it's warts. The article discusses one of them, fixing the print flags on hyperlinks being one of them. The article provides a Java application that you can use to fix these:

$ java FixPrintFlag Out_PDFA.pdf New_verifiablePDFA.pdf

It's not pretty but appears to be workable. See the article for more details.

save as PDF/A via cups

cups allow to "print to pdf file". The command used is in /etc/cups/cups.conf. There you will find a variable GSCall which have the arguments used to call the gs binary to create the pdf file. Add -dPDFA before the -dNOPAUSE parameter, and now all your 'print as pdf' files from all applications on linux will magically be PDF/A!

References

5
  • I'll have to give this a try - it looks awfully promising. With a little fiddling it might even be possible to integrate this into the CUPS-PDF printer; there are settings in /etc/cups/cups-pdf.conf that look promising for that purpose. Thanks for taking the time! Not really up to testing it right now but I'll get back to this (hopefully tomorrow).
    – user
    Commented Jun 15, 2013 at 20:34
  • @MichaelKjörling - thanks for the question. I'd never heard of the PDF/A format before and we have a need for this exact thing at work. So you helped me look like a genius for knowing about this stuff now 8-).
    – slm
    Commented Jun 15, 2013 at 21:27
  • What's pdfmarks?
    – Andrew
    Commented Apr 17, 2019 at 16:38
  • @AndrewMacFie - adobe.com/content/dam/acom/en/devnet/acrobat/pdfs/…
    – slm
    Commented Apr 17, 2019 at 16:41
  • @slm The link is now broken. There are a lot of related projects with that name. This could be a reference link?
    – Pablo A
    Commented Jul 12 at 14:05
3

For file identification, the command file is often helpful. It'll look your file for magic numbers, file identifiers, encoding information, etc. to give any helpful information it can.

In the particular case of PDF files, the utilitary pdfinfo is specially useful. In my case, a Gentoo distribution, it's packaged with poppler, a PDF rendering library.

1
  • 1
    pdfinfo -meta and looking at xmpmeta/RDF/Description/conformance seems to say whether the PDF is PDF/A (that node is A) or not (the node doesn't exist or has some other value). It's a start!
    – user
    Commented Jun 15, 2013 at 20:37
0

The OCRmyPDF tool can convert to PDF/A. In fact, that's part of its default behavior. But it also allows disabling the OCR step while retaining its image processing features and the PDF/A conversion:

ocrmypdf --tesseract-timeout=0 input.pdf output.pdf
0
  • We can directly know, whether a pdf is PDF/A by looking at the Properties of the .pdf file in Evince pdf-Viewer.

    For example,

enter image description here

  • A quite dirty (with very likely loss of format), but quick way to convert a PDF to PDF/A is to open the .pdf File in LibreOffice Draw and, subsequently, export it as PDF/A. See pictures:

    Export as PDF enter image description here

    Select as PDF/A enter image description here

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .