Commit 1bd2a2e79b9a0dbd42e812f3e0b0d85e26e99ec4
1 parent
92ca2a41
Prepare 8.1.0 release
Showing
5 changed files
with
202 additions
and
11 deletions
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 "—"> | 5 | <!ENTITY mdash "—"> |
| 6 | <!ENTITY ndash "–"> | 6 | <!ENTITY ndash "–"> |
| 7 | <!ENTITY nbsp " "> | 7 | <!ENTITY nbsp " "> |
| 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 "\n"; | @@ -3240,6 +3240,189 @@ print "\n"; | ||
| 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 “newline before endstream” 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 “helper” | ||
| 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> |