Is there a way to use ghostscript to convert PDF to PDF/A or PDF/X? I know it can be used to convert PDF to images, but I don't know if it can be used to convert PDF/A. What parameters should I use?
To convert a non-PDF/A file into into a PDF/A file using Ghostscript, run:
gs -dPDFA -dBATCH -dNOPAUSE -dUseCIEColor -sProcessColorModel=DeviceCMYK -sDEVICE=pdfwrite -dPDFACompatibilityPolicy=1 -sOutputFile=output_filename.pdf input_filename.pdf
-dPDFACompatibilityPolicy=1
according to this: #57168284 –
Tough -dUseCIEColor
. gs
recommends removing it since the release of version 9.11. –
Scaramouch veraPDF
(PDF/A Conformance Checker). The output find 3 validation errors: 1) DeviceRGB may be used only if the file has a PDF/A-1 OutputIntent that uses an RGB colour space
. 2) An annotation dictionary shall not contain the C array or the IC array unless the colour space of the DestOutputProfile in the PDF/A-1 OutputIntent dictionary, defined in 6.2.2, is RGB
and 3) DeviceCMYK may be used only if the file has a PDF/A-1 OutputIntent that uses a CMYK colour space
. –
Scaramouch Hope this answer helps others coming from Google with the same problem:
To convert from PDF to PDFA-1b or PDFA-2b, you can use Ghostscript. I suggest you use the latest version (9.19 today).
Install it
brew install ghostscript
(UPDATE: 2023-01-23. This no longer works in mac with homebrew, as versions newer than 9.19 will adamantly refuse to do the conversion, no matter what I've tried)
In Linux, some distros bring a much older version (rhel7 sports 9.07). To download a fully independent modern one-file-only ghostscript, download it directly from the site:
wget https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs919/ghostscript-9.19-linux-x86_64.tgz
(UPDATE: 2023-01-23: stick to that version, newer versions won't work with the method presented below.
If the link above is broken when you try it 20 years from now, please refer to ghostscript.com and search for download section. Download the binary version, don't go for the source, unless you know what you are doing.
In Windows, I cannot help you, but if you manage to install it, the following commands will also work, if you substitute the location of files and gs executable.
Command line
(note to future editors, please don't remove formatting, as this is more readable, yet working command line)
gs-919-linux_x86_64 \
-dPDFA=1
-dNOOUTERSAVE \
-sProcessColorModel=DeviceRGB \
-sDEVICE=pdfwrite \
-dPDFACompatibilityPolicy=1 \
-o output_file.pdf \
/path/to/PDFA_def.ps \
input_file.pdf
In Mac gs-919-linux_x86_64
will be simply gs
.
Please note that output_file.pdf
and input_file.pdf
must be changed to the names of the output file (the converted file) and the input file (the file to be converted). /path/to/PDFA_def.ps
is your copy of the file PDFA_def.ps
.
-dPDFA=1
is for PDFA-1b.
-dPDFA=2
if you want PDFA-2b.
What is PDFA_def.ps
?
PDFA_def.ps
is some sort of template ghostscript uses to create a PDFA file. The tricky part is that, for some reason, ghostcript comes with a non-working file.
You'll need to edit PDFA_def.ps
and include the path to a valid ICC (color profile) file. Download a good color profile from Adobe:
wget https://tutankhamon.acc.umu.se/mirror/archive/ftp.sunet.se/pub/vendor/adobe/adobe/iccprofiles/win/AdobeICCProfilesWin_end-user.zip
Inside that zip, find a file called AdobeRGB1998.icc
, put it somewhere and put the path to that file INSIDE you PDFA_def.ps file. Note that the path should be absolute, with no quotes. Like:
/ICCProfile (/full/path/to/file/AdobeRG1998.icc) % Customize.
Here is a version of PDFA_def.ps, change PATH_TO_YOUR_ICC_FILE
to the path of you AdobeRGB1998.icc.
Please note that current answers are not completely correct. You can define which level of PDF/A you want, resulting in different behaviors of the program. This one is correct:
gs -dPDFA -dBATCH -dNOPAUSE -sColorConversionStrategy=UseDeviceIndependentColor -sDEVICE=pdfwrite -dPDFACompatibilityPolicy=2 -sOutputFile=output_filename.pdf input_filename.pdf
Note the changes:
- From
-sPDFACompatibilityPolicy
(incorrect, string) to-dPDFACompatibilityPolicy
(correct, numerical digit). Change it to a higher number to get other versions.-dPDFACompatibilityPolicy=1
is good if you don't need DOCINFO. - Furthermore, we use the option
-UseDeviceIndependentColor
to avoid validating issues.
If you use options other than what is stated above, you will most likely get a non compliant PDF/A (even if it is stated differently).
To verify PDF/A compliance, use one of:
- https://www.pdf-online.com/osa/validate.aspx
verapdf output_filename.pdf
DeviceGray colour space is used without output intent profile
–
Sclerodermatous @danio, @imgen: Even recently released documentation pages on PDF/X (standardized Prepress requirements) and PDF/A (standardized Archiving requirments) generation were quite misleading. (Your link pointed to a v8.63 release.) In the end, it suggested that running the example commandlines using the sample PDF*_def.ps
would already generated valid PDF/A and PDF/X files.
But, they do not!
Here is one of the sample commands, which by itself is correct:
gs \
-dPDFA \
-dBATCH \
-dNOPAUSE \
-dNOOUTERSAVE \
-dUseCIEColor \
-sDEVICE=pdfwrite \
-sOutputFile=out-a.pdf \
PDFA_def.ps \
input.ps
The output file will declare itself to be PDF/A (and most PDF viewers would happily go along with this), but the output file fails all real compliance tests.
The fix is easy: you need to edit your sample PDFA_def.ps
(for PDF/X: your PDFX_def.ps
) files to match your environments. These required edits were not clearly spelled out in older documentation versions, and the provided command suggested it would work out of the box.
Especially in case of PDF/X you MUST specifiy a valid ICC profile to use.
See also the updated documentation (current SVN trunk version) about this:
Error: /invalidfileaccess in --file-- Operand stack: --nostringval-- --nostringval-- (srgb.icc) (r)
see full output here: pastebin.com/wpGyGXkU –
Scaramouch $ cp /usr/share/color/icc/ghostscript/srgb.icc .
and it did not work. –
Scaramouch If you're using Windows and want to create PDF/A-1b documents explicitely (PDFCreator has an output option for PDF/A-2b but not for PDF/A-1b), you just can enter the parameters Artur described above into the ui settings of PDFCreator without the ones for the document names. Start PDFCreator, choose the printer menu, then go to settings. Now, choose 'Ghostscript'
from the settings list on the left side. Under 'additional ghostscript settings'
, enter as follows :
-dPDFA|-dBATCH|-dNOPAUSE|-dUseCIEColor|-sProcessColorModel=DeviceCMYK|-sDEVICE=pdfwrite|-sPDFACompatibilityPolicy=1
Click on 'Save'
, then print something from MS Word or any other application you want using the PDFCreator - it will be created in PDF/A-1b.
Greetings, Fritz
© 2022 - 2024 — McMap. All rights reserved.
gs -dPDFA -dBATCH -dNOPAUSE -sProcessColorModel=DeviceRGB -sDEVICE=pdfwrite -sPDFACompatibilityPolicy=1 -sOutputFile=output_filename.pdf input_filename.pdf
and it worked. – Scyphate