New get_bookmarks_augmented() which augments
get_bookmarks_pdftk()’s support for bookmark page numbers
with get_bookmarks_pdftools()’s new support for whether
bookmarks should start open or closed (#62).
docinfo() objects now support arbitrary
(non-standard) info dictionary entries (#7). Read/write support among
the various backends is as follows:
get_docinfo_pdftk()/set_docinfo_pdftk()
support reading and writing them.get_docinfo_exiftool()/set_docinfo_exiftool()
support reading and writing them.get_docinfo_pdftools() supports reading them.set_docinfo_gs() supports writing them.set_bookmarks() bug where tempfile wasn’t being
deleted if input == output (@djvill, #63).get_bookmarks_pdftools() now reports positive/negative
count (as well as open) using
pdftools::pdf_toc()’s new is_open list element
(#62). This requires pdftools (>= 3.8.0).get_bookmarks() now prefers the new
get_bookmarks_augmented() when supported.pdftk command-line tool to read
bookmark/documentation info metadata now time out after 60s by default
(configurable via the xmpdf_pdftk_timeout option) rather
than being able to hang indefinitely on a pathological pdf outline.get_bookmarks_pdftools() gets pdf bookmark
information using pdftools::pdf_toc() (#30). Note though
due to poppler library limitations it can’t return page numbers that
correspond to each bookmark. Hence get_bookmarks() will try
to use the following helper functions in the following order:
get_bookmarks_pdftk()get_bookmarks_pdftools()set_bookmarks_gs() for the newest versions of
ghostscript (#59). The new approach means we could remove
some GPLv3 code and have relicensed the package under the MIT
license.get_bookmarks() and get_bookmarks_pdftk()
no longer returns its data frame value invisibly.set_docinfo_exiftool() should now losslessly write
all legal datetimes (#55). set_docinfo()’s priority order
has been updated to the following:
set_docinfo_exiftool()set_docinfo_gs()set_docinfo_pdftk()Unit tests have been adjusted to prevent CRAN R CMD check ERRORs
on certain CRAN platforms that don’t have ghostscript
installed or are ran in a non-Unicode locale (#56).
cat_bookmarks() concatenates a list of bookmarks
into a single bookmarks data frame while updating the page numbers.
Useful if wanting to concatenate multiple pdf files together and would
like to preserve the bookmarks information.
get_bookmarks() returns a data frame with pdf
bookmarks information. get_bookmarks() will try to use the
following helper functions in the following order:
get_bookmarks_pdftk() which wraps pdftk
command-line toolset_bookmarks() sets (replaces) pdf bookmarks
information. set_bookmarks() will try to use the following
helper functions in the following order:
set_bookmarks_gs() which wraps ghostscript
command-line toolset_bookmarks_pdftk() which wraps pdftk
command-line tooldocinfo() provides an {R6} object to
represent pdf documentation info entries.
as_docinfo() can coerce objects into
docinfo() objects. In particular there is an
as_docinfo.xmp() method to coerce xmp()
objects.
get_docinfo() reads in pdf documentation info
entries from pdf file(s). get_docinfo() will try to use the
following helper functions in the following order:
get_docinfo_pdftk() which wraps pdftk
command-line toolget_docinfo_exiftool() which wraps
exiftool command-line toolget_docinfo_pdftools() which wraps
pdftools::pdf_info()set_docinfo() sets pdf documentation info entries to
a pdf file. set_docinfo() will try to use the following
helper functions in the following order:
set_docinfo_gs() which wraps ghostscript
command-line toolset_docinfo_pdftk() which wraps pdftk
command-line toolset_docinfo_exiftool() which wraps
exiftool command-line toolxmp() provides an {R6} object to
represent xmp metadata.
as_lang_alt() supports “language alternative” XMP
tags.as_xmp() can coerce objects into xmp()
objects. In particular there is an as_xmp.docinfo() method
to coerce docinfo() objects.
get_xmp() reads in xmp metadata from media file(s).
get_xmp() will try to use the following helper functions in
the following order:
get_xmp_exiftool() which wraps exiftool
command-line toolset_xmp() sets xmp metadata in media file(s).
set_xmp() will try to use the following helper functions in
the following order:
set_xmp_exiftool() which wraps exiftool
command-line toolcat_pages() concatenates (pdf) file(s) into a single
output pdf. cat_pages() will try to use the following
helper functions in the following order:
cat_pages_qpdf() which wraps
qpdf::pdf_combine()cat_pages_pdftk() which wraps pdftk
command-line toolcat_pages_gs() which wraps ghostscript
command-line tooln_pages() returns the number of pages in the (pdf)
file(s). n_pages() will try to use the following helper
functions in the following order:
n_pages_qpdf() which wraps
qpdf::pdf_length()n_pages_exiftool() which wraps exiftool
command-line tooln_pages_pdftk() which wraps pdftk
command-line tooln_pages_gs() which wraps ghostscript
command-line toolThe following functions detect support for various higher-level features:
supports_get_bookmarks()supports_set_bookmarks()supports_get_docinfo()supports_set_docinfo()supports_get_xmp()supports_set_xmp()supports_n_pages()The following functions detect support for various command-line tools needed for some lower-level helper functions:
supports_exiftool() detects support for
exiftoolsupports_gs() detects support for
ghostscriptsupports_pdftk() detects support for
pdftkenable_feature_message() returns a character vector
with the information needed to install the requested feature. Formatted
for use with rlang::abort(), rlang::warn(), or
rlang::inform().
The spdx_licenses data set contains the SPDX License List.