我有一个72.9MB的PDF文件,需要缩小到500KB以下。

文件是我扫描过的JPEG图像,然后转换为pdf。

评论

这取决于消耗空间的东西...需要更多信息。压缩图像空间可能会有所帮助,但是如果您尝试使用大文件堆喷雾,那将无法正常工作。严重需要更多信息。

将其转换为DjVu,而不是尝试缩小为不可能的大小PDF(根据来源)

它似乎只有助于文件大小调整,但是pdfopt具有简单的语法并提高了iPad时代的加载和翻页速度。 :-)

相关(可能重复吗?):减少扫描的PDF的文件大小

缩小重复扫描的PDF文件大小的可能性。

#1 楼

aking1012是正确的。有了有关可能的嵌入式图像,超链接等的更多信息,回答此问题会容易得多!

这里有两个脚本和命令行解决方案。视需要使用。



reduce-pdf-file-size-linux

shrinkpdf
compress-a-pdf- with-pdftk
pdfcompress


评论


非常感谢您的建议,ghostscript shell创造了奇迹,并将其压缩到460KB :)

– Tamimym
2012年3月16日19:56

我建议您使用rinklepdf.sh脚本,您可以自定义代码以使用所需的ppi值(默认为72),并精确达到需要牺牲最低质量的文件大小。这使我能够上传最大11 MB的扫描文档。 3 MB的大小而不会损失很多质量。

– Severo Raz
16年4月9日在22:18

收缩pdf效果很好!

– AmanicA
17年2月22日在22:14

OP所指的ghostscript外壳在哪里?Askubuntu.com/questions/113544/…?

–user13107
18 Mar 5 '18在6:44



@ user13107这是答案-askubuntu.com/a/256449/171427

– callmekatootie
19年11月15日在17:21

#2 楼

请使用以下ghostscript命令:
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook \
-dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf

-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版之前)“ eBook”设置。

/printer选择类似于Acrobat Distiller“ Print Optimized”(X版之前)设置的输出。

q43 12079q选择类似于Acrobat Distiller“ Prepress Optimized”(直到X版本)设置的输出。

/prepress选择旨在广泛用于各种用途的输出,可能以较大的输出文件为代价..


下表中的许多选项中显示了每个参数的确切设置,包括其DPI值:https://www.ghostscript.com/doc/current /VectorDevices.htm#distillerparams。

评论


这应该是公认的答案。 ghostscript是适用于unices的PDF,XPS和PS实现,基本上可以完成所有提供最佳质量的操作...

–dom0
13年10月2日在17:27

@Sina:实际上有一个Nautilus脚本,带有一个简单的基于Zenity的GUI,该脚本利用此gs命令及其所有质量级别选项:launchpad.net/compress-pdf

– Sadi
13-10-25在11:47



这是此问题的正确答案(压缩主要是位图数据的pdf)。我发现屏幕设置对我来说质量太低,但是电子书效果很好,将基于扫描的33Mb PDF缩减为3.6Mb,并保持了很好的可读性。 -dPDFSETTINGS选项的其他选项在此处列出:milan.kupcevic.net/ghostscript-ps-pdf,将它们包括在此答案中可能是一个好主意。

–naught101
2014年12月2日,1:13

gs可用的配置参数:ghostscript.com/doc/current/Ps2pdf.htm

– Antonios Hadjigeorgalis
2014年12月11日23:41

