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.