GhostScript 在出现字体错误时创建额外的页面

GhostScript creating extra page when font errors occur

我有一个过程需要将多个 postscript 和 pdf 文件写入由 word interop VB 代码生成的单个 postscript 文件,并将继续对其进行修改。每次调用 ghostscript 都会产生一个额外的空白页。我正在使用 GhostScript 9.27。

由于这里有多种技术和因素,我缩小了范围:可以通过将 postscript 文件转换为 postscript,然后通过命令行将其转换为 pdf 来证明问题。直接从 postscript 到 pdf 不会出现此问题。这是错误的示例和示例。

C:\>"C:\Program Files (x86)\gs\gs9.27\bin\gswin32c.exe" -dNOPAUSE -dBATCH -sDEVICE=ps2write -sOutputFile=C:\testfont.ps C:\smallexample.ps
C:\>"C:\Program Files (x86)\gs\gs9.27\bin\gswin32c.exe" -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=C:\testfont.pdf C:\testfont.ps

Can't find (or can't open) font file %rom%Resource/Font/TimesNewRomanPSMT.
Can't find (or can't open) font file TimesNewRomanPSMT.
Can't find (or can't open) font file %rom%Resource/Font/TimesNewRomanPSMT.
Can't find (or can't open) font file TimesNewRomanPSMT.
Querying operating system for font files...
Didn't find this font on the system!
Substituting font Times-Roman for TimesNewRomanPSMT.

我首先假设字体错误是额外页面的原因(如果只是为了排除这种可能性,我知道这并不确定)。由于我的 ps->pdf 测试没有出现这个问题而我的 ps->ps->pdf 出现了,我认为 ghostscript 没有写入原始字体数据postscript 文件添加到它正在创建的文件中。我正在寻找一种在生成的后记文件中 preserve/recreate 的方法。或者,如果那不可能,我将需要一种方法来告诉 ghostscript 如何使用这些字体。我没有成功尝试按照此处的 GS 文档中的描述包含它们:https://www.ghostscript.com/doc/current/Use.htm#CIDFontSubstitution

感谢任何帮助。

我已将其作为答案,尽管我知道它没有回答问题,因为它不适合作为评论。

我认为您认为丢失的字体导致问题的假设是有缺陷的。许多 PDF 文件没有嵌入它们需要的所有字体,我见过很多这样的例子,它们不会发出额外的页面。

你对自己所做的事情的描述并不完全清楚。您描述了两个过程,一个从 PostScript 到 PDF,一个从 PostScript 到 PostScript(为什么?)然后到 PDF。

您没有描述为什么要将 PostScript 处理成 PostScript 文件。

特别是您没有提供要查看的示例文件。否则就无法判断您的体验是否正确。

例如;您完全有可能将 /Duplex 设置为 true 并且文件中的页数为奇数。这将导致发出额外的空白页(非常正确),因为双面打印需要偶数页。

您链接到的文档是针对 CIDFont 替换的,它与字体替换无关,CIDFonts 和字体在 PDF 和(更具体地说)PostScript 中是不同的东西。但老实说,我怀疑这是你的问题。

我建议您(至少)将 'smallexample.ps' 放在 public 和 post 以及 URL 的某处,这样我们至少可以遵循您正在执行的相同步骤。这样我们就可以告诉你发生了什么。解释为什么要这样做也很有用,我通常会强烈建议您不要执行这样的额外步骤;每一步都有以某种方式破坏输出的风险。

感谢您的回复。由于评论长度限制,我也发布为答案:

我认为你是对的,我对字体的假设是错误的。我在第二个 ps 文件中找到了额外的页面,直到第二次转换才遇到字体错误。

我有一个进程使用 VB MSWord Interop 库将多个文档打印到单个 ps 文件中,并使用通过 ghostscript 和 redmon 设置的虚拟打印机。我也在添加混合 pdf 文件的功能。它有效,但会产生一个额外的页面。为了缩小问题的实际范围,我通过命令行尝试了更简单的测试用例来确定问题。当 ghostscript 将 ps 转换为 ps 时,我只会得到额外的页面(无论是否还有 pdf)。将 ps 转换为 pdf 我没有得到额外的页面。有趣的是,我可以通过将 ps 转换为 pdf 然后将两个 pdf 转换回 ps 来解决这个问题。这是一个较慢的,但不应该是必要的,所以我想确定并解决额外的页面问题。我无法共享该特定文件。我会看看是否可以创建一个我可以分享的示例,该示例也展示了该问题。同时,我可以确认源ps文件是六页,双面打印设置如下。生成的 ps 文件中有双面定义和额外的页面。我可以在源 ps 中检查其他一些常见的罪魁祸首吗?谢谢。

featurebegin{
%%BeginFeature: *DuplexUnit NotInstalled

%%EndFeature
}featurecleanup

featurebegin{
%%BeginFeature: *Duplex None

    <</Duplex false /Tumble false>> setpagedevice
%%EndFeature
}featurecleanup