【问题标题】:Ghostscript PDF to PDF/A conversion font issuesGhostscript PDF 到 PDF/A 转换字体问题
【发布时间】:2016-05-09 01:16:50
【问题描述】:

我正在探索将 PDF 文档转换为 PDF/A 的工具。 Ghostscript 似乎为这种转换提供了开箱即用的支持。一个问题似乎是作为原始 PDF 文档一部分的某些真字体没有正确转换。如果我从转换后的 PDF/A 文档中复制文本并将其粘贴到记事本中,则复制的文本似乎是乱码。

原文档文本可以复制到记事本就好了。

我正在使用以下脚本:

gswin64 -dPDFA -dBATCH -dNOPAUSE -dUseCIEColor -sProcessColorModel=DeviceCMYK -sDEVICE=pdfwrite -sPDFACompatibilityPolicy=1 -sOutputFile=FilteredOutput.pdf Filtered1Page.pdf

我在 Google Drive 中上传了一个示例 1 页源 PDF: SampleInput

从该命令生成的示例输出 PDF/A 文档位于 Google 驱动器中: SampleOutput

在 Windows 机器上对此 PDF 运行上述查询将重现该问题。

是否有任何设置/命令可以正确处理 PDF/A 转换?

【问题讨论】:

    标签: pdf fonts ghostscript pdfa


    【解决方案1】:

    不保证从 PDF 复制和粘贴。子集字体将具有可用的编码(例如 ASCII 或 UTF-8),在这种情况下,如果它们具有关联的 ToUnicode CMap、许多 PDF 文件,它们将只能进行剪切/粘贴/搜索不包含 ToUnicode CMap。

    当然,PDF/A 规范声明(在我看来很奇怪)您不应该使用子集字体,但并不总是可以判断字体是否是子集(并非所有创建者都遵循 XXXXX+ 约定),甚至如果字体不是子集,仍然不能保证它的编码是可用的。

    查看您发布的文件,它不包含它使用的一种字体(Arial,Bold),因此 Ghostscript 用 DroidSansFallback 替换,它包含的字体(FreeSansBold)是一个子集(FWIW 这个字体不'实际上似乎没有被使用....)。后备字体是 CIDFont,因此文本不会“正确”。

    我相信,如果您为 Ghostscript 提供真正的字体来替换 Arial,Bold,那么它可能会正常工作。这也将解决字符间距不正确(在一个地方,非常不正确)的相当明显的问题,这是由于后备字体与原始字体的宽度不同造成的。

    注意,警告消息已经告诉您不要使用 -dUseCIEColor。

    您无法复制/粘贴/搜索 PDF 的事实并不意味着它不是有效的 PDF/A-1b 文件,因此这并不意味着创建(NOT 转换) PDF/A-1b 不“正确”。

    【讨论】:

    • 感谢您的意见 - 有一些后续问题
    • 一个。我更新了 cidfmap 文件以使这一行 /Arial << /FileType /TrueType /Path (c:/windows/fonts/arial.ttf) /SubfontID 0 /CSI [(Identity) 0] >> ;1 文本看起来更好,但仍然无法正确复制文本 - drive.google.com/file/d/0B3Aklxzb8KfcX2VReXROUm5NQnc/… b。不使用 -dUseCIEColor,转换的 PDF/A 验证失败“使用了没有适当输出意图的设备特定颜色空间 (DeviceGray)”有没有办法纠正这个 c.使用 Ghostscript 转换为 PDF/A 时,有没有办法嵌入和复制真实类型的字体?
    • 您的 PDF 文件使用的是未嵌入的 CIDFont(不好的做法)并且没有 ToUnicode CMap。实际上,一旦您通过 pdfwrite 传递它,您将不会获得带有 ToUnicode CMap 的 PDF,因为如果没有一个开始,我们就不会发明一个。所以不,那是行不通的。您应该将 -sColorConversionStrategy=CMYK 用于 CMYK 输出,如果这样做,您可以删除 ProcessCOlorModel,它会自动设置。
    • 在使用您对 CMYK 输出 gswin64 -dPDFA -dBATCH -dNOPAUSE -sColorConversionStrategy=CMYK -sDEVICE=pdfwrite -sPDFACompatibilityPolicy=1 -sOutputFile=FilteredOutput2.pdf Filtered1Page.pdf 的建议时,我收到错误 Unrecoverable error: rangecheck in .putdeviceprops。有什么我想念的吗?另外,我是否可以假设我共享的文档无法转换为 PDF/A 并且复制文本仍然有效?
    • 可能您使用的是旧版本的 Ghostscript,当前版本是 9.18。您(显然)没有发送 pdfa_def.ps 文件,因此输出文件无论如何都不是有效的 PDF/A 文件。最后,不,不使用 Ghostscript。
    猜你喜欢
    • 2016-07-13
    • 2016-06-15
    • 2017-02-21
    • 2017-09-14
    • 1970-01-01
    • 1970-01-01
    • 2019-04-02
    • 2020-03-07
    • 2014-11-20
    相关资源
    最近更新 更多