I have a 72.9 MB PDF file that I need to shrink to 500 KB or below.
The file was a JPEG image that I had scanned and then converted to PDF.
Use the following Ghostscript command:
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook \
-dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf
Summary of -dPDFSETTINGS
:
-dPDFSETTINGS=/screen
lower quality, smaller size. (72 dpi)-dPDFSETTINGS=/ebook
for better quality, but slightly larger pdfs. (150 dpi)-dPDFSETTINGS=/prepress
output similar to Acrobat Distiller "Prepress Optimized" setting (300 dpi)-dPDFSETTINGS=/printer
selects output similar to the Acrobat Distiller "Print Optimized" setting (300 dpi)-dPDFSETTINGS=/default
selects output intended to be useful across a wide variety of uses, possibly at the expense of a larger output fileControls and features specific to PostScript and PDF input
-dPDFSETTINGS=configuration
Presets the "distiller parameters" to one of four predefined settings:
/screen
selects low-resolution output similar to the Acrobat Distiller (up to version X) "Screen Optimized" setting./ebook
selects medium-resolution output similar to the Acrobat Distiller (up to version X) "eBook" setting./printer
selects output similar to the Acrobat Distiller "Print Optimized" (up to version X) setting./prepress
selects output similar to Acrobat Distiller "Prepress Optimized" (up to version X) setting./default
selects output intended to be useful across a wide variety of uses, possibly at the expense of a larger output file.
The exact settings for each of these, including their DPI values, are shown in the dozens of options in this table.
screen
setting was too low quality for me, but ebook
worked well, cutting a 33Mb scan-based PDF down to 3.6Mb, and keeping it very readable. Other options for the -dPDFSETTINGS
option are listed here: milan.kupcevic.net/ghostscript-ps-pdf, and it might be a good idea to include them in this answer.
Commented
Dec 2, 2014 at 1:13
My favorite way to do this is to convert the PDF to PostScript and back. It does not always work, though, but when it works the results are nice:
ps2pdf input.pdf output.pdf
This also directly works on PDFs, as suggested in the comments.
Some users also report more success when using the ebook settings as follows:
ps2pdf -dPDFSETTINGS=/ebook input.pdf output.pdf
ps2pdf intput.pdf output.pdf
ps2pdf
also use ghostscript, so you can use things like -dPDFSETTINGS=/ebook
.
Commented
Mar 23, 2017 at 20:26
ps2pdf -dPDFSETTING=/ebook in.pdf out.pdf
, as suggested by @PabloBianchi leads to 272 kB ! Thanks a lot !
Commented
Mar 17, 2019 at 17:32
aking1012 is right. With more information regarding possible embedded images, hyperlinks etc.. it would be much more easier to answer this question!
Here are a couple of script and command-line solutions. Use as you see fit.
If you have a pdf with scanned images, you can use convert
(ImageMagick) to create a pdf with jpeg compression (You can use this method on any pdf, but you'll loose all text informations).
For example:
convert -density 200x200 -quality 60 -compress jpeg input.pdf output.pdf
Adjust the parameters to your needs
I was able to achieve great compression ratios for scanned/photographed documents (depending on the settings). Depending on the document source, you might want to reduce the color depth (-depth
argument).
pdfimages input.pdf pages
to extract pbm files, then you can do something like: for page in *.pbm; do convert $page -compress Group4 -type bilevel TIFF:- | convert - output.pdf
. Any OCR will be lost so I usually then do pdfsandwich output.pdf
, which seems to reduce file size even further.
--density --quality --compress
vs -density -quality -compress
.
-resize 50%
too, change percentage depending on how much DPI was used while scanning
I needed to downsize a PDF that contained full color scans of a document. Each of my pages was a full color image as far as the file was concerned. They were images of pages containing text and images, but they were created by scanning to an image.
I used a combination of the below ghostscript command and one from another thread.
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dDownsampleColorImages=true \
-dColorImageResolution=150 -dNOPAUSE -dBATCH -sOutputFile=output.pdf input.pdf
This reduced the image resolution to 150dpi, cutting my file size in half. Looking at the document, there was almost no noticeable loss of image quality. The text is still perfectly readable on my 2012 Nexus7.
Here is a script for rewriting scanned pdfs:
#!/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
You could customise it a bit to make it more reusable but if you only have one pdf, you could just replace $1
with your pdf filename and bung it in a terminal.
pdfimages -list file.pdf
to see the native images resolution.
Commented
May 21, 2020 at 10:53
This will have a good result.
I usually use ps2pdf to do this (easier syntax), something like this:
ps2pdf -dPDFSETTINGS=/ebook BiggerPdf SmallerPDF
I use the following python script to reduce the size of all the pdf files in a dir in a production server (8.04). So it should work.
#!/usr/bin/python
import os
for fich in os.listdir('.'):
if fich[-3:]=="pdf":
os.system("ps2pdf -dPDFSETTINGS=/ebook %s reduc/%s" % (fich,fich))
Best for me was
convert -compress Zip -density 150x150 input.pdf output.pdf
Other ways:
#### 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
regards
pdf2ps input.pdf temp.ps && ps2pdf14 temp.ps output.pdf && rm temp.ps
For my other, pdfsizeopt
-based answer, see here.
Referencing this answer and this answer, and after trying a bunch of the answers here, and doing a bunch of research and experimenting, I've come up with the following. Note that I've removed the -dCompatibilityLevel=1.4
part of the command used in some other answers here (including the most-upvoted answer) because this table indicates that 1.5
or 1.7
are automatically used for this setting today (27 Dec. 2020), and there's no need to override those values.
gs
) to compress input.pdf
into output.pdf
3 Main levels of compression:
Note: you may also add -dQUIET
to suppress all output to stdout. See: https://ghostscript.readthedocs.io/en/latest/Use.html.
gs -sDEVICE=pdfwrite -dPDFSETTINGS=/printer -dNOPAUSE -dBATCH \
-sOutputFile=output.pdf input.pdf
gs -sDEVICE=pdfwrite -dPDFSETTINGS=/ebook -dNOPAUSE -dBATCH \
-sOutputFile=output.pdf input.pdf
gs -sDEVICE=pdfwrite -dPDFSETTINGS=/screen -dNOPAUSE -dBATCH \
-sOutputFile=output.pdf input.pdf
You can also add time
in front of the command to see how long it takes (this works with any Linux command). Sample output:
$ 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
If you add -dQUIET
to the command, none of the Ghostscript output is shown, and you get this (when using time
in front):
$ time gs -sDEVICE=pdfwrite -dPDFSETTINGS=/ebook -dNOPAUSE -dBATCH -dQUIET -sOutputFile=out.pdf in.pdf
real 0m1.018s
user 0m0.976s
sys 0m0.040s
You can also use ps2pdf
, which is a wrapper around gs
, and produces very similar, but not exactly identical, results. I prefer to just use gs
directly, as shown above, however.
ps2pdf -dPDFSETTINGS=/printer input.pdf output.pdf
ps2pdf -dPDFSETTINGS=/ebook input.pdf output.pdf
ps2pdf -dPDFSETTINGS=/screen input.pdf output.pdf
Testing the gs
commands above on output from my pdf2searchablepdf
script here, I see the following:
gs
) Documentation:For all -d
("d
efine") PDFSETTINGS
available, see here: https://ghostscript.readthedocs.io/en/latest/VectorDevices.html#controls-and-features-specific-to-postscript-and-pdf-input. I have quoted that section below, except that I've added the DPI values for each setting in bold, as taken from this table here. You can refer to that table to see the dozens of lower-level settings chosen by gs
for each PDFSETTINGS
option.
Controls and features specific to PostScript and PDF input
-dPDFSETTINGS=configuration
Presets the "distiller parameters" to one of four predefined settings:
/screen
(72 dpi) selects low-resolution output similar to the Acrobat Distiller (up to version X) "Screen Optimized" setting./ebook
(150 dpi) selects medium-resolution output similar to the Acrobat Distiller (up to version X) "eBook" setting./printer
(300 dpi) selects output similar to the Acrobat Distiller "Print Optimized" (up to version X) setting./prepress
(300 dpi) selects output similar to Acrobat Distiller "Prepress Optimized" (up to version X) setting./default
(72 dpi) selects output intended to be useful across a wide variety of uses, possibly at the expense of a larger output file.
You can also see definitions for various options on this page: https://ghostscript.readthedocs.io/en/latest/Use.html:
-dNOPAUSE
Disables the prompt and pause at the end of each page. Normally one should use this (along with-dBATCH
) when producing output on a printer or to a file; it also may be desirable for applications where another program is "driving" Ghostscript.
-dBATCH
Causes Ghostscript to exit after processing all files named on the command line, rather than going into an interactive loop reading PostScript commands. Equivalent to putting-c quit
at the end of the command line.
-dQUIET
Suppresses routine information comments on standard output. This is currently necessary when redirecting device output to standard output.
I strongly recommend pdfsizeopt
.
It is much more efficient in terms of size reduction than any of the previous CLI and GUI software that I have tried (including convert
, gs
, pdftk
, etc.) — although possibly slower with pngout
activated —, and does not have some of their issues (no heavily pixelated/degraded images, no loss of metadata such as table of contents, etc.).
Now, if you need to attain a certain size whatever the consequences (inc. degrading images to a point of unreadability), it might not be the tool you need, but as an always-working go-to solution, to reduce unnecessary big sizes in PDFs without loosing in readability, information and acceptable image quality, I think it is the best option. (Note: I tend to use it after having first done a vectorization-OCR in Adobe Acrobat [the function used to be called "CleanScan"], which can have a dramatical size impact on some scanned text documents.)
I recommend the generic Unix install:
curl -L -o pdfsizeopt.single https://raw.githubusercontent.com/pts/pdfsizeopt/master/pdfsizeopt.single
chmod +x pdfsizeopt.single
cp pdfsizeopt.single /usr/local/bin/pdfsizeopt
Usage:
pdfsizeopt original.pdf [compressed.pdf]
Note: for Mac users finding this post (or Linuxbrew users), there is a Homebrew install formula:
brew install --HEAD pts/utils/pdfsizeopt
pdfsizeopt
on a 3.8 MB 3pg 300 DPI output PDF file from my pdf2searchablepdf
script, the size remained 3.8 MB (it got smaller by a few KB is all).
Commented
Dec 27, 2020 at 3:51
pdfsizeopt
will not always reduce filesize significantly. If that is what I'm after (strongest reduction), I use other software (e.g., PDF Squeezer) that reduces image quality more drastically. pdfsizeopt
is my default CLI solution for batch PDF resizing.
jbig2
, pngout
, and sam2p
dependencies, I've detailed full installation instructions for those in my answer here.
Commented
May 2, 2023 at 23:27
I just encountered this problem myself. If using simple scan, select text mode for low resolution scans and you won't need to worry about the command line stuff. Just saying.
Control the compression quality:
#!/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
. First parameter is input file, second is the output file and rest of the parameters will be passed to gs
as is.
Commented
May 13, 2016 at 12:53
For me the gs screen
option was too bad, and the ebook
one too big.
My original document contained text as colour and black and white images (depending on the page).
The best solution I did come up has been:
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
Note that the compression level is not linear.. if I was specifying 135 it didn't compressed, I did find 130 to be (in my case) the maximum resolution that achieves a compression.
ColorImageDownsampleThreshold
option (and the other two for gray and monochrome), which defaults to 1.5 and tells ghostscript not to reduce the resolution of images whose resolution is not at least 1.5 times the target resolution. Your PDF probably contained images at 200 dpi, for which a target resolution of 135 dpi is a 1.48x decrease, but 130 dpi a 1.54x decrease. That’s probably because
Commented
May 26, 2023 at 6:47
Since this link was first for me when I searched in Google, I thought I'd add one more possibility. None of the above solutions was working for me on a pdf exported from Inkscape (15 mb), but I was at last able to shrink it down to 1 mb by opening it in GIMP, and exporting as pdf again.
Another option that came close (but text was a little fuzzy) was ImageMagick's convert utility:
convert -compress Zip input.pdf output.pdf
convert -compress Zip
appeared to rasterise all vectors.
I was facing the same problem, and was glad to find this thread. Specifically I had a pdf generated from scanned images, and needed to reduce its byte size by a factor of 6.
Unfortunately, none of the solutions above worked :(. Then I realized that somewhere in the scanner->jpeg->pdf process the size of the page had gotten bloated by a factor of aprx 4. The documents I scanned were all Letter sized, but the pdf had size of
identify -verbose doc_orig.pdf | grep "Print size"
Print size: 35.4167x48.7222
I got the desired results finally with a "convert" command that did both resizing as well as compression steps in one:
convert -density 135x135 -quality 70 -compress jpeg -resize 22.588% doc_orig.pdf doc_lowres.pdf
Note that doc_orig had density of 72x72 dpi.
In the end I wrote my own bash script to solve this, it uses mogrify
, convert
and gs
to extract pdf pages as png, resize them, convert them to 1-bit bmp and then rebuild them as pdf. File size reduction can be over 90%. Available at http://www.timedicer.co.uk/programs/help/pdf-compress.sh.php.
If converting to djvu would also be ok and if no colors are involved, you could try the following:
Convert the pdf to jpg files using pdfimages -j
If you get pbm files instead, you should do the intermediate step:
for FILENAME in $(ls *.pbm); do convert $FILENAME ${FILENAME%.*}.jpg ;done
The convert command is from the imagemagick package.
Then use scantailor to make tif's out of it.
In a last step you go to scantailors out direcory (where the tif's are located) and apply djvubind to that directory.
This should reduce the filesize drastically without big quality loss of the text. If you want finer control over the ocr-backend, you may try djvubind --no-ocr
and use ocrodjvu to add the ocr layer afterwards.
If you have color's in your document things get a bit more complicated. Instead of djvubind you could use didjvu and in scantailor you have to change to mixed mode and select sometimes color-images manually.
load image or even pdf file into inkscape.
From inkscape: Save in vector format (as the native .svg).
Import vector files into scribus, edit layout and export/save as .pdf from there
You can try this :
$ 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
It is faster than gs
but compresses upto 30% in this case for a 107.5MiB input file.
pdf2searchablepdf
program, the output file was identical in size to the input file.
Commented
Dec 24, 2020 at 11:20
I use this zsh function for compressing scanned documents:
pdf-compress-gray () {
local input="${1}"
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"
}
Usage:
[pdf_compress_gray_dpi=100] pdf-compress-gray input.pdf [output.pdf]
I normally simply use
gs -dQUIET -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -dPDFSETTINGS=/printer \
-sOutputFile=output.pdf input.pdf
I went through many questions one how to reduce the size of a pdf on AskUbuntu, Stack Overflow and Unix & Linux SE and I wondered what all those options proposed in the answers meant.
Some are Interaction-related parameters:
-dQUIET
-dBATCH
-dNOPAUSE
Some are Device and output selection parameters:
-sDEVICE
-sOutputFile
Some are Common controls and features specific to device PDFWRITE:
-r<resolution>
-dCompressFonts
This important one presets the "Distiller Parameters", Adobe's documented parameters for controlling the conversion into PDF, to one of four predefined settings (screen, ebook, printer, prepress)
-dPDFSETTINGS
All the ones below are automatically preset according to -dPDFSETTINGS
, as per this table. A command suggest by Kurt Pfeifle can be used to check these values. You can fine tune them if you want:
-dCompatibilityLevel
-dAutoRotatePages
-dEmbedAllFonts
-dSubsetFonts
-sColorConversionStrategy
-dDownsampleColorImages
-dDownsampleGrayImages
-dDownsampleMonoImages
-dColorImageResolution
-dGrayImageResolution
-dMonoImageResolution
-dColorImageDownsampleType
-dGrayImageDownsampleType
-dMonoImageDownsampleType
pdfsizeopt
full installation instructionsFor my other, gs
-based answer, see here.
For anyone trying to follow @iNyar's answer to install and try out the pdfsizeopt
tool, installing the dependencies is tricky. If you run the tool without installing all dependencies, pdfsizeopt
won't run. Here are the errors I got when trying to run it without jbig2
, pngout
, and sam2p
installed:
$ ./pdfsizeopt in.pdf out.pdf
info: This is pdfsizeopt ZIP rUNKNOWN size=69856.
info: prepending to PATH: /home/gabriel/GS/Jobs/Edge Autonomy/Onboarding [29 May 2023 start date!]
error: image optimizer not found on PATH: jbig2
error: image optimizer not found on PATH: pngout
error: image optimizer not found on PATH: sam2p
error: image optimizer not found on PATH: sam2p
fatal: not all image optimizers found (see above), ignore with --do-require-image-optimizers=no
So, the solution is to install the jbig2
, pngout
, and sam2p
dependencies manually. Here are the full installation instructions, therefore, for pdfsizeopt
:
Tested in Linux Ubuntu 20.04.
# ================================================
# 1. Install `pdfsizeopt` dependencies
# ================================================
# --------------------
# jbig2:
# - https://github.com/agl/jbig2enc
# --------------------
# install dependencies
sudo apt update
sudo apt install libleptonica-dev
git clone https://github.com/agl/jbig2enc.git
cd jbig2enc
./autogen.sh
./configure
time make
sudo make install
# ensure it is installed
jbig2 --version
# --------------------
# pngout
# - http://advsys.net/ken/utils.htm#pngout
# - http://www.jonof.id.au/kenutils.html
# --------------------
# download it
wget https://www.jonof.id.au/files/kenutils/pngout-20200115-linux-static.tar.gz
# extract it
tar -xf pngout-20200115-linux-static.tar.gz
cd pngout-20200115-linux-static
# install it
sudo cp -i amd64/pngout-static /usr/local/bin/pngout
# ensure it's installed
pngout
# --------------------
# sam2p
# - https://github.com/pts/sam2p
# --------------------
# install dependencies
sudo apt install libgif-dev
# go here and find the latest release:
# https://github.com/pts/sam2p/releases
# Use the correct URL from there in the following commands.
# download it
wget https://github.com/pts/sam2p/releases/download/v0.49.4/sam2p-0.49.4.tar.gz
# extract it
tar -xf sam2p-0.49.4.tar.gz
cd sam2p-0.49.4
./configure
time make
sudo make install
# ensure it's installed by checking its version
sam2p --version
# ================================================
# 2. Install `pdfsizeopt`
# ================================================
curl -L -o pdfsizeopt https://raw.githubusercontent.com/pts/pdfsizeopt/master/pdfsizeopt.single
chmod +x pdfsizeopt
sudo cp -i pdfsizeopt /usr/local/bin/pdfsizeopt
Now use it:
# 1. Check the help menu to ensure it's installed
pdfsizeopt --help 2>&1 | less -RFX
# 2. Use it to optimize in.pdf into out.pdf
pdfsizeopt in.pdf out.pdf
Example run and output:
$ pdfsizeopt in.pdf out.pdf
info: This is pdfsizeopt ZIP rUNKNOWN size=69734.
info: prepending to PATH: /home/gabriel/Downloads/Install_Files/pdfsizeopt/pdfsizeopt/pdfsizeopt_libexec
info: loading PDF from: in.pdf
info: loaded PDF of 1955931 bytes
info: separated to 18 objs + xref + trailer
info: parsed 18 objs
info: found 0 Type1 fonts loaded
info: found 0 Type1C fonts loaded
info: optimized 6 streams, kept 6 zip
info: compressed 0 streams, kept 0 of them uncompressed
info: saving PDF with 18 objs to: out.pdf
info: generated object stream of 523 bytes in 9 objects (21%)
info: generated 1953795 bytes (100%)
Result of running pdfsizeopt
above: no change. in.pdf
is 2.0 MB, and out.pdf
is 2.0 MB. Then again, gs
, as described in my other answer, didn't work on this particular PDF either. I don't know why.
Note: for anyone who wants to experiment with this, here is how I created the PDF I'm experimenting on:
pdf2searchablepdf -c "path/to/dir"
on that dir with the 3 images, to perform OCR on them and combine them into a single PDF. You'll see that
gs
under-the-hood, did nothing.pdfsizeopt
and it does nothing for me on these PDFs as well.ChatGpt helped me a ton to figure out how to install a lot of this mess, in particular calling sudo apt install libgif-dev
prior to running time make
to build sam2p
, else I'd get this error:
g++ -s -O2 -DHAVE_CONFIG2_H -fsigned-char -fno-rtti -fno-exceptions -ansi -pedantic -Wall -W -Wextra -c gensi.cpp
g++ -s sam2p_main.o appliers.o crc32.o in_ps.o in_tga.o in_pnm.o in_bmp.o in_gif.o in_lbm.o in_xpm.o mapping.o in_pcx.o in_jai.o in_png.o in_jpeg.o in_tiff.o rule.o minips.o encoder.o pts_lzw.o pts_fax.o pts_defl.o error.o image.o gensio.o snprintf.o gensi.o -o sam2p
/usr/bin/ld: appliers.o: in function `out_gif89a_work(GenBuffer::Writable&, Rule::OutputRule*, Image::SampledInfo*)':
appliers.cpp:(.text+0x2025): undefined reference to `out_gif_write(GenBuffer::Writable&, Image::Indexed*)'
collect2: error: ld returned 1 exit status
make: *** [Makedep:66: sam2p] Error 1
All words and commands in this answer are my own, however, and I tested everything in this answer personally.
Super simple PDF compress tool: GitHub page.
Installation on Ubuntu:
sudo add-apt-repository ppa:jfswitz/released
sudo apt-get update
sudo apt-get install pdf-compressor
It uses ghostscript.
I used below commands but it didnt compress my pdf file substantially. Some times some of the portion was blackened after compression.
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)
After too much wandering over the web I just couldn't find the right compression library. I came across pdfcompressor.com
. This is just awesome website. It compresses the pdf by 95% ( 15Mb of files). So I used selenium and Tor to automate the compression. Checkout my Github Repository.
[GITHUB] (https://github.com/gugli28/PdfCompressor)
pdfopt
has a simple syntax and improves loading and page-turning speed in the iPad era. :-)