ghostscript在合并两个postscript时没有保留页面级别的参数



我已经使用ghostscript将pdf文件转换为postscript,在转换过程中,我传递了双工选项的页面级参数,如下所示。

gswin32c.exe -q -dSAFER -dNOPAUSE -dBATCH -sDEVICE=output.ps 
-c "<</PSPageOptions [ (<</Duplex false>> setpagedevice) 
(<</Duplex true>> setpagedevice) (<</Duplex true>> setpagedevice) ] 
/LockDistillerParams true>> setdistillerparams" -f input.pdf

请参阅以上命令的解决方案链接:https://stackoverflow.com/a/64128881/13696415

现在,我为2个pdf文件添加了duplex参数,并将其转换为2个单独的postscript,问题是,当我将这些pdf与Ghostscript合并时,它丢失了我在转换为ps时传递的页面级参数。我尝试了以下建议的合并postscript的答案。https://stackoverflow.com/a/3445325/13696415为什么它在合并时丢失了添加的参数?合并时如何保留页面级参数?请找个人帮忙。

我可以确认setpagedevice的%%BeginPageSetup条目在合并2个postscript文件时丢失。即使/LockDistillerParams也无法保存设置。只要使用ghostscript ps2write设备再次运行postscript文件,就会导致输出放弃以前的设置。我怀疑ghostscript每次都会重写这些,如果缺少/PPageOptions来重做它们。我不知道在合并时保存设置的方法。

我尝试了另外两种技术,结果都很好。

(1( 合并两个postscript文件,然后使用ps2write设备将所需设置写入合并后的postscript文件。

gs -dBATCH -dNOPAUSE -sDEVICE=ps2write -sOutputFile=merged.ps -f file1.pdf file2.pdf
gs -dBATCH -dNOPAUSE -sDEVICE=ps2write -sOutputFile=merged-out.ps -c ' << /PSPageOptions [ (<</Duplex false>> setpagedevice) (<</Duplex true>> setpagedevice) (<</Duplex true>> setpagedevice) ] /LockDistillerParams true >> setdistillerparams ' -f merged.ps

(2( 使用ghostscript,使用ps2write设备合并两个pdf文件,并使用包含在一体操作中的/PPageOptions setdistributorparams。我发现这只适用于某些pdf文件。如果pdf文件是用我的Firefox使用的cairographics库生成的,即使用ghostscript重新显示,这也不起作用。

我在这里的测试是针对两个12页的表现良好的pdf文件。结果根据需要在第13页显示%page3字符串。可以根据需要更改字符串以使用setpagedevice:

gs -dBATCH -dNOPAUSE -sDEVICE=ps2write -sOutputFile=file1+2.ps -c '<< /PSPageOptions [(% page1)(% page2)(% page3)(% page4)(% page5)] /LockDistillerParams true >>setdistillerparams' -f file1.pdf file2.pdf

第页。S.请编辑您的原始帖子以显示正确的sDEVICE标注。根据用户的不同,反斜杠可以省略。

最新更新