Commit 1bd2a2e79b9a0dbd42e812f3e0b0d85e26e99ec4

Authored by Jay Berkenbilt
1 parent 92ca2a41

Prepare 8.1.0 release

ChangeLog
  1 +2018-06-23 Jay Berkenbilt <ejb@ql.org>
  2 +
  3 + * 8.1.0: release
  4 +
1 2018-06-22 Jay Berkenbilt <ejb@ql.org> 5 2018-06-22 Jay Berkenbilt <ejb@ql.org>
2 6
  7 + * Bug fix: properly decrypt files with 40-bit keys that use
  8 + revision 3 of the security handler. Prior to this, qpdf was
  9 + reporting "invalid password" in this case. Fixes #212.
  10 +
3 * With --verbose, print information about each input file when 11 * With --verbose, print information about each input file when
4 merging files. 12 merging files.
5 13
@@ -21,7 +29,7 @@ @@ -21,7 +29,7 @@
21 performance, this allows you to operate on many files without 29 performance, this allows you to operate on many files without
22 opening too many files at the operating system level. 30 opening too many files at the operating system level.
23 31
24 - * Add new option --preserved-unreferenced-resources, which 32 + * Add new option --preserve-unreferenced-resources, which
25 suppresses removal of unreferenced objects from page resource 33 suppresses removal of unreferenced objects from page resource
26 dictionaries during page splitting operations. 34 dictionaries during page splitting operations.
27 35
README-maintainer
@@ -88,7 +88,12 @@ RELEASE PREPARATION @@ -88,7 +88,12 @@ RELEASE PREPARATION
88 * Check out the current version 88 * Check out the current version
89 * ./autogen.sh && ./configure --enable-werror && make -j$(nproc) build_libqpdf 89 * ./autogen.sh && ./configure --enable-werror && make -j$(nproc) build_libqpdf
90 * Checkout the last release 90 * Checkout the last release
91 - * make check NO_REBUILD=1 91 + * make -k check NO_REBUILD=1
  92 +
  93 +* Update release notes in manual. Look at diffs and ChangeLog. Update
  94 + release date in `manual/qpdf-manual.xml`. Remember to ensure that
  95 + the entities at the top of the document are consistent with the
  96 + release notes for both version and release date.
92 97
93 * Make sure version numbers are consistent in the following locations: 98 * Make sure version numbers are consistent in the following locations:
94 * configure.ac 99 * configure.ac
@@ -96,11 +101,6 @@ RELEASE PREPARATION @@ -96,11 +101,6 @@ RELEASE PREPARATION
96 * manual/qpdf-manual.xml 101 * manual/qpdf-manual.xml
97 `make_dist` verifies this consistency. 102 `make_dist` verifies this consistency.
98 103
99 -* Update release notes in manual. Look at diffs and ChangeLog. Update  
100 - release date in `manual/qpdf-manual.xml`. Remember to ensure that  
101 - the entities at the top of the document are consistent with the  
102 - release notes for both version and release date.  
103 -  
104 * Add a release entry to ChangeLog. 104 * Add a release entry to ChangeLog.
105 105
106 106
configure.ac
@@ -2,7 +2,7 @@ dnl Process this file with autoconf to produce a configure script. @@ -2,7 +2,7 @@ dnl Process this file with autoconf to produce a configure script.
2 dnl This config.in requires autoconf 2.5 or greater. 2 dnl This config.in requires autoconf 2.5 or greater.
3 3
4 AC_PREREQ([2.68]) 4 AC_PREREQ([2.68])
5 -AC_INIT([qpdf],[8.0.2]) 5 +AC_INIT([qpdf],[8.1.0])
6 6
7 AC_CONFIG_MACRO_DIR([m4]) 7 AC_CONFIG_MACRO_DIR([m4])
8 AC_CONFIG_FILES([autoconf.mk]) 8 AC_CONFIG_FILES([autoconf.mk])
libqpdf/QPDF.cc
@@ -19,7 +19,7 @@ @@ -19,7 +19,7 @@
19 #include <qpdf/QPDF_Null.hh> 19 #include <qpdf/QPDF_Null.hh>
20 #include <qpdf/QPDF_Dictionary.hh> 20 #include <qpdf/QPDF_Dictionary.hh>
21 21
22 -std::string QPDF::qpdf_version = "8.0.2"; 22 +std::string QPDF::qpdf_version = "8.1.0";
23 23
24 static char const* EMPTY_PDF = 24 static char const* EMPTY_PDF =
25 "%PDF-1.3\n" 25 "%PDF-1.3\n"
manual/qpdf-manual.xml
@@ -5,8 +5,8 @@ @@ -5,8 +5,8 @@
5 <!ENTITY mdash "&#x2014;"> 5 <!ENTITY mdash "&#x2014;">
6 <!ENTITY ndash "&#x2013;"> 6 <!ENTITY ndash "&#x2013;">
7 <!ENTITY nbsp "&#xA0;"> 7 <!ENTITY nbsp "&#xA0;">
8 -<!ENTITY swversion "8.0.2">  
9 -<!ENTITY lastreleased "March 6, 2018"> 8 +<!ENTITY swversion "8.1.0">
  9 +<!ENTITY lastreleased "June 22, 2018">
