diff --git a/ChangeLog b/ChangeLog index e894ac7a..7eef99e4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,13 @@ +2018-06-23 Jay Berkenbilt + + * 8.1.0: release + 2018-06-22 Jay Berkenbilt + * Bug fix: properly decrypt files with 40-bit keys that use + revision 3 of the security handler. Prior to this, qpdf was + reporting "invalid password" in this case. Fixes #212. + * With --verbose, print information about each input file when merging files. @@ -21,7 +29,7 @@ performance, this allows you to operate on many files without opening too many files at the operating system level. - * Add new option --preserved-unreferenced-resources, which + * Add new option --preserve-unreferenced-resources, which suppresses removal of unreferenced objects from page resource dictionaries during page splitting operations. diff --git a/README-maintainer b/README-maintainer index ed4c7bc6..7bc7e7c2 100644 --- a/README-maintainer +++ b/README-maintainer @@ -88,7 +88,12 @@ RELEASE PREPARATION * Check out the current version * ./autogen.sh && ./configure --enable-werror && make -j$(nproc) build_libqpdf * Checkout the last release - * make check NO_REBUILD=1 + * make -k check NO_REBUILD=1 + +* Update release notes in manual. Look at diffs and ChangeLog. Update + release date in `manual/qpdf-manual.xml`. Remember to ensure that + the entities at the top of the document are consistent with the + release notes for both version and release date. * Make sure version numbers are consistent in the following locations: * configure.ac @@ -96,11 +101,6 @@ RELEASE PREPARATION * manual/qpdf-manual.xml `make_dist` verifies this consistency. -* Update release notes in manual. Look at diffs and ChangeLog. Update - release date in `manual/qpdf-manual.xml`. Remember to ensure that - the entities at the top of the document are consistent with the - release notes for both version and release date. - * Add a release entry to ChangeLog. diff --git a/configure.ac b/configure.ac index 4f875e95..423e2e2d 100644 --- a/configure.ac +++ b/configure.ac @@ -2,7 +2,7 @@ dnl Process this file with autoconf to produce a configure script. dnl This config.in requires autoconf 2.5 or greater. AC_PREREQ([2.68]) -AC_INIT([qpdf],[8.0.2]) +AC_INIT([qpdf],[8.1.0]) AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_FILES([autoconf.mk]) diff --git a/libqpdf/QPDF.cc b/libqpdf/QPDF.cc index 7d3c10e7..308b3dd2 100644 --- a/libqpdf/QPDF.cc +++ b/libqpdf/QPDF.cc @@ -19,7 +19,7 @@ #include #include -std::string QPDF::qpdf_version = "8.0.2"; +std::string QPDF::qpdf_version = "8.1.0"; static char const* EMPTY_PDF = "%PDF-1.3\n" diff --git a/manual/qpdf-manual.xml b/manual/qpdf-manual.xml index 49e5b838..848c340b 100644 --- a/manual/qpdf-manual.xml +++ b/manual/qpdf-manual.xml @@ -5,8 +5,8 @@ - - + + ]> @@ -3239,6 +3239,189 @@ print "\n"; ChangeLog in the source distribution. + + 8.1.0: June 23, 2018 + + + + + Usability Improvements + + + + + When splitting files, qpdf detects fonts and images that the + document metadata claims are referenced from a page but are + not actually referenced and omits them from the output file. + This change can cause a significant reduction in the size of + split PDF files for files created by some software packages. + Prior versions of qpdf would believe the document metadata + and sometimes include all the images from all the other + pages even though the pages were no longer present. In the + unlikely event that the old behavior should be desired, it + can be enabled by specifying + . For + additional details, please see . + + + + + When merging multiple PDF files, qpdf no longer leaves all + the files open. This makes it possible to merge numbers of + files that may exceed the operating system's limit for the + maximum number of open files. + + + + + The option's syntax has been + extended to make the page range optional. If you specify + + without specifying a page range, the rotation will be + applied to all pages. This can be especially useful for + adjusting a PDF created from a multi-page document that + was scanned upside down. + + + + + When merging multiple files, the + option now prints information about each file as it operates + on that file. + + + + + When the option is specified, + qpdf will print a running indicator of its best guess at how + far through the writing process it is. Note that, as with + all progress meters, it's an approximation. This option is + implemented in a way that makes it useful for software that + uses the qpdf library; see API Enhancements below. + + + + + + + Bug Fixes + + + + + Properly decrypt files that use revision 3 of the standard + security handler but use 40 bit keys (even though revision 3 + supports 128-bit keys). + + + + + Limit depth of nested data structures to prevent crashes + from certain types of malformed (malicious) PDFs. + + + + + In “newline before endstream” mode, insert the + required extra newline before the + endstream at the end of object streams. + This one case was previously omitted. + + + + + + + API Enhancements + + + + + The first round of higher level “helper” + interfaces has been introduced. These are designed to + provide a more convenient way of interacting with certain + document features than using + QPDFObjectHandle directly. For + details on helpers, see . Specific additional + interfaces are described below. + + + + + Add two new document helper classes: + QPDFPageDocumentHelper for working + with pages, and + QPDFAcroFormDocumentHelper for + working with interactive forms. No old methods have been + removed, but QPDFPageDocumentHelper + is now the preferred way to perform operations on pages + rather than calling the old methods in + QPDFObjectHandle and + QPDF directly. Comments in the header + files direct you to the new interfaces. Please see the + header files and ChangeLog for + additional details. + + + + + Add three new object helper class: + QPDFPageObjectHelper for pages, + QPDFFormFieldObjectHelper for + interactive form fields, and + QPDFAnnotationObjectHelper for + annotations. All three classes are fairly sparse at the + moment, but they have some useful, basic functionality. + + + + + A new example program + examples/pdf-set-form-values.cc has + been added that illustrates use of the new document and + object helpers. + + + + + The method + QPDFWriter::registerProgressReporter + has been added. This method allows you to register a + function that is called by QPDFWriter + to update your idea of the percentage it thinks it is + through writing its output. Client programs can use this to + implement reasonably accurate progress meters. The + qpdf command line tool uses this to + implement its option. + + + + + New methods + QPDFObjectHandle::newUnicodeString and + QPDFObject::unparseBinary have been + added to allow for more convenient creation of strings that + are explicitly encoded using big-endian UTF-16. This is + useful for creating strings that appear outside of content + streams, such as labels, form fields, outlines, document + metadata, etc. + + + + + A new class + QPDFObjectHandle::Rectangle has been + added to ease working with PDF rectangles, which are just + arrays of four numeric values. + + + + + + + 8.0.2: March 6, 2018