如何使ghostscript从postscript文件输出单个特定页面作为png?

Chr*_*ris 4 linux postscript ghostscript

我正在尝试将ghostscript用于其预期目的,以解释postscript文件和输出png.我想要一个命令,将单个特定页面从多页ps文件转换为单个png.我已经在infile是pdf文件的情况下完成了这个,但是当infile是ps时却没有.

此行将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=标志放在后脚本输入案例中什么都不做.输出与标志不存在的输出相同.

Ken*_*enS 6

您可以使用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
Run Code Online (Sandbox Code Playgroud)

这个测试原因代码,以确保其0(showpage)然后到目前为止showpage的执行次数,看看它是否是我们的目标,如果是我们在堆栈上放置并返回.对于任何其他条件,我们放假并返回.

请注意,只有在退出解释器时才会重置页数,因此如果您在不重新启动解释器的情况下背靠背运行两个文件,那么这只适用于第一个.


jsb*_*eno 4

与 PDF 不同,并非所有 Postscript 文件都可以按随机顺序访问其页面。您尝试处理的文件可能就是这种情况。(否则,这些标志应在文档中标记为“不适用于 postscript”)。

我认为最简单的方法是先将 PS 文件转换为 PDF,然后从生成的 PDF 中提取页面。

由于您使用的是 Linux,因此您可以使用帮助程序脚本“ps2pdf”,它在下面使用 Ghostscript(但在大多数发行版中是“ps-tools”或类似名称的包的一部分) - 或者只是找出命令行gs来进行转换。

另一种方法是生成所有页面,直到您想要的最后一个页面,然后删除第一个不需要的页面。

发生这种情况是由于 postscript 本身的性质:postscritp 文件只是一个计算机程序,它设置许多内部状态,渲染页面并调用函数showpage- 然后开始渲染下一页 - 因此,根据文件,外部工具无法知道哪些语句是所有页面状态的一部分,哪些语句仅用于呈现页面。在较新的规范下,有一些从 PDF 规范继承的可选数据结构,可以用于为独立页面调用正确的代码,但很少有文件会携带这些数据结构。