我调用了以下GhostScript命令,目的是将输入pdf转换为一堆输出PNG图像(每页一个图像):
"C:\Program Files\gs\gs9.07\bin\gswin64c.exe" \
-dNOPAUSE \
-q \
-r150 \
-sDEVICE=png16m \
-dBATCH \
-c "30000000 setvmthreshold" \
-dNumRenderingThreads=8 \
-sOutputFile="C:\output-%d.png" \
"C:\input.pdf"
当我在Windows命令提示符中运行此命令时,它突然从我的默认打印机中打印出一堆带有一堆编码字符的纸张。它不会产生任何类型的PNG图像。
更新
省略-q
给出:
GPL Ghostscript 9.07 (2013-02-14)
Copyright (C) 2012 Artifex Software, Inc. All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
Processing pages 1 through 4.
Page 1
Page 2
Page 3
Page 4
更新2: 感谢KenS,我一次删除了一个部件,直到确认它是以下参数来打破它:
-c "30000000 setvmthreshold"
我在一个试图提高GS速度的不同论坛上得到了这个。我使用它错了还是我应该把它留下来? PDF将会非常庞大并且有100页,所以我需要尽可能地进行优化。有什么建议吗?
有人能指出我正确的方向吗? 感谢
答案 0 :(得分:3)
我相信重写命令行以便更改参数的顺序并添加-f
来表示输入文件应该可以使它工作:
"C:\Program Files\gs\gs9.07\bin\gswin64c.exe" -dNOPAUSE -q -r150 -sDEVICE=png16m -dBATCH -dNumRenderingThreads=8 -sOutputFile=C:\output-%d.png -c "30000000 setvmthreshold" -f C:\input.pdf
How to use Ghostscript中的以下内容应该显而易见:
-c
string ... 将参数解释为PostScript代码,直到以“-
”开头,后跟非数字或“{”的下一个参数为止{1}}”。 例如,如果文件@
只包含单词“quit.ps
”,那么 命令行上的quit
相当于-c quit
。每个参数必须是有效的PostScript,或者是定义的单个标记 由标记运算符或包含有效PostScript的字符串。
quit.ps
将非切换参数解释为要使用普通-f
命令执行的文件名。由于这是默认值 行为,run
仅用于终止令牌列表-f
切换。
答案 1 :(得分:2)
回答“为什么不使用NumRenderingThreads”的问题。
它很复杂: - )
PostScript是一种解释型语言,只能作为单个解释线程运行,因为状态可以随时改变,程序执行可以依赖于当前状态。由于您无法对解释器进行多线程处理,因此需要从程序开始处开始并继续执行。
因此,为了运行线程,我们将'clist'写成一种所谓的显示列表。这不是解释,它只是输出页面上的图形基元和位置列表,它是通过执行PostScript程序得出的。 NB clist是一个固定的分辨率,原来的PostScript程序不是,PostScript程序可以根据它执行的环境采取不同的动作,clist不能等等。
然后,我们将输出页面拆分为水平条纹,并使用clist为每个条带运行一个线程,以仅渲染位于该条带上的位。 clist允许多线程访问,因为它没有被解释,所以值不会改变。一些对象将跨越条纹并将(部分)渲染多次(这对于图像数据很重要)为了创建最终页面,我们将条纹拼接在一起。
这意味着总体上我们需要解释程序写入clist,多次读取clist创建多个条带,然后我们需要将它们重新组合在一起。
或者我们可以使用页缓冲区,一大块内存足以容纳整个输出。我们解释一次,并随着我们去渲染。我们不写一个clist,我们只渲染每个对象一次,我们不需要合并输出。毫不奇怪,这更快。
那么clist和多线程的重点是什么?在高分辨率下,大多数系统没有足够的内存来保持整个输出,所以我们 生成条纹并将它们拼接在一起,这意味着我们需要一个clist。如果我们必须沿着那条路走下去,那么NumRenderingThreads会更快。
在150 dpi时,除非你在建筑物的两侧打印横幅,否则情况不太可能如此: - )
所以NumRenderingThreads 可以更快,但在你的情况下几乎肯定不是。但无论如何它可能是如此之快,你无法分辨。
答案 2 :(得分:1)
1)不要使用NumRenderingThreads。在150 dpi时,这只会减慢速度。
2)我们需要查看一个示例文件来评论很多。
3)我无法确定这会导致您的默认打印机开始发送页面。
从更简单的事情开始,确实:
gswin64c input.pdf
做点什么?我希望打开一个窗口显示PDF文件的第一页,按回车键会显示下一页等等。