如何使用 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/… 首先我删除了-dUseCIEColorgs 建议从 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.pdfinput_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(颜色配置文件)文件的路径。从 Adob​​e 下载一个好的颜色配置文件:

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 文件?

使用 PHP(ghostscript) 将 PDF 转换为图像耗时太长

GhostScript 完成转换为 PDF 后删除输入文件

使用 GhostScript 将图像转换为 PDF

使用 ghostscript 替换 PDF 中的颜色

Ghostscript将pdf转换为方向错误的pcl