2011-04-17 37 views
3

我想使用ghostscript达到预期的目的,来解释postscript文件和输出png。我想要一个命令将一个特定页面从多页面ps文件转换为单个png。在infile是pdf文件的情况下,我已经完成了这个工作,但当infile是ps时,我没有完成。如何让ghostscript将一个特定页面从postscript文件输出为png?

这一行将把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=标志在后脚本输入的情况下不执行任何操作。输出与标志不存在的情况相同。

回答

4

与PDF不同,并非所有postscript文件都可以按随机顺序访问其页面。您可能正在尝试处理文件。 (否则标记应该在文档中标记为“对postscript不起作用”)。

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

由于您在Linux上,因此您可以使用下面使用ghostscript的助手脚本“ps2pdf”(但在大多数发行版中是“ps-tools”或类似命名软件包的一部分),或者只是指出gs命令线来进行转换。

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

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

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 

这个测试的原因代码,以确保其0(SHOWPAGE),则显示页面到目前为止的执行数,看看它我们的目标,如果我们把真正的堆栈和回报。对于任何其他条件,我们把错误和返回。

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

+0

我想你可能会在内部块之后缺少if或ifelse运算符。 – Emiswelt 2015-04-27 21:32:46

+0

是的,看起来应该是第一个'假'之后的某个地方。 – KenS 2015-04-28 07:21:39

相关问题