我有一个72.9MB的PDF文件,我需要缩小到500KB以下。
该文件是我扫描过的JPEG图像,然后转换为pdf。
pdfopt
语法简单,可提高iPad时代的加载和翻页速度。:-)
我有一个72.9MB的PDF文件,我需要缩小到500KB以下。
该文件是我扫描过的JPEG图像,然后转换为pdf。
pdfopt
语法简单,可提高iPad时代的加载和翻页速度。:-)
Answers:
aking1012是正确的。有了有关可能的嵌入式图像,超链接等的更多信息,回答此问题会容易得多!
这里有一些脚本和命令行解决方案。视需要使用。
使用以下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
选择旨在广泛用于各种用途的输出,可能以较大的输出文件为代价screen
设置对我来说太低了,但是ebook
效果很好,将基于扫描的33Mb PDF缩减为3.6Mb,并保持了很好的可读性。该-dPDFSETTINGS
选项的其他选项在此处列出:milan.kupcevic.net/ghostscript-ps-pdf,将它们包括在此答案中可能是一个好主意。
我最喜欢的方法是将pdf转换为ps并返回。虽然它并不总是有效,但是当它起作用时,效果很好:
ps2pdf input.pdf output.pdf
如评论中所建议的,这也直接适用于pdf。
某些用户在使用电子书设置时还报告了更多成功,如下所示:
ps2pdf -dPDFSETTINGS=/ebook input.pdf output.pdf
ps2pdf intput.pdf output.pdf
如果您有包含扫描图像的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
参数)。
pdfimages input.pdf pages
提取pbm文件,则可以执行以下操作: for page in *.pbm; do convert $page -compress Group4 -type bilevel TIFF:- | convert - output.pdf
。任何OCR都会丢失,所以我通常会这样做pdfsandwich output.pdf
,这似乎进一步减小了文件大小。
gs
在幕后使用。
--density --quality --compress
VS -density -quality -compress
。
-resize 50%
,请更改百分比,具体取决于扫描时使用了多少DPI
我需要缩小包含文档全彩色扫描的PDF的大小。就文件而言,我的每一页都是全彩色图像。它们是包含文本和图像的页面的图像,但是它们是通过扫描图像来创建的。
我使用下面的ghostscript命令和另一个线程的组合。
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dDownsampleColorImages=true \
-dColorImageResolution=150 -dNOPAUSE -dBATCH -sOutputFile=output.pdf input.pdf
这将图像分辨率降低到150dpi,将文件大小减少了一半。查看文档,几乎没有图像质量明显下降。在我的2012 Nexus7上,文本仍可完美阅读。
#!/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文件名,并在终端中将其绑定。
我通常使用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))
最适合我的是
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
问候
pdf2ps input.pdf temp.ps && ps2pdf14 temp.ps output.pdf && rm temp.ps
控制压缩质量:
#!/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}
shift
。第一个参数是输入文件,第二个参数是输出文件,其余参数将按gs
原样传递给。
最后,我编写了自己的bash脚本来解决此问题,它使用mogrify
,convert
并将gs
pdf页面提取为png,调整大小,将其转换为1位bmp,然后将其重建为pdf。文件大小减少可以超过90%。可从http://www.timedicer.co.uk/programs/help/pdf-compress.sh.php获得。
我强烈推荐pdfsizeopt。
这是更有效的减少大小比我曾尝试任何以前的CLI及GUI软件(包括而言convert
,gs
,pdftk
,等) -尽管有可能慢pngout
启动- ,并且没有他们的一些问题(不严重像素化/降级的图像,不丢失书签等)。
现在,如果您要获得某种尺寸的结果(包括将图像降级到无法读取的程度),它可能不是您所需要的工具,而是作为始终可行的解决方案,以减少不必要的大尺寸在PDF中又不会失去可读性,信息和可接受的图像质量,我认为这是最好的选择。(注意:我倾向于先在Adobe Acrobat中完成矢量化-OCR [此功能以前称为“ CleanScan”],然后使用它,这会对某些扫描的文本文档产生巨大的影响。)
我推荐通用的Unix安装:
安装所有必需的依赖项:
下载并安装可执行文件:
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
我遇到了同样的问题,很高兴找到这个线程。具体来说,我有一个从扫描图像生成的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。
如果也可以转换为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你必须改变混合模式和手动选择有时彩色图像。
您可以尝试以下方法:
$ 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
107.5MiB输入文件要快,但在这种情况下最多可压缩30%。
对我来说,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是(在我的情况下)实现压缩的最大分辨率。
我用下面的命令,但它并没有实质性压缩我的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)