如何使用 ghostscript 将 PDF 转换为 PDF/A 或 PDF/X?
Posted
技术标签:
【中文标题】如何使用 ghostscript 将 PDF 转换为 PDF/A 或 PDF/X?【英文标题】:How to use ghostscript to convert PDF to PDF/A or PDF/X? 【发布时间】:2010-12-12 03:54:18 【问题描述】:有没有办法使用 ghostscript 将 PDF 转换为 PDF/A 或 PDF/X?我知道它可以用来将PDF转换为图像,但我不知道它是否可以用来转换PDF/A。我应该使用什么参数?
【问题讨论】:
拜托,你能标记一个对你来说正确的答案吗? 【参考方案1】:这是将 pdf 文档(不是 pdf/a)转换为 pdf/a:
gs -dPDFA -dBATCH -dNOPAUSE -dUseCIEColor -sProcessColorModel=DeviceCMYK -sDEVICE=pdfwrite -sPDFACompatibilityPolicy=1 -sOutputFile=output_filename.pdf input_filename.pdf
希望这对某人有所帮助!
【讨论】:
这让我很开心!谢谢你亚瑟王! gs 输出不推荐 CIE; CMYK 使我的一些页面变蓝。我只是使用了gs -dPDFA -dBATCH -dNOPAUSE -sProcessColorModel=DeviceRGB -sDEVICE=pdfwrite -sPDFACompatibilityPolicy=1 -sOutputFile=output_filename.pdf input_filename.pdf
,它起作用了。
设置兼容策略的正确方法是-dPDFACompatibilityPolicy=1
,根据这个:***.com/questions/57167784/…
首先我删除了-dUseCIEColor
。 gs
建议从 9.11 版本开始删除它。
我尝试使用veraPDF
(PDF/A 一致性检查器)验证生成的 PDF。输出发现 3 个验证错误: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
和 3)DeviceCMYK may be used only if the file has a PDF/A-1 OutputIntent that uses a CMYK colour space
。【参考方案2】:
希望这个答案可以帮助来自 Google 的其他人遇到同样的问题:
要将 PDF 转换为 PDFA-1b 或 PDFA-2b,您可以使用 Ghostscript。我建议你使用最新版本(今天是 9.19)。
安装它
在 Mac OS 中,您可能更喜欢使用 Homebrew:
brew install ghostscript
在 Linux 中,一些发行版带来了更旧的版本(rhel7 sports 9.07)。要下载完全独立的现代单文件 ghostscript,请直接从网站下载:
wget https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs919/ghostscript-9.19-linux-x86_64.tgz
如果您在 20 年后尝试上面的链接时损坏了,请参考 ghostscript.com 并搜索下载部分。 下载二进制版本,除非你知道自己在做什么,否则不要去寻找源代码。
在 Windows 中,我无法帮助您,但如果您设法安装它,如果您替换文件和 gs 可执行文件的位置,以下命令也将起作用。
命令行
gs-919-linux_x86_64 -dPDFA=1 -dNOOUTERSAVE -sProcessColorModel=DeviceRGB -sDEVICE=pdfwrite -o output_file.pdf /path/to/PDFA_def.ps -dPDFACompatibilityPolicy=1 input_file.pdf
在 Mac 中,gs-919-linux_x86_64
将只是 gs
。
请注意output_file.pdf
和input_file.pdf
必须更改为输出文件(转换后的文件)和输入文件(要转换的文件)的名称。 /path/to/PDFA_def.ps
是您的文件 PDFA_def.ps
的副本。
-dPDFA=1
用于 PDFA-1b。
-dPDFA=2
如果你想要 PDFA-2b。
PDFA_def.ps
是什么?
PDFA_def.ps
是用于创建 PDFA 文件的某种模板 ghostscript。棘手的部分是,由于某种原因,ghostcript 带有一个无法正常工作的文件。
您需要编辑 PDFA_def.ps
并包含有效 ICC(颜色配置文件)文件的路径。从 Adobe 下载一个好的颜色配置文件:
wgethttp://tutankhamon.acc.umu.se/mirror/archive/ftp.sunet.se/pub/vendor/adobe/adobe/iccprofiles/win/
在该 zip 中,找到一个名为 AdobeRGB1998.icc
的文件,将其放在某处,然后将该文件的路径放入 PDFA_def.ps 文件中。
这里是PDFA_def.ps的版本,把PATH_TO_YOUR_ICC_FILE
改成你AdobeRGB1998.icc的路径
https://gist.githubusercontent.com/weltonrodrigo/19df77833f023fbe1572168982e4b515/raw/ea86e87379d14120d7ff26f6f235ac7eeb5f5dd5/PDFA_def.ps
【讨论】:
谢谢。令人不快的是,默认的 PDFA_def.ps 带有一个错误,该错误会导致一个令人困惑的文件未找到错误。 也许可以在Ghostscript's bug tracker 上报告。 在 windows 中:gswin64c.exe -dPDFA=1 -dNOOUTERSAVE -sProcessColorModel=DeviceRGB -sDEVICE=pdfwrite -o output_file.pdf -dPDFACompatibilityPolicy=1 .\inputfile.pdf【参考方案3】:@danio、@imgen:即使是最近发布的关于 PDF/X(标准化印前要求)和 PDF/A(标准化存档要求)生成的文档页面也具有很大的误导性。 (您的链接指向 v8.63 版本。)最后,它建议使用示例 PDF*_def.ps
运行示例命令行将已经生成有效的 PDF/A 和 PDF/X 文件。
但是,他们没有!
这是一个示例命令,它本身是正确的:
gs \
-dPDFA \
-dBATCH \
-dNOPAUSE \
-dNOOUTERSAVE \
-dUseCIEColor \
-sDEVICE=pdfwrite \
-sOutputFile=out-a.pdf \
PDFA_def.ps \
input.ps
输出文件将声明本身为 PDF/A(大多数 PDF 查看器会很乐意接受这一点),但输出文件未通过所有真正的合规性测试。
修复很简单:您需要编辑您的示例 PDFA_def.ps
(对于 PDF/X:您的 PDFX_def.ps
)文件以匹配您的环境。这些所需的编辑在旧文档版本中没有明确说明,并且提供的命令表明它可以开箱即用。
特别是对于 PDF/X,您必须指定要使用的有效 ICC 配置文件。
另请参阅更新的文档(当前 SVN 中继版本):
http://svn.ghostscript.com/ghostscript/trunk/gs/doc/Ps2pdf.htm#PDFA【讨论】:
你能回答一个类似的帖子吗?提前致谢。 ***.com/q/28632119/1288722 @doctorate:抱歉,我现在没有足够的时间详细介绍那里。当前的 Ghostscript 应该能够生成 PDF/X-3 -- 虽然不是 PDF/X-1。如果您的打印店不能接受 PDF/X-3,他们使用的技术非常过时。 X-3 比 X-1 更现代、更可靠…… 对我来说,这是最后一刻的解决方案。他们是在线印刷公司,我认为 PDF/X-3 会解决它,但这只有在你有时间回答时才有意义。再次感谢。 出现以下错误:Error: /invalidfileaccess in --file-- Operand stack: --nostringval-- --nostringval-- (srgb.icc) (r)
在此处查看完整输出:pastebin.com/wpGyGXkU
@LEo:您没有指定有效的 ICC 配置文件,或者您指定的配置文件 (srgb.icc) 不在其应有的路径中。查看您的 PDFA_def.ps 定义为 srgb.icc 的内容。【参考方案4】:
请注意,当前的答案并不完全正确。您可以定义您想要的 PDF/A 级别,从而导致程序的不同行为。这个是对的:
gs -dPDFA -dBATCH -dNOPAUSE -sColorConversionStrategy=UseDeviceIndependentColor -sDEVICE=pdfwrite -dPDFACompatibilityPolicy=2 -sOutputFile=output_filename.pdf input_filename.pdf
请注意我从 sdPDFACompatibilityPolicy 到 dPDFACompatibilityPolicy 的更改。 将其更改为更高的数字以获取其他版本。如果您不需要 DOCINFO,1 很好。 此外,我们使用选项 UseDeviceIndependentColor 来避免验证问题。
如果您在此处更改选项,您很可能会得到一个不合规的 PDF/A(即使有不同的说明)。 您可以在此处查看您的 pdf/a: https://www.pdf-online.com/osa/validate.aspx
【讨论】:
这个,带有 -sColorConversionStrategy=UseDeviceIndependentColor,对我有用。非常感谢!【参考方案5】:如果您使用 Windows 并想明确创建 PDF/A-1b 文档(PDFCreator 有 PDF/A-2b 的输出选项,但 PDF/A-1b 没有),您只需输入 Artur 描述的参数上面的 PDFCreator 的 ui 设置中没有文档名称的设置。启动 PDFCreator,选择打印机菜单,然后转到设置。现在,从左侧的设置列表中选择'Ghostscript'
。在'additional ghostscript settings'
下,输入如下:
-dPDFA|-dBATCH|-dNOPAUSE|-dUseCIEColor|-sProcessColorModel=DeviceCMYK|-sDEVICE=pdfwrite|-sPDFACompatibilityPolicy=1
单击'Save'
,然后使用 PDFCreator 从 MS Word 或您想要的任何其他应用程序打印一些内容 - 它将在 PDF/A-1b 中创建。
您好, 弗里茨
【讨论】:
如何从windows调用ghostscript..上面提到的命令都不起作用。我尝试了两个选项: 1. 转到 ghostscript 的路径( C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Ghostscript> )并双击 ghostscript,然后尝试键入“gs -d... " 上面提到的命令,但它不起作用。 2.我已经打开命令提示符并尝试调用ghostscript(不知道如何调用它,是否使用gs或键入ghostscript等)以下是我在ghostscript上尝试过的命令:C:\ProgramData\Microsoft\Windows\开始菜单\程序\Ghostscript>以上是关于如何使用 ghostscript 将 PDF 转换为 PDF/A 或 PDF/X?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Python Ghostscript 的高级接口将一个 .pdf 文件转换为多个 .png 文件?