10 ]> 10 ]>
11 <book> 11 <book>
12 <bookinfo> 12 <bookinfo>
@@ -3240,6 +3240,189 @@ print &quot;\n&quot;; @@ -3240,6 +3240,189 @@ print &quot;\n&quot;;
3240 </para> 3240 </para>
3241 <variablelist> 3241 <variablelist>
3242 <varlistentry> 3242 <varlistentry>
  3243 + <term>8.1.0: June 23, 2018</term>
  3244 + <listitem>
  3245 + <itemizedlist>
  3246 + <listitem>
  3247 + <para>
  3248 + Usability Improvements
  3249 + </para>
  3250 + <itemizedlist>
  3251 + <listitem>
  3252 + <para>
  3253 + When splitting files, qpdf detects fonts and images that the
  3254 + document metadata claims are referenced from a page but are
  3255 + not actually referenced and omits them from the output file.
  3256 + This change can cause a significant reduction in the size of
  3257 + split PDF files for files created by some software packages.
  3258 + Prior versions of qpdf would believe the document metadata
  3259 + and sometimes include all the images from all the other
  3260 + pages even though the pages were no longer present. In the
  3261 + unlikely event that the old behavior should be desired, it
  3262 + can be enabled by specifying
  3263 + <option>--preserve-unreferenced-resources</option>. For
  3264 + additional details, please see <xref
  3265 + linkend="ref.advanced-transformation"/>.
  3266 + </para>
  3267 + </listitem>
  3268 + <listitem>
  3269 + <para>
  3270 + When merging multiple PDF files, qpdf no longer leaves all
  3271 + the files open. This makes it possible to merge numbers of
  3272 + files that may exceed the operating system's limit for the
  3273 + maximum number of open files.
  3274 + </para>
  3275 + </listitem>
  3276 + <listitem>
  3277 + <para>
  3278 + The <option>--rotate</option> option's syntax has been
  3279 + extended to make the page range optional. If you specify
  3280 + <option>--rotate=<replaceable>angle</replaceable></option>
  3281 + without specifying a page range, the rotation will be
  3282 + applied to all pages. This can be especially useful for
  3283 + adjusting a PDF created from a multi-page document that
  3284 + was scanned upside down.
  3285 + </para>
  3286 + </listitem>
  3287 + <listitem>
  3288 + <para>
  3289 + When merging multiple files, the <option>--verbose</option>
  3290 + option now prints information about each file as it operates
  3291 + on that file.
  3292 + </para>
  3293 + </listitem>
  3294 + <listitem>
  3295 + <para>
  3296 + When the <option>--progress</option> option is specified,
  3297 + qpdf will print a running indicator of its best guess at how
  3298 + far through the writing process it is. Note that, as with
  3299 + all progress meters, it's an approximation. This option is
  3300 + implemented in a way that makes it useful for software that
  3301 + uses the qpdf library; see API Enhancements below.
  3302 + </para>
  3303 + </listitem>
  3304 + </itemizedlist>
  3305 + </listitem>
  3306 + <listitem>
  3307 + <para>
  3308 + Bug Fixes
  3309 + </para>
  3310 + <itemizedlist>
  3311 + <listitem>
  3312 + <para>
  3313 + Properly decrypt files that use revision 3 of the standard
  3314 + security handler but use 40 bit keys (even though revision 3
  3315 + supports 128-bit keys).
  3316 + </para>
  3317 + </listitem>
  3318 + <listitem>
  3319 + <para>
  3320 + Limit depth of nested data structures to prevent crashes
  3321 + from certain types of malformed (malicious) PDFs.
  3322 + </para>
  3323 + </listitem>
  3324 + <listitem>
  3325 + <para>
  3326 + In &ldquo;newline before endstream&rdquo; mode, insert the
  3327 + required extra newline before the
  3328 + <literal>endstream</literal> at the end of object streams.
  3329 + This one case was previously omitted.
  3330 + </para>
  3331 + </listitem>
  3332 + </itemizedlist>
  3333 + </listitem>
  3334 + <listitem>
  3335 + <para>
  3336 + API Enhancements
  3337 + </para>
  3338 + <itemizedlist>
  3339 + <listitem>
  3340 + <para>
  3341 + The first round of higher level &ldquo;helper&rdquo;
  3342 + interfaces has been introduced. These are designed to
  3343 + provide a more convenient way of interacting with certain
  3344 + document features than using
  3345 + <classname>QPDFObjectHandle</classname> directly. For
  3346 + details on helpers, see <xref
  3347 + linkend="ref.helper-classes"/>. Specific additional
  3348 + interfaces are described below.
  3349 + </para>
  3350 + </listitem>
  3351 + <listitem>
  3352 + <para>
  3353 + Add two new document helper classes:
  3354 + <classname>QPDFPageDocumentHelper</classname> for working
  3355 + with pages, and
  3356 + <classname>QPDFAcroFormDocumentHelper</classname> for
  3357 + working with interactive forms. No old methods have been
  3358 + removed, but <classname>QPDFPageDocumentHelper</classname>
  3359 + is now the preferred way to perform operations on pages
  3360 + rather than calling the old methods in
  3361 + <classname>QPDFObjectHandle</classname> and
  3362 + <classname>QPDF</classname> directly. Comments in the header
  3363 + files direct you to the new interfaces. Please see the
  3364 + header files and <filename>ChangeLog</filename> for
  3365 + additional details.
  3366 + </para>
  3367 + </listitem>
  3368 + <listitem>
  3369 + <para>
  3370 + Add three new object helper class:
  3371 + <classname>QPDFPageObjectHelper</classname> for pages,
  3372 + <classname>QPDFFormFieldObjectHelper</classname> for
  3373 + interactive form fields, and
  3374 + <classname>QPDFAnnotationObjectHelper</classname> for
  3375 + annotations. All three classes are fairly sparse at the
  3376 + moment, but they have some useful, basic functionality.
  3377 + </para>
  3378 + </listitem>
  3379 + <listitem>
  3380 + <para>
  3381 + A new example program
  3382 + <filename>examples/pdf-set-form-values.cc</filename> has
  3383 + been added that illustrates use of the new document and
  3384 + object helpers.
  3385 + </para>
  3386 + </listitem>
  3387 + <listitem>
  3388 + <para>
  3389 + The method
  3390 + <function>QPDFWriter::registerProgressReporter</function>
  3391 + has been added. This method allows you to register a
  3392 + function that is called by <classname>QPDFWriter</classname>
  3393 + to update your idea of the percentage it thinks it is
  3394 + through writing its output. Client programs can use this to
  3395 + implement reasonably accurate progress meters. The
  3396 + <command>qpdf</command> command line tool uses this to
  3397 + implement its <option>--progress</option> option.
  3398 + </para>
  3399 + </listitem>
  3400 + <listitem>
  3401 + <para>
  3402 + New methods
  3403 + <function>QPDFObjectHandle::newUnicodeString</function> and
  3404 + <function>QPDFObject::unparseBinary</function> have been
  3405 + added to allow for more convenient creation of strings that
  3406 + are explicitly encoded using big-endian UTF-16. This is
  3407 + useful for creating strings that appear outside of content
  3408 + streams, such as labels, form fields, outlines, document
  3409 + metadata, etc.
  3410 + </para>
  3411 + </listitem>
  3412 + <listitem>
  3413 + <para>
  3414 + A new class
  3415 + <classname>QPDFObjectHandle::Rectangle</classname> has been
  3416 + added to ease working with PDF rectangles, which are just
  3417 + arrays of four numeric values.
  3418 + </para>
  3419 + </listitem>
  3420 + </itemizedlist>
  3421 + </listitem>
  3422 + </itemizedlist>
  3423 + </listitem>
  3424 + </varlistentry>
  3425 + <varlistentry>
3243 <term>8.0.2: March 6, 2018</term> 3426 <term>8.0.2: March 6, 2018</term>
3244 <listitem> 3427 <listitem>
3245 <itemizedlist> 3428 <itemizedlist>