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

时间:2011-04-17 03:26:05

标签: linux ghostscript postscript

我正在尝试将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=标志放在后脚本输入案例中什么都不做。输出与没有标志的输出相同。

2 个答案:

答案 0 :(得分:6)

您可以使用PostScript执行此操作,无论该文件是否符合DSC,只要您知道所需的页面即可。

自定义 EndPage 过程将完成此任务。为作业中的每个页面调用 EndPage ,并且该过程必须返回一个布尔值,如果为true,则将页面传输到设备进行打印,如果为false则页面被消耗并丢弃。< / p>

<<
/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的执行次数,看看它是否是我们的目标,如果是我们在堆栈上放置并返回。对于任何其他条件,我们放错误并返回。

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

答案 1 :(得分:4)

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

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

由于你在Linux上,你可以使用帮助脚本“ps2pdf”,它使用下面的ghostscript(但在大多数发行版中都是“ps-tools”或类似命名包的一部分) - 或者只是找出{{1命令行进行转换。

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

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