#14707: qpdf-10.2.0
-------------------------+-----------------------
 Reporter:  bdubbs       |       Owner:  renodr
     Type:  enhancement  |      Status:  assigned
 Priority:  normal       |   Milestone:  10.2
Component:  BOOK         |     Version:  SVN
 Severity:  normal       |  Resolution:
 Keywords:               |
-------------------------+-----------------------

Comment (by renodr):

 {{{
 10.2.0: February 23, 2021

         CLI Behavior Changes

             Operations that work on combining pages are much better about
 protecting form fields. In particular, --split-pages and --pages now
 preserve interaction form functionality by copying the relevant form field
 information from the original files. Additionally, if you use --pages to
 select only some pages from the original input file, unused form fields
 are removed, which prevents lots of unused annotations from being
 retained.

             By default, qpdf no longer allows creation of encrypted PDF
 files whose user password is non-empty and owner password is empty when a
 256-bit key is in use. The --allow-insecure option, specified inside the
 --encrypt options, allows creation of such files. Behavior changes in the
 CLI are avoided when possible, but an exception was made here because this
 is security-related. qpdf must always allow creation of weird files for
 testing purposes, but it should not default to letting users unknowingly
 create insecure files.

         Library Behavior Changes

             Note: the changes in this section cause differences in output
 in some cases. These differences change the syntax of the PDF but do not
 change the semantics (meaning). I make a strong effort to avoid gratuitous
 changes in qpdf's output so that qpdf changes don't break people's tests.
 In this case, the changes significantly improve the readability of the
 generated PDF and don't affect any output that's generated by simple
 transformation. If you are annoyed by having to update test files, please
 rest assured that changes like this have been and will continue to be rare
 events.

             QPDFObjectHandle::newUnicodeString now uses whichever of
 ASCII, PDFDocEncoding, of UTF-16 is sufficient to encode all the
 characters in the string. This reduces needless encoding in UTF-16 of
 strings that can be encoded in ASCII. This change may cause qpdf to
 generate different output than before when form field values are set using
 QPDFFormFieldObjectHelper but does not change the meaning of the output.

             The code that places form XObjects and also the code that
 flattens rotations trim trailing zeroes from real numbers that they
 calculate. This causes slight (but semantically equivalent) differences in
 generated appearance streams and form XObject invocations in
 overlay/underlay code or in user code that calls the methods that place
 form XObjects on a page.

         CLI Enhancements

             Add new command line options for listing, saving, adding,
 removing, and and copying file attachments. See Section 3.7, “Embedded
 Files/Attachments Options” for details.

             Page splitting and merging operations, as well as --flatten-
 rotation, are better behaved with respect to annotations and interactive
 form fields. In most cases, interactive form field functionality and
 proper formatting and functionality of annotations is preserved by these
 operations. There are still some cases that aren't perfect, such as when
 functionality of annotations depends on document-level data that qpdf
 doesn't yet understand or when there are problems with referential
 integrity among form fields and annotations (e.g., when a single form
 field object or its associated annotations are shared across multiple
 pages, a case that is out of spec but that works in most viewers anyway).

             The option --password-file=filename can now be used to read
 the decryption password from a file. You can use - as the file name to
 read the password from standard input. This is an easier/more obvious way
 to read passwords from files or standard input than using @file for this
 purpose.

             Add some information about attachments to the json output, and
 added attachments as an additional json key. The information included here
 is limited to the preferred name and content stream and a reference to the
 file spec object. This is enough detail for clients to avoid the hassle of
 navigating a name tree and provides what is needed for basic enumeration
 and extraction of attachments. More detailed information can be obtained
 by following the reference to the file spec object.

             Add numeric option to --collate. If --collate=n is given, take
 pages in groups of n from the given files.

             It is now valid to provide --rotate=0 to clear rotation from a
 page.

         Library Enhancements

             This release includes numerous additions to the API. Not all
 changes are listed here. Please see the ChangeLog file in the source
 distribution for a comprehensive list. Highlights appear below.

             Add QPDFObjectHandle::ditems() and QPDFObjectHandle::aitems()
 that enable C++-style iteration, including range-for iteration, over
 dictionary and array QPDFObjectHandles. See comments in
 include/qpdf/QPDFObjectHandle.hh and examples/pdf-name-number-tree.cc for
 details.

             Add QPDFObjectHandle::copyStream for making a copy of a stream
 within the same QPDF instance.

             Add new helper classes for supporting file attachments, also
 known as embedded files. New classes are QPDFEmbeddedFileDocumentHelper,
 QPDFFileSpecObjectHelper, and QPDFEFStreamObjectHelper. See their
 respective headers for details and examples/pdf-attach-file.cc for an
 example.

             Add a version of QPDFObjectHandle::parse that takes a QPDF
 pointer as context so that it can parse strings containing indirect object
 references. This is illustrated in examples/pdf-attach-file.cc.

             Re-implement QPDFNameTreeObjectHelper and
 QPDFNumberTreeObjectHelper to be more efficient, add an iterator-based
 API, give them the capability to repair broken trees, and create methods
 for modifying the trees. With this change, qpdf has a robust read/write
 implementation of name and number trees.

             Add new versions of QPDFObjectHandle::replaceStreamData that
 take std::function objects for cases when you need something between a
 static string and a full-fledged StreamDataProvider. Using this with
 QUtil::file_provider is a very easy way to create a stream from the
 contents of a file.

             The QPDFMatrix class, formerly a private, internal class, has
 been added to the public API. See include/qpdf/QPDFMatrix.hh for details.
 This class is for working with transformation matrices. Some methods in
 QPDFPageObjectHelper make use of this to make information about
 transformation matrices available. For an example, see examples/pdf-
 overlay-page.cc.

             Several new methods were added to QPDFAcroFormDocumentHelper
 for adding, removing, getting information about, and enumerating form
 fields.

             Add method QPDFAcroFormDocumentHelper::transformAnnotations,
 which applies a transformation to each annotation on a page.

             Add QPDFPageObjectHelper::copyAnnotations, which copies
 annotations and, if applicable, associated form fields, from one page to
 another, possibly transforming the rectangles.

         Build Changes

             A C++-14 compiler is now required to build qpdf. There is no
 intention to require anything newer than that for a while. C++-14 includes
 modest enhancements to C++-11 and appears to be supported about as widely
 as C++-11.

         Bug Fixes

             The --flatten-rotation option applies transformations to any
 annotations that may be on the page.

             If a form XObject lacks a resources dictionary, consider any
 names in that form XObject to be referenced from the containing page. This
 is compliant with older PDF versions. Also detect if any form XObjects
 have any unresolved names and, if so, don't remove unreferenced resources
 from them or from the page that contains them. Unfortunately this has the
 side effect of preventing removal of unreferenced resources in some cases
 where names appear that don't refer to resources, such as with tagged PDF.
 This is a bit of a corner case that is not likely to cause a significant
 problem in practice, but the only side effect would be lack of removal of
 shared resources. A future version of qpdf may be more sophisticated in
 its detection of names that refer to resources.

             Properly handle strings if they appear in inline image
 dictionaries while externalizing inline images.
 }}}

--
Ticket URL: <http://wiki.linuxfromscratch.org/blfs/ticket/14707#comment:2>
BLFS Trac <http://wiki.linuxfromscratch.org/blfs>
Beyond Linux From Scratch
-- 
http://lists.linuxfromscratch.org/listinfo/blfs-book
FAQ: http://www.linuxfromscratch.org/blfs/faq.html
Unsubscribe: See the above information page

Reply via email to