Pdf 字体错误时创建额外页面的重影脚本

Pdf 字体错误时创建额外页面的重影脚本,pdf,ghostscript,postscript,Pdf,Ghostscript,Postscript,我有一个过程,需要将多个postscript和pdf文件写入由word interop VB代码生成的单个postscript文件,并且该文件将继续由word interop VB代码修改。每次调用ghostscript都会产生一个额外的空白页。我正在使用GhostScript 9.27 由于这里有几种技术和因素,我已经缩小了范围:可以通过将postscript文件转换为postscript,然后通过命令行转换为pdf来演示这个问题。直接从postscript到pdf不会出现问题。下面是一个示例

我有一个过程,需要将多个postscript和pdf文件写入由word interop VB代码生成的单个postscript文件,并且该文件将继续由word interop VB代码修改。每次调用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文档中的描述将它们包括在内:


非常感谢您的帮助。

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

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

你还没有完全清楚地描述你在做什么。您描述了两个过程,一个是从PostScript到PDF,另一个是从PostScript到PostScript(为什么?)再到PDF

您尚未描述将PostScript处理为PostScript文件的原因

特别是,您还没有提供一个示例文件来查看。没有这一点,就无法判断你的经验是否正确

比如,;您完全可能已将/Duplex设置为true,并且文件中的页数为奇数。这将导致发出额外的空白页(非常合适),因为双工需要偶数页

您链接到的文档是用于CIDFont替换的,它与字体替换无关,CIDFonts和字体在PDF和PostScript中是不同的。但我真的怀疑这是你的问题


我建议你(至少)“smallexample.ps”放在公共的地方,然后在这里发布URL,这样我们至少可以按照你正在做的步骤来做。这样我们就可以告诉你发生了什么。解释一下你为什么要这样做也会很有用,我通常会强烈建议你不要像这样做额外的步骤;每一步都有以某种方式使输出脱气的风险。

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

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

我有一个过程,使用VB MSWord互操作库,使用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
功能开始{
%%BeginFeature:*未安装双工单元
%%末端特征
}特征清理
功能开始{
%%BeginFeature:*双工无
设置页面设备
%%末端特征
}特征清理

双面打印是错误的,因此我不能立即想到其他任何东西,尽管BeginPage或EndPage过程可以做到,但这是罕见的。我仍然不清楚为什么要将PostScript作为输入,并将PostScript作为输出。您知道Ghostscript可以在命令行上混合和匹配输入类型吗?因此,gswin32c…..file1.ps file2.pdf file3.ps等无需将任何内容转换为PostScript即可工作。如果您希望最终得到一个PostScript文件,只需设置DEVICE=ps2write.Yes,gswin32c…..file1.ps file2.pdf file3.ps就是我实际要做的,并且显示了额外的页面问题。gswin32c…..file1.ps示例只是一个简化,它也显示了这个问题。我的原始ps是从多个文档创建的,根据gsview有额外的%%trail和%%eof。忽略所有dsc是正确查看它们的唯一方法。可能是ghostscript如何中断而导致额外的页面?不,注释被忽略(%PostScript中的注释字符)。顺便说一句您可以编辑自己的问题,以避免发布包含更多详细信息的答案。源ps有一点,即ps2write设备读取为额外的空白页(错误,因为pdfwrite没有?)。我将与原始ps打印时使用的ghostscript绑定的打印机端口更改为使用ps2write和指定文件(即mswinpr2和虚拟打印机)并