发生字体错误时,GhostScript创建额外的页面

时间:2019-04-09 19:47:13

标签: pdf ghostscript postscript

我有一个过程,需要将多个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文件中的字体数据写入正在创建的字体数据中。我正在寻找一种方法来在生成的Postscript文件中保存/重新创建它。或者,如果不可能,我将需要一种方法来告诉ghostscript如何使用这些字体。如GS文档https://www.ghostscript.com/doc/current/Use.htm#CIDFontSubstitution所述,尝试包含它们没有成功。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

我已经回答了这个问题,尽管我知道它不能回答问题,因为它不适合作为评论。

我认为您关于缺少字体导致问题的假设是错误的。许多PDF文件并未嵌入它们所需的所有字体,我已经看过许多这样的示例,并且它们不会发出多余的页面。

您对自己正在做的事情的描述还不是很清楚。您描述了两个过程,一个过程从PostScript到PDF,另一个过程从PostScript到PostScript(WHY?),然后到PDF。

您尚未说明为什么要将PostScript处理为PostScript文件。

尤其是您没有提供示例文件来查看。没有这些,就无法判断您的经验是否正确。

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

链接到的文档用于CIDFont替换,它与Font替换无关,CIDFonts和Fonts在PDF中(尤其是PostScript)是不同的。但老实说,我怀疑这是您的问题。

我建议您(至少)将“ smallexample.ps”放置在公共位置,然后在此处发布URL,这样我们至少可以遵循与您相同的步骤。这样我们就可以告诉您发生了什么。对为什么要这样做的解释也很有用,我通常强烈建议您不要做这样的额外步骤。每个步骤都有以某种方式破坏输出的风险。

答案 1 :(得分:0)

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

我认为您对字体的假设是错误的,您是正确的。我在第二个ps文件中找到了多余的页面,并且在第二次转换之前没有遇到字体错误。

我有一个过程,该过程使用VB MSWord Interop库,通过设置了ghostscript和redmon的虚拟打印机将多个文档打印到单个ps文件中。我也在添加功能以混入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