在17.10上它将42 mb pdf转换为127 mb :(

– Yas Chaudhary
17-10-23在3:24

#3 楼

我最喜欢的方法是将pdf转换为ps并返回。但是,它并不总是有效,但是当它起作用时,效果很好:

ps2pdf input.pdf output.pdf


这也直接适用于pdf格式,如注释中所建议。

有些用户在使用如下电子书设置时也报告了更多的成功:

ps2pdf -dPDFSETTINGS=/ebook input.pdf output.pdf 


评论


这是一种非常简单有效的方法。我很惊讶地看到这种方法压缩了多少文件。谢谢!

–加百列
13年4月8日在12:59

尽管事实上这种方法成为我最喜欢的压缩pdf文件的解决方案,但它破坏了文档可能具有的url链接(@Michael D的方法没有这种情况)。除此之外,我能想到的就是运行这段代码了! (:

–鲁本斯
2013年12月6日11:01



这绕过密码保护...只是说

– jojo
15年1月6日在20:28

ps2pdf将pdfs作为输入,因此您可以一步完成:ps2pdf intput.pdf output.pdf

–frabjous
16年9月1日在19:19

它不起作用(84 MB→82 MB),但是ps2pdf -dPDFSETTING = / ebook in.pdf out.pdf,如@PabloBianchi所建议的那样,导致272 kB!非常感谢 !

–FrédéricGrosshans
19 Mar 17 '19 at 17:32

#4 楼

如果您有包含扫描图像的pdf,则可以使用convert(ImageMagick)创建具有jpeg压缩的pdf(您可以在任何pdf上使用此方法,但是会丢失所有文本信息)。
例如:
convert -density 200x200 -quality 60 -compress jpeg input.pdf output.pdf

根据需要调整参数


-密度:像素密度(以dpi为单位)(例如100x100)。更高的像素密度可提高质量和尺寸

-quality:压缩率。对于jpg,其质量介于1到100之间,质量最好,但压缩率最低。

-compress:压缩算法。由于压缩伪像,jpeg压缩可能不是最佳选择。您可以选择BZip,传真,Group4,JPEG,JPEG2000,无损,LZW,RLE或Zip作为替代压缩方法(有些仅允许黑白图像)。

扫描/照相文档的压缩率(取决于设置)。根据文档来源,您可能需要减小颜色深度(-depth参数)。

评论


对于扫描的文档,其中的文本是您感兴趣的,而不是图像,并且保留深度不是问题,因此jpeg压缩不是一个好主意,因为这些工件通常非常引人注目。如果使用pdfimages input.pdf页面提取pbm文件,则可以执行以下操作:* .pbm中的页面;转换$ page -compress Group4 -type二级TIFF:转换-输出.pdf。任何OCR都会丢失,因此我通常会随后执行pdfsandwich output.pdf,这似乎进一步减小了文件大小。

– Brian Z
2015年5月4日,11:57

@BrianZ确保jpeg压缩并不总是最佳选择,但对我来说,这是混合类型文档的最佳方法。我在答案中添加了有关其他压缩方法的一些信息。

– Someonr
2015年5月6日23:43

该方法最终在后台使用gs。

– alfC
2015年6月12日下午4:55

我必须对选项使用双破折号来运行--density --quality --compress vs -density -quality -compress命令。

–罗塔雷蒂
16年11月10日在18:22

如果不是最关注图像质量(并且您只想使当当电子邮件附件小到可以发送),则也可以添加-resize 50%,根据扫描时使用了多少DPI来更改百分比

–chrki
17年1月11日,0:45

#5 楼

我需要缩小包含文档全彩色扫描的PDF的大小。就文件而言,我的每一页都是全彩色图像。它们是包含文本和图像的页面的图像,但是它们是通过扫描到图像而创建的。

我使用了下面的ghostscript命令和另一个线程中的一个的组合。

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dDownsampleColorImages=true \
-dColorImageResolution=150 -dNOPAUSE  -dBATCH -sOutputFile=output.pdf input.pdf


这将图像分辨率降低到150dpi,将文件大小减少了一半。查看文档,几乎没有图像质量明显下降。在我的2012 Nexus7上,文本仍可完美阅读。

评论


+1用于向下采样图像,但将文本保留为矢量。在没有使我的文本像素化的情况下,在侧面上产生了巨大的变化。

–詹森·奥尼尔(Jason O'Neil)
2014年12月8日在8:34

神奇的是,可以使用此命令来调整分辨率-与仅使用dPDFSETTINGS = \ screen相比,这给了我更好的结果

–兑换
19年5月13日在10:04

另请参阅:stackoverflow.com/questions/9497120/…

– Sanmai
8月12日8:44

#6 楼

这是重写扫描的pdf的脚本:

#!/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 \
     


您可以对其进行一些自定义以使其更可重用,但是如果只有一个pdf,则可以替换与您的pdf文件名并在终端中将其绑定。

评论


工作请客,谢谢奥利。到目前为止,您已经回答了我在这里要求的几乎所有内容:-D

–罗布·考威尔
2010年9月1日上午8:15

这是一个很好的答案,但就我而言,至少要花费大量时间来转换较大的(> 10Mb)PDF文件(超过一分钟)。

–加百列
2013年6月12日19:20在

我不确定会发生什么,但是30 MB的PDF会产生68 MB的文件。而不是减少,它扩大。如果直接使用ps2pdf(如下一个答案中所述),则输出相同。

– Ed Villegas
13年6月23日在18:08

@EdVillegas我唯一能想到的(解释这种增加)是图像的分辨率低于生成的图像(72dpi)。或以某种方式嵌入字体会吸收所有字体。

–奥利♦
2013年6月25日7:31

使用pdfimages -list file.pdf查看本机图像分辨率。

–vstepaniuk
5月21日10:53

#7 楼

我通常使用ps2pdf来做到这一点(更轻松的语法),就像这样:

ps2pdf -dPDFSETTINGS=/ebook BiggerPdf SmallerPDF


我使用以下python脚本来减小文件中所有pdf文件的大小生产服务器中的目录(8.04)。所以应该可以。

#!/usr/bin/python

import os

for fich in os.listdir('.'):
        if fich[-3:]=="pdf":
                os.system("ps2pdf -dPDFSETTINGS=/ebook %s reduc/%s" % (fich,fich))


评论


感谢您提供替代解决方案。我尝试了Oli的第一个,它给了我所需的结果,但是我也会保留这个以供将来参考。

–罗布·考威尔
2010年9月1日上午8:17

-dPDFSETTINGS = / printer选项调整50%的大小。电子书可以调整90%的大小。

– neouyghur
18年4月13日在6:08

#8 楼


我使用LibreOffice Draw打开pdf。
然后“导出为pdf”
,将“ jpeg压缩质量”设置为50%,将“图像分辨率”设置为
150 dpi

这会产生很好的结果。

评论


最糟糕的解决方案!这完全弄乱了我的文件!

–user783132
18年1月15日在16:31

对我而言,此解决方案是最佳解决方案,仅需根据要执行的操作对其进行配置。使用此设置为我工作时,“ jpeg压缩质量”为83%,“图像分辨率”为150 dpi

– IndacocheaWachín
6月3日14:39



#9 楼

最适合我的是

convert -compress Zip -density 150x150 input.pdf output.pdf


其他方式:

#### 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


注意事项

评论


很好的解决方案。易于记忆,它使我的pdf从32 MB增加到3.5 MB,而没有明显的可读性损失。

– Immanuel Weihnachten
18年3月17日在9:57

我喜欢第二种方式pdf2ps input.pdf temp.ps && ps2pdf14 temp.ps output.pdf && rm temp.ps

– McPeppr
18年11月6日在21:16



#10 楼

我强烈建议使用pdfsizeopt。
在减小大小方面,它比我尝试过的任何以前的CLI和GUI软件(包括convertgspdftk等)要高效得多-尽管激活pngout可能会更慢—并且没有任何问题(没有严重的像素化/降级的图像,没有丢失目录等元数据等)。
现在,如果您需要达到一定的大小,无论后果如何(将图片降级到无法读取的程度),它可能不是您所需要的工具,但作为始终有效的解决方案,它可以减少PDF中不必要的大尺寸而又不会降低可读性,信息和可接受的图像质量,认为这是最好的选择。 (注意:我倾向于先在Adobe Acrobat中完成矢量化-OCR [该功能以前称为“ CleanScan”],然后使用它,这会对某些扫描的文本文档产生巨大的影响。)

我建议通用的Unix安装:

安装所有必需的依赖项:


Ghostscript
jbig2
pngout
png22pnm
sam2p




下载并安装可执行文件:
 curl -L -o https://raw.githubusercontent.com/pts/pdfsizeopt/master/pdfsizeopt.single
 chmod +x pdfsizeopt.single
 cp pdfsizeopt.single /usr/local/bin/pdfsizeopt



用法:
pdfsizeopt original.pdf [compressed.pdf]


Mac用户找到这篇文章的注意事项(或Linuxbrew用户):有一个Homebrew安装公式:
brew install --HEAD pts/utils/pdfsizeopt


评论


什么软件的奇异宝石!非常感谢您推荐这个:-)

–luca76
19年11月13日在13:39

没有运气。在我的pdf2searchablepdf脚本中的3.8 MB 3pg 300 DPI输出PDF文件上运行pdfsizeopt,大小保持为3.8 MB(全部减小了几KB)。

–加百利·斯台普斯
12月27日,3:51



#11 楼

我本人只是遇到了这个问题。如果使用简单扫描,请为低分辨率扫描选择文本模式,而无需担心命令行内容。只是说而已。

评论


这是该线程中解决我问题的唯一答案。我对Simplescan轻描淡写,但这确实是我的答案,而不是在似乎无尽的痛苦中与Xsane对抗。

–versvs
15年8月31日在16:03

#12 楼

由于此链接是我在Google上搜索时最先找到的,所以我想再增加一种可能性。以上解决方案均不适用于从Inkscape导出的pdf(15 mb),但是我终于能够通过在GIMP中打开它并将其缩小为1 mb,然后再次导出为pdf。

另外一个接近的选项(但是文本有点模糊)是ImageMagick的convert实用程序:

convert -compress Zip input.pdf output.pdf


评论


我想这就是您所说的“有点模糊”的意思,但是为了澄清起见,convert -compress Zip似乎可以光栅化所有矢量。

– Sparhawk
15年2月22日在3:39

#13 楼

控制压缩质量:

 #!/bin/sh
INPUT=; shift
OUTPUT=; 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}
 


评论


...所以INPUT和OUTPUT是同一个参数?您可能要添加使用准则。

–无论如何
16-4-2在11:46

注意转变。第一个参数是输入文件,第二个参数是输出文件,其余参数将按原样传递给gs。

– Mikko Rantalainen
16年5月13日在12:53

我认为您需要/ HSamples和/ VSamples,而不是/ HSample和/ VSample。参见例如ps2pdf文档或PostScript语言参考手册。也许还值得注意的是,允许的QFactor范围是0到1,000,000,较低的值会产生较高的质量。

– Pont
17年8月2日在8:31

#14 楼

我遇到了同样的问题,很高兴找到这个线程。具体来说,我有一个从扫描图像生成的pdf,需要将其字节大小减小6倍。

不幸的是,上述解决方案均无效:(。然后,我意识到扫描仪中的某个位置-> jpeg-> pdf处理,页面大小因aprx 4而膨胀。我扫描的文档均为Letter大小,但pdf大小为

identify -verbose doc_orig.pdf | grep "Print size"
 Print size: 35.4167x48.7222


我最终通过“转换”命令获得了预期的结果,该命令在一个步骤中完成了调整大小和压缩步骤:

的72x72 dpi。

评论


您的答案是救生员,Kalpit。我也遇到了同样的问题,甚至没有其他问题影响文件大小。通过调整页面大小,我从40MB增长到2MB。欢呼!

–尼古拉斯·佩耶特(Nicolas Payette)
9月12日15:38

#15 楼

最后,我编写了自己的bash脚本来解决此问题,它使用mogrifyconvertgs将pdf页面提取为png,调整大小,将其转换为1位bmp,然后将其重建为pdf。文件大小减少可以超过90%。可从http://www.timedicer.co.uk/programs/help/pdf-compress.sh.php获得。

#16 楼

对我来说,gs screen选项太糟糕了,而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


请注意,压缩级别不是线性的。如果我指定135,则未压缩,我确实发现130是(以我为例)实现压缩的最大分辨率。

#17 楼

如果也可以转换为djvu并且不涉及任何颜色,则可以尝试以下操作:

使用pdfimages -j将pdf转换为jpg文件

如果获取pbm文件相反,您应该执行中间步骤:

for FILENAME in $(ls *.pbm); do convert $FILENAME ${FILENAME%.*}.jpg ;done

convert命令来自imagemagick软件包。

然后使用scantailor将tif取出

最后一步,是将direcory(tif所在的位置)扫描到尾部,并将djvubind应用于该目录。

这将大大减少文件大小,而不会造成大量文本质量损失。如果要更好地控制ocr后端,则可以尝试djvubind --no-ocr并使用ocrodjvu之后再添加ocr层。可以使用didjvu代替djvubind,而在scantailor中,您必须更改为混合模式并有时手动选择彩色图像。

#18 楼

将图像甚至pdf文件加载到inkscape中。

从inkscape中:以矢量格式保存(作为本机.svg)。

将矢量文件导入到scribus中,编辑布局,然后从中将其导出为.pdf

#19 楼

您可以尝试以下方法:

 $ time pdftk myFile.pdf output myFile__SMALLER.pdf compress
GC Warning: Repeated allocation of very large block (appr. size 16764928):
    May lead to memory leak and poor performance.
GC Warning: Repeated allocation of very large block (appr. size 8384512):
    May lead to memory leak and poor performance.
GC Warning: Repeated allocation of very large block (appr. size 11837440):
    May lead to memory leak and poor performance.
GC Warning: Repeated allocation of very large block (appr. size 8384512):
    May lead to memory leak and poor performance.
GC Warning: Repeated allocation of very large block (appr. size 33525760):
    May lead to memory leak and poor performance.
GC Warning: Repeated allocation of very large block (appr. size 7254016):
    May lead to memory leak and poor performance.
GC Warning: Repeated allocation of very large block (appr. size 34041856):
    May lead to memory leak and poor performance.
GC Warning: Repeated allocation of very large block (appr. size 33525760):
    May lead to memory leak and poor performance.

real    0m23.677s
user    0m23.142s
sys     0m0.540s
$ du myFile*.pdf
108M    myFile.pdf
74M     myFile__SMALLER.pdf
 


它比gs快,但压缩率高达30%这种情况适用于107.5MiB输入文件。

评论


我没有运气。在Ubuntu 20.04上,我的pdf2searchablepdf程序中的可搜索输出PDF文件上,输出文件的大小与输入文件相同。

–加百利·斯台普斯
12月24日晚上11:20

#20 楼

超级简单的PDF压缩工具:GitHub页面。

在Ubuntu上安装:

sudo add-apt-repository ppa:jfswitz/released

sudo apt-get update

sudo apt-get install pdf-compressor


它使用ghostscript。

评论


这是一个GUI工具,不是吗?

– HappyFace
9月22日13:19

#21 楼

我使用此zsh函数压缩扫描的文档:
pdf-compress-gray () {
    local input=""
    local out="${2:-${input:r}_cg.pdf}"
    local dpi="${pdf_compress_gray_dpi:-90}"

    gs -q -dNOPAUSE -dBATCH -dSAFER -sProcessColorModel=DeviceGray -sColorConversionStrategy=Gray -dDownsampleColorImages=true -dOverrideICC -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dColorImageDownsampleType=/Bicubic -dColorImageResolution=$dpi -dGrayImageDownsampleType=/Bicubic -dGrayImageResolution=$dpi -dMonoImageDownsampleType=/Bicubic -dMonoImageResolution=$dpi -sOutputFile="$out" "$input"
}

用法:
[pdf_compress_gray_dpi=100] pdf-compress-gray input.pdf [output.pdf]


#22 楼

我通常只是简单地使用
gs -dQUIET -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -dPDFSETTINGS=/printer \
   -sOutputFile=output.pdf input.pdf

,我遇到了很多问题,一个是如何减小AskUbuntu,Stack Overflow和Unix&Linux SE上pdf的大小,我想知道所有这些选项是什么
有些是与交互相关的参数:
-dQUIET
-dBATCH
-dNOPAUSE

有些是设备和输出选择参数:
-sDEVICE
-sOutputFile

有些是特定于设备的通用控件和功能PDFWRITE:
-r<resolution>
-dCompressFonts

这个重要的参数将Adobe记录的用于控制转换为PDF的文档参数“ Distiller Parameters”预设为四个预定义设置(屏幕,电子书,打印机,印前)之一
-dPDFSETTINGS

下表中所有以下项均根据-dPDFSETTINGS自动预设。 Kurt Pfeifle建议的命令可用于检查这些值。如果需要,可以对其进行微调:
-dCompatibilityLevel
-dAutoRotatePages
-dEmbedAllFonts
-dSubsetFonts
-sColorConversionStrategy
-dDownsampleColorImages
-dDownsampleGrayImages
-dDownsampleMonoImages
-dColorImageResolution
-dGrayImageResolution
-dMonoImageResolution
-dColorImageDownsampleType
-dGrayImageDownsampleType
-dMonoImageDownsampleType


#23 楼

引用此答案和此答案,并在这里尝试了一堆答案,并进行了大量研究和实验后,我提出了以下建议。请注意,我已经删除了此处其他一些答案中使用的命令的-dCompatibilityLevel=1.4部分,因为此表表明1.51.7在今天(2020年12月27日)已自动用于此设置,并且无需覆盖这些值。 br />使用Ghostscript(gs)将input.pdf压缩为output.pdf

3主要压缩级别:注意:您还可以添加-dQUIET来禁止所有输出到stdout。请参阅:https://www.ghostscript.com/doc/current/Use.htm。


低压缩率:300 dpi(大文件大小)
 gs -sDEVICE=pdfwrite -dPDFSETTINGS=/printer -dNOPAUSE -dBATCH \
-sOutputFile=output.pdf input.pdf
 


[我的测试中最佳]中级压缩(推荐):150 dpi(中等文件大小)
 gs -sDEVICE=pdfwrite -dPDFSETTINGS=/ebook   -dNOPAUSE -dBATCH \
-sOutputFile=output.pdf input.pdf
 



高压缩率:72 dpi(小文件大小-在某些情况下可能会产生粗糙或不可读的结果,因此请尝试并试一试)
 gs -sDEVICE=pdfwrite -dPDFSETTINGS=/screen  -dNOPAUSE -dBATCH \
-sOutputFile=output.pdf input.pdf
 



还可以在命令前面添加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
 

如果将-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
 

您还可以使用ps2pdf,它是gs的包装,并且产生的效果非常相似,但结果并不完全相同。我更喜欢直接使用gs,如上所示。

低压缩率:300 dpi(大文件大小)
 ps2pdf -dPDFSETTINGS=/printer input.pdf output.pdf
 


中压缩(推荐):150 dpi(中文件大小)
 ps2pdf -dPDFSETTINGS=/ebook   input.pdf output.pdf
 


高压缩率:72 dpi(小文件大小-在某些情况下可能会产生颗粒状或无法读取的结果,因此请尝试并尝试一下)
 ps2pdf -dPDFSETTINGS=/screen  input.pdf output.pdf
 



PDF压缩测试
测试gs上面关于我的pdf2searchablepdf脚本输出的命令,我看到以下内容:低压缩:没有明显影响,因为我的脚本已经产生300 dpi输出PDF。因此,一个3.8 MB的3 pg输入PDF会导致〜3.8MB的输出PDF。
[BEST]中压缩:很好地压缩文件! 3.8 MB 3 pg输入PDF导致输出PDF约为0.95MB。
高压缩率:可能太多。 3.8 MB 3 pg输入PDF导致输出PDF约为0.37MB,但在我的特定测试中,这是完全不可读的,因为开始时输入PDF的分辨率已经很差。如果您从高质量/高分辨率输入PDF开始,您可能会得到更好的可读性结果。

Ghostscript(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版本)“ eBook”设置的中分辨率输出。

/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
禁止在标准输出上显示常规信息注释。当前将设备输出重定向到标准输出时,这是必需的。


#24 楼

我用下面的命令,但它并没有实质性地压缩我的pdf文件。有时,压缩后部分会变黑。


gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf $INPUTFILE
"ps2pdf -dPDFSETTINGS=/ebook %s %s" % (input_file_path, out_file_path)

在网上徘徊了太多之后,我只是找不到合适的压缩库。我遇到pdfcompressor.com。这是一个很棒的网站。它将pdf压缩95%(文件15Mb)。因此,我使用了硒和Tor来自动执行压缩。检出我的Github存储库。
[GITHUB](https://github.com/gugli28/PdfCompressor)