我正在尝试使用ghostscript达到预期目的,来解释postscript文件并输出png。 我想要一个命令,将一个特定页面从一个多页面的ps文件转换为一个png。 在infile是pdf文件的情况下,我已经完成了这个工作,但是当infile是一个ps时,我没有完成这个工作。
这行将转换成一个文件女巫是由拼接的PNG文件组成。
gs -dSAFER -dBATCH -sDEVICE=png256 -r96x96 -sOutputFile=out.png in.ps
这将从一个PDF采取一个特定的页面,并将其转换为PNG。
gs -q -dSAFER -dBATCH -dFirstPage=2 -dLastPage=2 -sDEVICE=png256 -SOut=fileout.png in.pdf
简单地把dFirstPage=
标志放在后脚本input的情况下什么也不做。 输出与标志不存在一样。
与PDF不同的是,并不是所有的postscript文件都可以按照随机的顺序访问他们的页面。 你可能正在尝试处理文件。 (否则标记应该在文档中标记为“不适用于postscript”)。
我认为最简单的方法是先将PS文件转换为PDF,然后从生成的PDF中提取页面。
既然你是在Linux上,你可以使用下面使用ghostscript的助手脚本“ps2pdf”(但在大多数发行版中是“ps-tools”或类似命名软件包的一部分),或者只是想出gs
命令行来使转换。
另一种方法是将所有页面生成到最后一个,然后删除第一个不需要的页面。
发生这种情况是由于postscript本身的性质:postscritp文件只是一个计算机程序,它设置了许多内部状态,呈现页面并调用showpage
函数 – 下一页然后开始渲染 – 所以,根据文件,外部工具无法知道哪些语句是所有页面状态的一部分,哪些语句仅用于呈现页面。 在更新的规范下,有一些可选的数据结构,从PDF规范继承,可以为独立页面调用正确的代码工作,但很少有文件将承载。
您可以使用PostScript来执行此操作,无论文件是否符合DSC,前提是您知道要使用哪个页面。
一个自定义的EndPage过程将完成这项工作。 EndPage在作业中的每个页面被调用,并且过程必须返回一个布尔值,如果为true,那么页面被传输到设备进行打印,如果为false,那么该页面被消耗并被丢弃。
<< /EndPage { 0 eq { %% reason code is 0 for showpage 5 eq { %% 5 is just an example, you would put your page# minus 1 here true }{ false }ifelse } { pop %% remove the count of pages from the stack false }ifelse } >> setpagedevice
这测试的原因代码,以确保其0(showpage),然后showpage的执行次数到目前为止,看看它的目标,如果是我们把真正的堆栈和返回。 对于任何其他条件,我们把错误和返回。
请注意,只有当您退出解释器时才会重置页面计数,因此,如果您在不重新启动解释器的情况下背靠背运行两个文件,那么这仅适用于第一个文件。