Re-save PDF files (especially vignettes) more compactly.
Support function for
R CMD build --compact-vignettes.
compactPDF(paths, qpdf = Sys.which(Sys.getenv("R_QPDF", "qpdf")), gs_cmd = Sys.getenv("R_GSCMD", ""), gs_quality = Sys.getenv("GS_QUALITY", "none"), gs_extras = character()) ## S3 method for class 'compactPDF' format(x, ratio = 0.9, diff = 1e4, ...)
A character vector of paths to PDF files, or a length-one character vector naming a directory, when all ‘.pdf’ files in that directory will be used.
Character string giving the path to the
Character string giving the path to the GhostScript
executable, if that is to be used. On Windows this is the path to
‘gswin32c.exe’ or ‘gswin64c.exe’. If
A character string indicating the quality required:
the options are
An optional character vector of further options to be passed to GhostScript.
An object of class
Limits for reporting: files are only reported whose
sizes are reduced both by a factor of
Further arguments to be passed to or from other methods.
This by default makes use of
qpdf, available from
http://qpdf.sourceforge.net/ (including as a Windows binary) and
included with the CRAN macOS distribution of R. If
is non-empty and
gs_quality != "none", GhostScript will used
qpdf if it is available. If
gs_quality != "none" and
"", an attempt
will be made to find a GhostScript executable.
gs_cmd are run on all PDF files found,
and those which are reduced in size by at least 10% and 10Kb are
The strategy of our use of
qpdf is to (losslessly) compress
both PDF streams and objects. GhostScript compresses streams and more
(including downsampling and compressing embedded images) and
consequently is much slower and may lose quality (but can also produce
much smaller PDF files). However, quality
"ebook" is perfectly
adequate for screen viewing and printing on laser printers.
Where PDF files are changed they will become PDF version 1.5 files: these have been supported by Acrobat Reader since version 6 in 2003, so this is very unlikely to cause difficulties.
Stream compression is what most often has large gains. Most PDF
documents are generated with object compression, but this does not
seem to be the default for MiKTeX's
pdflatex. For some PDF
files (and especially package vignettes), using GhostScript can
dramatically reduce the space taken by embedded images (often
Where both GhostScript and
qpdf are selected (when
gs_quality != "none" and both executables are found), they are
run in that order and the size reductions apply to the total
An object of class
This has two columns, the old and new sizes in bytes for the files
that were changed.
... to the format method, so will accept
The external tools used may change in future releases.
Versions of GhostScript 9.06 and later give several times better compression than 9.05 on some vignettes in CRAN packages.
Many other (and sometimes more effective) tools to compact PDF files are available, including Adobe Acrobat (not Reader). See the ‘Writing R Extensions’ manual.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.