Pdf 有没有加速鬼脚本的技巧?

Pdf 有没有加速鬼脚本的技巧?,pdf,ghostscript,Pdf,Ghostscript,我有一个100页的PDF,大约是50Mbs。我正在对它运行下面的脚本,每页大约需要23秒。PDF是纸质文档的扫描 gswin32.exe -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dCompatibilityLevel=1.3 -dPDFSETTINGS=/screen -sOutputFile=out4.pdf 09.pdf 我能做些什么来加快速度吗?我已经确定是-dPDFSettings=/screen使它变得如此缓慢,但是没有它我

我有一个100页的PDF,大约是50Mbs。我正在对它运行下面的脚本,每页大约需要23秒。PDF是纸质文档的扫描

gswin32.exe -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dCompatibilityLevel=1.3 
            -dPDFSETTINGS=/screen -sOutputFile=out4.pdf 09.pdf
我能做些什么来加快速度吗?我已经确定是
-dPDFSettings=/screen
使它变得如此缓慢,但是没有它我就无法获得良好的压缩

更新: 好的,我试着把它更新到下面的版本。我是否正确使用了
-c 30000000 setvmthreshold
部分

gswin32.exe -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dCompatibilityLevel=1.3 
            -dPDFSETTINGS=/screen -dNumRenderingThreads=2 -sOutputFile=out7.pdf 
            -c 30000000 setvmthreshold -f 09.pdf

如果您在多核系统上,请使其使用多个CPU核,并具有:

-dNumRenderingThreads=<number of cpus>
尝试禁用垃圾收集器:

-dNOGC

有关更多详细信息,请参阅Ghoscript文档中的部分。

您没有说明您的计算机配备了什么CPU和多少RAM

你的情况是:

  • 一份PDF格式的扫描文档,在avarage上每页大小约为500KB。这意味着使用扫描分辨率(至少200 dpi,甚至600 dpi),每个页面基本上都是一张图片
  • 您正在使用Ghostscript重新提取它,使用
    -dPDFSETTINGS=/screen
    。此设置将执行许多操作以减小文件大小。其中最重要的是:
  • 将所有(彩色或灰度)图像重新采样到72dpi
  • 将所有颜色转换为sRGB
就CPU和/或RAM使用而言,这两种操作都可能相当“昂贵”

顺便说一句,您不需要设置
-dCompatibilityLevel=1.3
;它已经由
-dPDFSETTINGS=/screen
隐式设置

试试这个:

gswin32.exe ^
 -o output.pdf ^
 -sDEVICE=pdfwrite ^
 -dPDFSETTINGS=/screen ^
 -dNumRenderingThreads=2 ^
 -dMaxPatternBitmap=1000000 ^
 -c "60000000 setvmthreshold" ^
 -f input.pdf
此外,如果您在64位系统上,请尝试安装最新的32位Ghostscript版本(9.00)。它的性能优于64位版本


让我告诉你,对我来说,将600dpi扫描的页面图像降采样到72dpi通常不需要23秒,但不到1秒。

我在核心
i7
上处理
~300
页面PDF,发现添加以下选项提供了显著的加速:

                            %-> comments to the right 
-dNumRenderingThreads=8     % increasing up to 64 didn't make much difference
-dBandHeight=100            % didn't matter much
-dBandBufferSpace=500000000 % (500MB)
-sBandListStorage=memory    % may or may not need to be set when gs is compiled
-dBufferSpace=1000000000    % (1GB)

-c 1000000000 setnvmthreshold-f
这件事对我来说没什么区别,FWIW。

我可能完全不适合这里,但是你尝试过Djvu文件格式吗?一般来说,它对扫描文档(即使有很多图片)很有吸引力,而且它提供了更好的压缩文件:我在B&W科学文章中获得了两倍的无损大小增益。

为了加快将带有大位图图形的pdf光栅化为高质量的300 ppi png图像,我发现对大多数文件来说,将
-dBufferSpace
设置得尽可能高和
-dNumRenderingThreads
设置为尽可能多的可用内核是最有效的,而
-dBufferSpace
提供了最显著的提升

效果最好的具体值是:

gs -sDEVICE=png16m -r300 -o document.png -dNumRenderingThreads=8 -dBufferSpace=2000000000 -f document.pdf
  • -dBufferSpace=20000000000
    用于2GB的缓冲区空间。这使一个相对较小的文件的光栅化从14分钟缩短到50秒。对于较小的文件,将其设置为1G并没有太大区别,但对于较大的文件,这会产生显著的差异(有时会快2倍)。由于某种原因,尝试转到3 GB或更高,导致启动时出现错误“无法恢复的错误:rangecheck-in.putdeviceprops”

  • -dNumRenderingThreads=8
    适用于具有8个内核的机器。这使同一文件的光栅化时间从14分钟缩短到4分钟(如果使用4个线程,则为8分钟)。将其与上面的
    -dBufferSpace
    选项相结合,将时间从50秒缩短到25秒。然而,当与
    -dBufferSpace
    结合使用时,随着线程数的增加,回报似乎在减少,而对于某些文件,效果几乎没有。奇怪的是,对于一些较大的文件,将线程数设置为1实际上比任何其他数字都快

整个命令看起来像:

gs -sDEVICE=png16m -r300 -o document.png -dNumRenderingThreads=8 -dBufferSpace=2000000000 -f document.pdf
这是通过Ghostscript 9.52测试的,并且是通过测试@wpgalle3的答案中的建议以及Ghostscript文档中的部分得到的

从文档中获得的一个关键信息是,当ghostscript由于光栅图像输出大于
-dMaxBitmap
的值而使用“带状模式”时,它可以利用多个内核来加速该过程

无效或适得其反的选项:

gs -sDEVICE=png16m -r300 -o document.png -dNumRenderingThreads=8 -dBufferSpace=2000000000 -f document.pdf
单独或与
-dBufferSpace
一起设置
-c“2000000000 setvmthreshold”
(2 GB)似乎没有什么区别

设置
-sBandListStorage=memory
导致分段错误

设置
-dMaxBitmap=2000000000
(2 GB)会显著降低进程速度,并明显导致进程失控,写入数百GB的临时文件而没有任何停止的迹象,提示我立即终止进程


-dBandBufferSpace
设置为
-dBufferSpace
的一半对较小的文件没有影响,但实际上会将较大文件的处理速度显著降低1.5-1.75倍。在Ghostscript文档的一节中,实际上建议不要使用
-dBandBufferSpace
:“如果您只想为带状分配更多内存,为了增加带状大小和提高性能,请使用BufferSpace参数,而不是BandBufferSpace。”

压缩确实需要时间,确保在开始之前尽可能减少图像。不幸的是,我试图解决的问题是,我们的数据库中已经存在大约600GB的超大图像。我希望我可以使用Ghostscript缩小尺寸,但看起来我可能在完成之前就退休了。OCR它,那么图像和光栅就更少了,一切都更快了:-)谢谢@Ismail的信息。我更新了