Pdf 合并两个PostScript时,ghostscript不保留页级参数

Pdf 合并两个PostScript时,ghostscript不保留页级参数,pdf,printing,ghostscript,postscript,Pdf,Printing,Ghostscript,Postscript,我已经使用ghostscript将pdf文件转换为postscript,在转换过程中,我已经为duplex选项传递了页面级参数,如下所示 gswin32c.exe -q -dSAFER -dNOPAUSE -dBATCH -sDEVICE=output.ps \ -c "<</PSPageOptions [ (<</Duplex false>> setpagedevice) (<</Duplex true>> set

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

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
gswin32c.exe-q-dSAFER-dNOPAUSE-dBATCH-sDEVICE=output.ps\
-c“设置蒸馏器参数”-f input.pdf
有关上述命令,请参阅解决方案链接:

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

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

我尝试了另外两种方法,效果很好

(1) 合并2个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
gs-dBATCH-dNOPAUSE-sDEVICE=ps2write-sOutputFile=merged.ps-f file1.pdf file2.pdf
gs-dBATCH-dNOPAUSE-sDEVICE=ps2write-sOutputFile=merged-out.ps-c'>设置蒸馏器参数'-f merged.ps
(2) 使用ghostscript,使用ps2write设备和包含用于一次操作的/PSPageOptions设置蒸馏器参数合并2个pdf文件。我发现这只适用于某些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
gs-dBATCH-dNOPAUSE-sDEVICE=ps2write-sOutputFile=file1+2.ps-c'>设置蒸馏器参数'-f file1.pdf file2.pdf

另外,请编辑您的原始帖子,以显示正确的设备标注。根据用户的不同,可以省略反斜杠。

谢谢您的输入。我已经尝试过这种方法。这对我有用。但问题是,我们至少有1000个文档要转换为PS并插入双工参数。平均而言,每个文档将有3页,因此我们必须传递3000个双工参数,如(setpagedevice)。甚至我也试图通过编写一个python程序来传递3000个参数,用原始的Ghostscript命令附加参数,但由于错误“参数列表过长”而失败。错误“参数列表过长”的原因是,Linux命令行的参数长度有限制。为了增加这一点,我们需要在一个配置文件中进行更改,最大长度基于服务器堆栈内存。这种方法对我没有帮助。除了Ghostscript,还有其他软件可以合并PS吗?我尝试过pdftops,结果与Ghostscript相同,丢失了现有参数。然后发现了一个名为“psjoin”的工具,它可以在不丢失参数的情况下进行合并,但它会使PS文件变得非常大,并且需要花费大量时间来合并许多文件。当我测试时,合并1000个文件需要4小时。但在实时情况下,我们可以预期比这更多的文件数量。所以我也放弃了。如果你发现了其他工具,请告诉我。关于原始帖子上的反斜杠,有人编辑并添加了反斜杠以避免水平滚动。