如何减小扫描的PDF文件的文件大小?


372

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

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


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

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

该文件是我扫描过的jpeg图像,然后转换为pdf。
tamimym 2012年

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

1
PDF至PS在扫描的PDF文件中无效,我尝试将56 MB pdf转换为ps文件,但ps文件转换为1.3 GB,然后再次将ps2pdf转换为45 MB文件

Answers:


145

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

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


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

不一定是真的。如果内容从图像变为文本,那就不可行了。[这是假设该文本正确出现了]
僧侣

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

4
收缩pdf效果很好!
AmanicA

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

519

使用以下ghostscript命令:

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf
  • -dPDFSETTINGS=/screen质量较低,尺寸较小。(72像素
  • -dPDFSETTINGS=/ebook以获得更好的质量,但pdf略大。(150 dpi的分辨率
  • -dPDFSETTINGS=/prepress输出类似于Acrobat Distiller的“印前优化”设置(300 dpi
  • -dPDFSETTINGS=/printer选择类似于Acrobat Distiller“打印优化”设置(300 dpi)的输出
  • -dPDFSETTINGS=/default 选择旨在广泛用于各种用途的输出,可能以较大的输出文件为代价

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

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

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


3
在17.10上它制作了42 mb pdf到127 mb的视频:(
YaSh Chaudhary

156

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

ps2pdf input.pdf output.pdf

如评论中所建议的,这也直接适用于pdf。

某些用户在使用电子书设置时还报告了更多成功,如下所示:

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

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

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

1
@鲁本斯 不知道它破坏了URL链接的事实。感谢您添加。
don.joey 2013年

3
这会绕过密码保护...只是
说说而已

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

127

如果您有包含扫描图像pdf,则可以convert用来创建具有jpeg压缩的pdf (您可以在任何pdf上使用此方法,但是会丢失所有文本信息)。

例如:

convert -density 200x200 -quality 60 -compress jpeg input.pdf output.pdf

根据需要调整密度(例如100x100)和质量

根据您的输入,由于压缩伪像,jpeg 压缩可能不是最佳选择。您可以在BZip,传真,Group4,JPEG,JPEG2000,无损,LZW,RLE或Zip之间进行选择作为替代压缩方法(有些仅允许黑白图像)。有关详细信息,请参见此处

对于扫描/拍摄的文档,我能够达到很高的压缩率(取决于设置)。根据文档来源,您可能需要减小颜色深度(-depth参数)。


3
对于您感兴趣的文本而不是图像和保留深度的扫描文档而言,jpeg压缩不是一个好主意,因为这些工件往往非常引人注目。如果您用于pdfimages input.pdf pages提取pbm文件,则可以执行以下操作: for page in *.pbm; do convert $page -compress Group4 -type bilevel TIFF:- | convert - output.pdf。任何OCR都会丢失,所以我通常会这样做pdfsandwich output.pdf,这似乎进一步减小了文件大小。
布赖恩·Z

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

2
该方法最终gs在幕后使用。
alfC

2
我不得不使用双破折号的选项来运行该命令--density --quality --compressVS -density -quality -compress
Rotareti

1
如果不是最关注图像质量(并且您只想使当下的电子邮件附件足够小以进行发送),则可能还会添加图像-resize 50%,请更改百分比,具体取决于扫描时使用了多少DPI
chrki

41

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

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

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

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


3
+1用于向下采样图像,但保持文本为矢量。在没有使我的文本像素化的情况下,在侧面上产生了巨大的变化。
杰森·奥尼尔

令人惊讶的是,您可以使用此命令来调整分辨率-与仅使用dPDFSETTINGS = \ screen相比,这给我带来了更好的结果
交换

29

这是重写扫描的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 \
     $1

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


1
工作请客,谢谢奥利。到目前为止,您已经回答了我所问的几乎所有问题:-D
Rob Cowell,2010年

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

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

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

21

我通常使用ps2pdf来执行此操作(更简单的语法),如下所示:

ps2pdf -dPDFSETTINGS=/ebook BiggerPdf SmallerPDF

我使用以下python脚本来减少生产服务器(8.04)中dir中所有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))

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

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

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

这样会有很好的效果。


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

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

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

5

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


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

4

控制压缩质量:

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

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

2
注意shift。第一个参数是输入文件,第二个参数是输出文件,其余参数将按gs原样传递给。
Mikko Rantalainen '16

我想你想/ HSample 小号和/ VSample 小号,不/ HSample和/ VSample。参见例如ps2pdf docs或PostScript语言参考手册。也许还值得注意的是,允许的QFactor范围是0到1,000,000,较低的值会产生较高的质量。

3

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

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

convert -compress Zip input.pdf output.pdf

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


3

我强烈推荐pdfsizeopt

这是更有效的减少大小比我曾尝试任何以前的CLI及GUI软件(包括而言convertgspdftk,等) -尽管有可能慢pngout启动- ,并且没有他们的一些问题(不严重像素化/降级的图像,不丢失书签等)。

现在,如果您要获得某种尺寸的结果(包括将图像降级到无法读取的程度),它可能不是您所需要的工具,而是作为始终可行的解决方案,以减少不必要的大尺寸在PDF中又不会失去可读性,信息和可接受的图像质量,我认为这是最好的选择。(注意:我倾向于先在Adobe Acrobat中完成矢量化-OCR [此功能以前称为“ CleanScan”],然后使用它,这会对某些扫描的文本文档产生巨大的影响。)


我推荐通用的Unix安装

  1. 安装所有必需的依赖项:

  2. 下载并安装可执行文件:

    curl -L -o https://raw.githubusercontent.com/pts/pdfsizeopt/master/pdfsizeopt.single
    cp pdfsizeopt.single /usr/local/bin/pdfsizeopt
    

用法:

pdfsizeopt original.pdf [compressed.pdf]

Mac用户找到这篇文章时的注意事项(或Linuxbrew用户):有一个Homebrew安装公式:

brew install --HEAD pts/utils/pdfsizeopt

2

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

不幸的是,以上解决方案均无效:(。然后,我意识到在scan-> jpeg-> pdf进程中某处的页面大小已经膨胀了aprx4。我扫描的文档都是Letter大小的,但pdf的大小为

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

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

convert -density 135x135 -quality 70 -compress jpeg -resize 22.588% doc_orig.pdf doc_lowres.pdf

请注意doc_orig的密度为72x72 dpi。


1

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

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

如果获取的是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层。

如果您的文档中有颜色,事情会变得更加复杂。取而代之的djvubind你可以使用didjvu和scantailor你必须改变混合模式和手动选择有时彩色图像。


1

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

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

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


0

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

在Ubuntu上安装:

sudo add-apt-repository ppa:jfswitz/released

sudo apt-get update

sudo apt-get install pdf-compressor

它使用ghostscript。


0

您可以尝试以下方法:

$ 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

它比gs107.5MiB输入文件要快,但在这种情况下最多可压缩30%。


0

对我来说,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是(在我的情况下)实现压缩的最大分辨率。


-1

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

  1. gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf $INPUTFILE

  2. "ps2pdf -dPDFSETTINGS=/ebook %s %s" % (input_file_path, out_file_path)

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.