diff --git a/manual/qpdf-manual.xml b/manual/qpdf-manual.xml index 3539193..8a1b84f 100644 --- a/manual/qpdf-manual.xml +++ b/manual/qpdf-manual.xml @@ -5071,6 +5071,19 @@ print "\n"; + Operations that work on combining pages are much better + about protecting form fields. In particular, + and + now preserve interaction form functionality by copying the + relevant form field information from the original files. + Additionally, if you use 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 @@ -5145,6 +5158,23 @@ print "\n"; + Page splitting and merging operations, as well as + , 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 can now be used to read the decryption password from a file. @@ -5190,6 +5220,15 @@ print "\n"; + 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 @@ -5208,14 +5247,6 @@ print "\n"; - Add QUtil::get_current_qpdf_time, - QUtil::pdf_time_to_qpdf_time, and - QUtil::qpdf_time_to_pdf_time for - working with PDF timestamp strings. - - - - Add new helper classes for supporting file attachments, also known as embedded files. New classes are QPDFEmbeddedFileDocumentHelper, @@ -5228,19 +5259,6 @@ print "\n"; - Add warn to - QPDF's public API. - - - - - QPDFObjectHandle::is* methods now return - false rather than crashing when called with an uninitialized - QPDFObjectHandle object. - - - - Add a version of QPDFObjectHandle::parse that takes a QPDF pointer as context so that it @@ -5261,29 +5279,13 @@ print "\n"; - Add new functions QUtil::pipe_file and - QUtil::file_provider for sending the - contents of a file through a pipeline as binary data. - - - - 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. - - - - - Add option to QUtil::double_to_string - to trim trailing zeroes, which is on by default. Within the - qpdf library, this causes changes to output the from code - that places form XObjects and the code that flattens - rotations. + QUtil::file_provider is a very easy way + to create a stream from the contents of a file. @@ -5292,28 +5294,19 @@ print "\n"; 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. + 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. - Add - QPDFPageObjectHelper::getMatrixForFormXObjectPlacement, - which returns the transformation matrix required to map from - a form field's coordinate system into a specific rectangle - within the page. Also add a version of - QPDFPageObjectHelper::placeFormXObject - that initializes a QPDFMatrix - reference. For example, see - examples/pdf-overlay-page.cc. - - - - - Add method - QPDFAcroFormDocumentHelper::addFormField, - which adds a new form field, initializing the AcroForm - dictionary if needed. + Several new methods were added to + QPDFAcroFormDocumentHelper for + adding, removing, getting information about, and enumerating + form fields. @@ -5332,12 +5325,6 @@ print "\n"; rectangles. - - - Add QUtil::path_basename to return the - last element of a path. - - @@ -5362,7 +5349,7 @@ print "\n"; - The option applies + The option applies transformations to any annotations that may be on the page. @@ -5373,7 +5360,15 @@ print "\n"; 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. + 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.