diff --git a/ChangeLog b/ChangeLog index 18b48c77..96fdacd4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2017-09-15 Jay Berkenbilt + + * 7.0.0: release + 2017-09-12 Jay Berkenbilt * Relicense qpdf under version 2.0 of the Apache License rather diff --git a/README-maintainer.md b/README-maintainer.md index 9aa29d38..7563de6d 100644 --- a/README-maintainer.md +++ b/README-maintainer.md @@ -14,7 +14,7 @@ --enable-werror --disable-shared ``` The test suite should run clean with this. This seems to be more reliable than valgrind. -* Test with clang. +* Test with clang. Pass `CC=clang CXX=clang++` to `./configure`. * Check all open issues in the sourceforge trackers and on github. * If any interfaces were added or changed, check C API to see whether changes are appropriate there as well. If necessary, review the casting policy in the manual, and ensure that integer types are properly handled. * Avoid atoi. Use QUtil::string_to_int instead. It does overflow/underflow checking. diff --git a/TODO b/TODO index 0d1ea81a..87f5fbf8 100644 --- a/TODO +++ b/TODO @@ -1,11 +1,3 @@ -Before final 7.0.0 -================== - - * Include information about relicensing prominently in release - announcement for packagers. - - * Create release notes - Soon ==== diff --git a/configure.ac b/configure.ac index 51ef10f5..1b94de65 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],[7.0.b1]) +AC_INIT([qpdf],[7.0.0]) AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_FILES([autoconf.mk]) @@ -29,9 +29,9 @@ LT_INIT([win32-dll]) # * Otherwise, increment LT_REVISION # LT = libtool -LT_CURRENT=18 +LT_CURRENT=19 +LT_AGE=1 LT_REVISION=0 -LT_AGE=0 AC_SUBST(LT_CURRENT) AC_SUBST(LT_REVISION) AC_SUBST(LT_AGE) diff --git a/libqpdf/QPDF.cc b/libqpdf/QPDF.cc index 1ec0d6b6..88117222 100644 --- a/libqpdf/QPDF.cc +++ b/libqpdf/QPDF.cc @@ -19,7 +19,7 @@ #include #include -std::string QPDF::qpdf_version = "7.0.b1"; +std::string QPDF::qpdf_version = "7.0.0"; static char const* EMPTY_PDF = "%PDF-1.3\n" diff --git a/manual/qpdf-manual.xml b/manual/qpdf-manual.xml index 0402fe72..1e907e20 100644 --- a/manual/qpdf-manual.xml +++ b/manual/qpdf-manual.xml @@ -5,8 +5,8 @@ - - + + ]> @@ -154,8 +154,8 @@ A C++ compiler that works well with STL and has the long - long type. Most modern C++ compilers should fit the - bill fine. QPDF is tested with gcc and Microsoft Visual C++. + long type. Most modern C++ compilers should fit the bill + fine. QPDF is tested with gcc, clang, and Microsoft Visual C++. @@ -283,15 +283,17 @@ make treated as a command-line argument. The option allows arguments to be read from standard input. This allows qpdf to be invoked with an arbitrary number of arbitrarily long - arguments. + arguments. It is also very useful for avoiding having to pass + passwords on the command line. does not have to be seekable, even when generating linearized files. Specifying - “” as + “” as means to write to standard output. However, you can't specify the same file as both the input and the output because qpdf reads data - from the input file as it writes to the output file. + from the input file as it writes to the output file. QPDF attempts + to detect this case and fail without overwriting the output file. Most options require an output file, but some testing or @@ -507,12 +509,11 @@ make encoded in ISO-8859-1 and your terminal is configured to use UTF-8, the password you supply may not work properly. There are various approaches to handling this. For example, if you are - using Linux and have the iconv executable (part of the ICU - package) installed, you could pass to qpdf where + using Linux and have the iconv executable installed, you could + pass to qpdf where password is a password specified in - your terminal's locale. A detailed discussion of this is out of + your terminal's locale. A detailed discussion of this is out of scope for this manual, but just be aware of this issue if you have trouble with a password that contains 8-bit characters. @@ -904,7 +905,10 @@ outfile.pdf supported generalized filters: , , , and - + . We define generalized + filters as those to be used for general-purpose compression + or encoding, as opposed to filters specifically designed + for image data. @@ -953,9 +957,9 @@ outfile.pdf - : uncompress stream data when - possible; equivalent to - + : uncompress stream data + compressed with generalized filters when possible; + equivalent to @@ -1130,18 +1134,6 @@ outfile.pdf results in smaller files. This behavior may also be explicitly requested with . - - When is specified, qpdf - will never attempt to change the filtering of any stream data. - - - When is specified, qpdf - will attempt to remove any non-lossy filters that it supports. - This includes /FlateDecode, - /LZWDecode, /ASCII85Decode, - and /ASCIIHexDecode. This can be very useful - for inspecting the contents of various streams. - When is specified, qpdf will attempt to normalize whitespace and newlines in page content @@ -1386,7 +1378,14 @@ outfile.pdf conditions that detects. These are issued as warnings instead of errors. If qpdf finds no errors but finds warnings, it will exit with a status of 3 (as of - version 2.0.4). + version 2.0.4). When is combined + with other options, checks are always performed before any + other options are processed. For erroneous files, + will cause qpdf to attempt to + recover, after which other options are effectively operating + on the recovered file. Combining with + other options in this way can be useful for manually + recovering severely damaged files. @@ -2924,6 +2923,237 @@ print "\n"; For a detailed list of changes, please see the file ChangeLog in the source distribution. + + + 7.0.0: September 15, 2017 + + + + + Packaging and Distribution Changes + + + + + QPDF's primary license is now version 2.0 + of the Apache License rather than version 2.0 of the + Artistic License. You may still, at your option, consider + qpdf to be licensed with version 2.0 of the Artistic + license. + + + + + QPDF no longer has a dependency on the PCRE (Perl-Compatible + Regular Expression) library. QPDF now has an added + dependency on the JPEG library. + + + + + + + + + Bug Fixes + + + + + This release contains many bug fixes for various infinite + loops, memory leaks, and other memory errors that could be + encountered with specially crafted or otherwise erroneous + PDF files. + + + + + + + + + New Features + + + + + QPDF now supports reading and writing streams encoded with + JPEG or RunLength encoding. Library API enhancements and + command-line options have been added to control this + behavior. See command-line options + and + and methods + QPDFWriter::setCompressStreams and + QPDFWriter::setDecodeLevel. + + + + + QPDF is much better at recovering from broken files. In most + cases, qpdf will skip invalid objects and will preserve + broken stream data by not attempting to filter broken + streams. QPDF is now able to recover or at least not crash + on dozens of broken test files I have received over the past + few years. + + + + + Page rotation is now supported and accessible from both the + library and the command line. + + + + + QPDFWriter supports writing files in + a way that preserves PCLm compliance in support of + driverless printing. This is very specialized and is only + useful to applications that already know how to create PCLm + files. + + + + + + + + + Enhancements to the qpdf Command-line Tool. + All new options listed here are documented in more detail in + . + + + + + Command-line arguments can now be read from files or + standard input using @file or + @- syntax. Please see . + + + + + : request page rotation + + + + + : ensure that a + newline appears before every endstream + keyword in the file; used to prevent qpdf from breaking + PDF/A compliance on already compliant files. + + + + + : preserve + unreferenced objects in the input PDF + + + + + : break output into chunks + with fixed numbers of pages + + + + + : print the name of each output + file that is created + + + + + and + replace + for improving granularity of + controlling compression and decompression of stream data. + The option will remain + available. + + + + + When running qpdf --check with other + options, checks are always run first. This enables qpdf to + perform its full recovery logic before outputting other + information. This can be especially useful when manually + recovering broken files, looking at qpdf's regenerated cross + reference table, or other similar operations. + + + + + Process --pages earlier so that other + options like or + can operate on the file after + page splitting/merging has occurred. + + + + + + + + + API Changes. All new API calls are documented in their + respective classes' header files. + + + + + QPDFObjectHandle::rotatePage: apply + rotation to a page object + + + + + QPDFWriter::setNewlineBeforeEndstream: + force newline to appear before endstream + + + + + QPDFWriter::setPreserveUnreferencedObjects: + preserve unreferenced objects that appear in the input PDF. + The default behavior is to discard them. + + + + + New Pipeline types + Pl_RunLength and + Pl_DCT are available for developers + who wish to produce or consume RunLength or DCT stream data + directly. The examples/pdf-create.cc + example illustrates their use. + + + + + QPDFWriter::setCompressStreams and + QPDFWriter::setDecodeLevel methods + control handling of different types of stream compression. + + + + + Add new C API functions + qpdf_set_compress_streams, + qpdf_set_decode_level, + qpdf_set_preserve_unreferenced_objects, + and qpdf_set_newline_before_endstream + corresponding to the new QPDFWriter + methods. + + + + + + + + 6.0.0: November 10, 2015