tam*_*mym 562 pdf compression
我有一个 72.9MB 的 PDF 文件,我需要将其缩小到 500KB 以下。
该文件是我扫描的 JPEG 图像,然后转换为 pdf。
小智 804
使用以下ghostscript命令:
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook \
-dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf
Run Code Online (Sandbox Code Playgroud)
总结-dPDFSETTINGS
:
-dPDFSETTINGS=/screen
质量较低,尺寸较小。( 72 dpi )-dPDFSETTINGS=/ebook
为了更好的质量,但稍大的 pdf。( 150 dpi )-dPDFSETTINGS=/prepress
输出类似于 Acrobat Distiller“印前优化”设置(300 dpi)-dPDFSETTINGS=/printer
选择类似于 Acrobat Distiller“打印优化”设置 ( 300 dpi ) 的输出-dPDFSETTINGS=/default
选择旨在用于广泛用途的输出,可能以更大的输出文件为代价参考:https://www.ghostscript.com/doc/current/VectorDevices.htm#PSPDF_IN:
特定于 PostScript 和 PDF 输入的控件和功能
-dPDFSETTINGS=configuration
将“蒸馏器参数”预设为四个预定义设置之一:
/screen
选择类似于 Acrobat Distiller(最高版本 X)“屏幕优化”设置的低分辨率输出。/ebook
选择类似于 Acrobat Distiller(最高版本 X)“电子书”设置的中等分辨率输出。/printer
选择类似于 Acrobat Distiller“打印优化”(最高版本 X)设置的输出。/prepress
选择类似于 Acrobat Distiller“印前优化”(最高版本 X)设置的输出。/default
选择旨在用于广泛用途的输出,可能会以更大的输出文件为代价。
每个这些的确切设置,包括它们的 DPI 值,显示在此表中的几十个选项中:https : //www.ghostscript.com/doc/current/VectorDevices.htm#distillerparams。
don*_*oey 226
我最喜欢的方法是将 PDF 转换为 PostScript,然后再转换回来。不过,它并不总是有效,但是当它有效时,结果很好:
ps2pdf input.pdf output.pdf
Run Code Online (Sandbox Code Playgroud)
正如评论中所建议的,这也直接适用于 PDF。
一些用户在使用电子书设置时也报告了更多成功,如下所示:
ps2pdf -dPDFSETTINGS=/ebook input.pdf output.pdf
Run Code Online (Sandbox Code Playgroud)
v2r*_*v2r 217
aking1012 是对的。有了关于可能的嵌入图像、超链接等的更多信息,回答这个问题会容易得多!
这里有几个脚本和命令行解决方案。请按您认为合适的方式使用。
som*_*onr 177
如果您有一个带有扫描图像的pdf,您可以使用convert
(ImageMagick) 创建一个带有jpeg 压缩的 pdf (您可以在任何 pdf 上使用此方法,但您会丢失所有文本信息)。
例如:
convert -density 200x200 -quality 60 -compress jpeg input.pdf output.pdf
Run Code Online (Sandbox Code Playgroud)
根据您的需要调整参数
我能够为扫描/拍摄的文档实现很高的压缩率(取决于设置)。根据文档来源,您可能希望降低颜色深度(-depth
参数)。
小智 55
我需要缩小包含文档全彩色扫描的 PDF。就文件而言,我的每一页都是全彩色图像。它们是包含文本和图像的页面图像,但它们是通过扫描到图像而创建的。
我使用了以下 ghostscript 命令和另一个线程中的一个组合。
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dDownsampleColorImages=true \
-dColorImageResolution=150 -dNOPAUSE -dBATCH -sOutputFile=output.pdf input.pdf
Run Code Online (Sandbox Code Playgroud)
这将图像分辨率降低到 150dpi,将我的文件大小减少了一半。查看文档,几乎没有明显的图像质量损失。文本在我的 2012 Nexus7 上仍然完全可读。
Oli*_*Oli 33
#!/bin/sh
gs -q -dNOPAUSE -dBATCH -dSAFER \
-sDEVICE=pdfwrite \
-dCompatibilityLevel=1.3 \
-dPDFSETTINGS=/screen \
-dEmbedAllFonts=true \
-dSubsetFonts=true \
-dColorImageDownsampleType=/Bicubic \
-dColorImageResolution=72 \
-dGrayImageDownsampleType=/Bicubic \
-dGrayImageResolution=72 \
-dMonoImageDownsampleType=/Bicubic \
-dMonoImageResolution=72 \
-sOutputFile=out.pdf \
$1
Run Code Online (Sandbox Code Playgroud)
您可以对其进行一些自定义以使其更具可重用性,但如果您只有一个 pdf,则只需将其替换$1
为您的 pdf 文件名并将其塞入终端即可。
Jav*_*era 26
我通常使用 ps2pdf 来执行此操作(更简单的语法),如下所示:
ps2pdf -dPDFSETTINGS=/ebook BiggerPdf SmallerPDF
Run Code Online (Sandbox Code Playgroud)
我使用以下 python 脚本来减小生产服务器 (8.04) 目录中所有 pdf 文件的大小。所以它应该工作。
#!/usr/bin/python
import os
for fich in os.listdir('.'):
if fich[-3:]=="pdf":
os.system("ps2pdf -dPDFSETTINGS=/ebook %s reduc/%s" % (fich,fich))
Run Code Online (Sandbox Code Playgroud)
小智 26
这将有一个很好的结果。
小智 17
最适合我的是
convert -compress Zip -density 150x150 input.pdf output.pdf
Run Code Online (Sandbox Code Playgroud)
其他方法:
#### gs
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf $INPUTFILE
### pdf2ps && ps2pdf
pdf2ps input.pdf output.ps && ps2pdf output.ps output.pdf
### Webservice
http://compress.smallpdf.com/de
Run Code Online (Sandbox Code Playgroud)
问候
小智 11
我强烈推荐pdfsizeopt。
这是减少大小比以前的CLI和GUI的软件,我已经试过的方面更有效(包括convert
,gs
,pdftk
等) -尽管可能较慢的pngout
激活- ,并且没有他们的一些问题(不严重像素化/退化的图像,不会丢失元数据,例如目录等)。
现在,如果您需要达到一定的尺寸,无论后果如何(包括将图像降级到不可读的程度),它可能不是您需要的工具,而是作为一种始终有效的首选解决方案,以减少不必要的大尺寸在不损失可读性、信息和可接受的图像质量的情况下,我认为这是最好的选择。(注意:我倾向于在 Adobe Acrobat 中首次进行矢量化 OCR 后使用它[该功能以前称为“CleanScan”],这会对某些扫描的文本文档产生巨大的尺寸影响。)
我推荐通用的 Unix 安装:
下载并安装可执行文件:
curl -L -o https://raw.githubusercontent.com/pts/pdfsizeopt/master/pdfsizeopt.single
chmod +x pdfsizeopt.single
cp pdfsizeopt.single /usr/local/bin/pdfsizeopt
Run Code Online (Sandbox Code Playgroud)
用法:
pdfsizeopt original.pdf [compressed.pdf]
Run Code Online (Sandbox Code Playgroud)
找到这篇文章的Mac用户(或 Linuxbrew 用户)请注意:有一个 Homebrew 安装公式:
brew install --HEAD pts/utils/pdfsizeopt
Run Code Online (Sandbox Code Playgroud)
小智 6
控制压缩质量:
#!/bin/sh
INPUT=$1; shift
OUTPUT=$1; shift
GS_BIN=/usr/bin/gs
QFACTOR="0.40"
# Image Compression Quality
#
# Quality HSamples VSamples QFactor
# Minimum [2 1 1 2] [2 1 1 2] 2.40
# Low [2 1 1 2] [2 1 1 2] 1.30
# Medium [2 1 1 2] [2 1 1 2] 0.76
# High [1 1 1 1] [1 1 1 1] 0.40
# Maximum [1 1 1 1] [1 1 1 1] 0.15
${GS_BIN} -dBATCH -dSAFER -DNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=${OUTPUT} -c "<< /ColorImageDict << /QFactor ${QFACTOR} /Blend 1 /HSample [1 1 1 1] /VSample [1 1 1 1] >> >> setdistillerparams" -f ${INPUT}
Run Code Online (Sandbox Code Playgroud)
对我来说,gsscreen
选项太糟糕了,而且ebook
太大了。
我的原始文档包含彩色文本和黑白图像(取决于页面)。
我提出的最佳解决方案是:
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dDownsampleColorImages=true -dDownsampleGrayImages=true -dDownsampleMonoImages=true -dColorImageResolution=130 -dGrayImageResolution=130 -dMonoImageResolution=130 -r130 -dNOPAUSE -dBATCH -sOutputFile=output_lr.pdf input.pdf
Run Code Online (Sandbox Code Playgroud)
请注意,压缩级别不是线性的。如果我指定 135,它不会被压缩,我确实发现 130 是(在我的情况下)实现压缩的最大分辨率。
小智 5
由于当我在谷歌中搜索时,这个链接是我的第一个链接,所以我想我应该再添加一个可能性。对于从 Inkscape (15 mb) 导出的 pdf,上述解决方案都不适合我,但我最终能够通过在 GIMP 中打开它并再次导出为 pdf 将其缩小到 1 mb。
另一个接近的选项(但文本有点模糊)是 ImageMagick 的转换实用程序:
convert -compress Zip input.pdf output.pdf
Run Code Online (Sandbox Code Playgroud)
小智 5
我面临着同样的问题,很高兴找到这个线程。具体来说,我有一个从扫描图像生成的 pdf,需要将其字节大小减少 6 倍。
不幸的是,上面的解决方案都不起作用:(。然后我意识到在扫描仪-> jpeg-> pdf过程中的某个地方页面的大小已经膨胀了大约4倍。我扫描的文档都是信纸大小的,但pdf的大小为
identify -verbose doc_orig.pdf | grep "Print size"
Print size: 35.4167x48.7222
Run Code Online (Sandbox Code Playgroud)
我最终使用“转换”命令获得了所需的结果,该命令同时执行调整大小和压缩步骤:
convert -density 135x135 -quality 70 -compress jpeg -resize 22.588% doc_orig.pdf doc_lowres.pdf
Run Code Online (Sandbox Code Playgroud)
请注意,doc_orig 的密度为 72x72 dpi。
参考这个答案和这个答案,在尝试了一堆答案之后,做了一堆研究和实验,我想出了以下几点。请注意,我已经删除了-dCompatibilityLevel=1.4
此处其他一些答案中使用的命令部分,因为此表表明1.5
或1.7
已在今天(2020 年 12 月 27 日)自动用于此设置,并且无需覆盖这些值。
gs
) 压缩input.pdf
成output.pdf
3 主要压缩级别:
注意:您还可以添加-dQUIET
以抑制所有输出到标准输出。请参阅:https : //www.ghostscript.com/doc/current/Use.htm。
gs -sDEVICE=pdfwrite -dPDFSETTINGS=/printer -dNOPAUSE -dBATCH \
-sOutputFile=output.pdf input.pdf
Run Code Online (Sandbox Code Playgroud)
gs -sDEVICE=pdfwrite -dPDFSETTINGS=/ebook -dNOPAUSE -dBATCH \
-sOutputFile=output.pdf input.pdf
Run Code Online (Sandbox Code Playgroud)
gs -sDEVICE=pdfwrite -dPDFSETTINGS=/screen -dNOPAUSE -dBATCH \
-sOutputFile=output.pdf input.pdf
Run Code Online (Sandbox Code Playgroud)
您还可以time
在命令前面添加以查看需要多长时间(这适用于任何Linux 命令)。示例输出:
$ time gs -sDEVICE=pdfwrite -dPDFSETTINGS=/ebook -dNOPAUSE -dBATCH -sOutputFile=out.pdf in.pdf
GPL Ghostscript 9.50 (2019-10-15)
Copyright (C) 2019 Artifex Software, Inc. All rights reserved.
This software is supplied under the GNU AGPLv3 and comes with NO WARRANTY:
see the file COPYING for details.
Processing pages 1 through 15.
Page 1
Loading NimbusSans-Regular font from /usr/share/ghostscript/9.50/Resource/Font/NimbusSans-Regular... 5205104 3852122 2872760 1487237 3 done.
Page 2
Page 3
Page 4
Page 5
Page 6
Page 7
Page 8
Page 9
Page 10
Page 11
Page 12
Page 13
Page 14
Page 15
real 0m1.326s
user 0m1.142s
sys 0m0.048s
Run Code Online (Sandbox Code Playgroud)
如果添加-dQUIET
到命令中,则不会显示任何Ghostscript 输出,并且您会得到以下信息(time
在前面使用时):
$ time gs -sDEVICE=pdfwrite -dPDFSETTINGS=/ebook -dNOPAUSE -dBATCH -dQUIET -sOutputFile=out.pdf in.pdf
real 0m1.018s
user 0m0.976s
sys 0m0.040s
Run Code Online (Sandbox Code Playgroud)
您还可以使用ps2pdf
,它是 的包装器gs
,并产生非常相似但不完全相同的结果。但是,我更喜欢gs
直接使用,如上所示。
ps2pdf -dPDFSETTINGS=/printer input.pdf output.pdf
Run Code Online (Sandbox Code Playgroud)
ps2pdf -dPDFSETTINGS=/ebook input.pdf output.pdf
Run Code Online (Sandbox Code Playgroud)
ps2pdf -dPDFSETTINGS=/screen input.pdf output.pdf
Run Code Online (Sandbox Code Playgroud)
gs
在pdf2searchablepdf
此处对我的脚本的输出测试上述命令,我看到以下内容:
gs
) 文档:对于所有可用的-d
(“ d
efine”)PDFSETTINGS
,请参见此处:https : //www.ghostscript.com/doc/current/VectorDevices.htm#PSPDF_IN 。我已经引用了下面的那部分内容,但我已将每个设置的 DPI 值添加为粗体,如从此处的表中获取的。您可以参考该表来查看gs
为每个PDFSETTINGS
选项选择的数十个较低级别的设置。
特定于 PostScript 和 PDF 输入的控件和功能
-dPDFSETTINGS=configuration
将“蒸馏器参数”预设为四个预定义设置之一:
/screen
(72 dpi)选择类似于 Acrobat Distiller(最高版本 X)“屏幕优化”设置的低分辨率输出。/ebook
(150 dpi)选择类似于 Acrobat Distiller(最高版本 X)“电子书”设置的中等分辨率输出。/printer
(300 dpi)选择类似于 Acrobat Distiller“打印优化”(最高版本 X)设置的输出。/prepress
(300 dpi)选择类似于 Acrobat Distiller“印前优化”(最高版本 X)设置的输出。/default
(72 dpi)选择旨在用于各种用途的输出,可能会以更大的输出文件为代价。
您还可以在此页面上查看各种选项的定义:https : //www.ghostscript.com/doc/current/Use.htm:
-dNOPAUSE
禁用每页末尾的提示和暂停。通常,-dBATCH
当在打印机上或文件上产生输出时,应该使用它(连同);对于另一个程序正在“驱动”Ghostscript 的应用程序,它也可能是可取的。
-dBATCH
导致 Ghostscript 在处理了命令行上命名的所有文件后退出,而不是进入交互式循环读取 PostScript 命令。相当于放在-c quit
命令行的末尾。
-dQUIET
禁止对标准输出进行常规信息注释。当前将设备输出重定向到标准输出时,这是必需的。