mirror of
https://github.com/qpdf/qpdf.git
synced 2025-03-30 21:32:23 +00:00
Prepare 7.0.0 release
This commit is contained in:
parent
4c31d3b8af
commit
0f1ce8e646
@ -1,3 +1,7 @@
|
|||||||
|
2017-09-15 Jay Berkenbilt <ejb@ql.org>
|
||||||
|
|
||||||
|
* 7.0.0: release
|
||||||
|
|
||||||
2017-09-12 Jay Berkenbilt <ejb@ql.org>
|
2017-09-12 Jay Berkenbilt <ejb@ql.org>
|
||||||
|
|
||||||
* Relicense qpdf under version 2.0 of the Apache License rather
|
* Relicense qpdf under version 2.0 of the Apache License rather
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
--enable-werror --disable-shared
|
--enable-werror --disable-shared
|
||||||
```
|
```
|
||||||
The test suite should run clean with this. This seems to be more reliable than valgrind.
|
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.
|
* 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.
|
* 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.
|
* Avoid atoi. Use QUtil::string_to_int instead. It does overflow/underflow checking.
|
||||||
|
8
TODO
8
TODO
@ -1,11 +1,3 @@
|
|||||||
Before final 7.0.0
|
|
||||||
==================
|
|
||||||
|
|
||||||
* Include information about relicensing prominently in release
|
|
||||||
announcement for packagers.
|
|
||||||
|
|
||||||
* Create release notes
|
|
||||||
|
|
||||||
Soon
|
Soon
|
||||||
====
|
====
|
||||||
|
|
||||||
|
@ -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.
|
dnl This config.in requires autoconf 2.5 or greater.
|
||||||
|
|
||||||
AC_PREREQ([2.68])
|
AC_PREREQ([2.68])
|
||||||
AC_INIT([qpdf],[7.0.b1])
|
AC_INIT([qpdf],[7.0.0])
|
||||||
|
|
||||||
AC_CONFIG_MACRO_DIR([m4])
|
AC_CONFIG_MACRO_DIR([m4])
|
||||||
AC_CONFIG_FILES([autoconf.mk])
|
AC_CONFIG_FILES([autoconf.mk])
|
||||||
@ -29,9 +29,9 @@ LT_INIT([win32-dll])
|
|||||||
# * Otherwise, increment LT_REVISION
|
# * Otherwise, increment LT_REVISION
|
||||||
|
|
||||||
# LT = libtool
|
# LT = libtool
|
||||||
LT_CURRENT=18
|
LT_CURRENT=19
|
||||||
|
LT_AGE=1
|
||||||
LT_REVISION=0
|
LT_REVISION=0
|
||||||
LT_AGE=0
|
|
||||||
AC_SUBST(LT_CURRENT)
|
AC_SUBST(LT_CURRENT)
|
||||||
AC_SUBST(LT_REVISION)
|
AC_SUBST(LT_REVISION)
|
||||||
AC_SUBST(LT_AGE)
|
AC_SUBST(LT_AGE)
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
#include <qpdf/QPDF_Null.hh>
|
#include <qpdf/QPDF_Null.hh>
|
||||||
#include <qpdf/QPDF_Dictionary.hh>
|
#include <qpdf/QPDF_Dictionary.hh>
|
||||||
|
|
||||||
std::string QPDF::qpdf_version = "7.0.b1";
|
std::string QPDF::qpdf_version = "7.0.0";
|
||||||
|
|
||||||
static char const* EMPTY_PDF =
|
static char const* EMPTY_PDF =
|
||||||
"%PDF-1.3\n"
|
"%PDF-1.3\n"
|
||||||
|
@ -5,8 +5,8 @@
|
|||||||
<!ENTITY mdash "—">
|
<!ENTITY mdash "—">
|
||||||
<!ENTITY ndash "–">
|
<!ENTITY ndash "–">
|
||||||
<!ENTITY nbsp " ">
|
<!ENTITY nbsp " ">
|
||||||
<!ENTITY swversion "7.0.b1">
|
<!ENTITY swversion "7.0.0">
|
||||||
<!ENTITY lastreleased "August 22, 2017">
|
<!ENTITY lastreleased "September 15, 2017">
|
||||||
]>
|
]>
|
||||||
<book>
|
<book>
|
||||||
<bookinfo>
|
<bookinfo>
|
||||||
@ -154,8 +154,8 @@
|
|||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
A C++ compiler that works well with STL and has the <type>long
|
A C++ compiler that works well with STL and has the <type>long
|
||||||
long</type> type. Most modern C++ compilers should fit the
|
long</type> type. Most modern C++ compilers should fit the bill
|
||||||
bill fine. QPDF is tested with gcc and Microsoft Visual C++.
|
fine. QPDF is tested with gcc, clang, and Microsoft Visual C++.
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</itemizedlist>
|
</itemizedlist>
|
||||||
@ -283,15 +283,17 @@ make
|
|||||||
treated as a command-line argument. The <option>@-</option> option
|
treated as a command-line argument. The <option>@-</option> option
|
||||||
allows arguments to be read from standard input. This allows qpdf
|
allows arguments to be read from standard input. This allows qpdf
|
||||||
to be invoked with an arbitrary number of arbitrarily long
|
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.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
<option>outfilename</option> does not have to be seekable, even
|
<option>outfilename</option> does not have to be seekable, even
|
||||||
when generating linearized files. Specifying
|
when generating linearized files. Specifying
|
||||||
“<option>--</option>” as <option>outfilename</option>
|
“<option>-</option>” as <option>outfilename</option>
|
||||||
means to write to standard output. However, you can't specify the
|
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
|
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.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
Most options require an output file, but some testing or
|
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
|
encoded in ISO-8859-1 and your terminal is configured to use
|
||||||
UTF-8, the password you supply may not work properly. There are
|
UTF-8, the password you supply may not work properly. There are
|
||||||
various approaches to handling this. For example, if you are
|
various approaches to handling this. For example, if you are
|
||||||
using Linux and have the iconv executable (part of the ICU
|
using Linux and have the iconv executable installed, you could
|
||||||
package) installed, you could pass <option>--password=`echo
|
pass <option>--password=`echo <replaceable>password</replaceable>
|
||||||
<replaceable>password</replaceable> | iconv -t
|
| iconv -t iso-8859-1`</option> to qpdf where
|
||||||
iso-8859-1`</option> to qpdf where
|
|
||||||
<replaceable>password</replaceable> is a password specified in
|
<replaceable>password</replaceable> 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
|
scope for this manual, but just be aware of this issue if you have
|
||||||
trouble with a password that contains 8-bit characters.
|
trouble with a password that contains 8-bit characters.
|
||||||
</para>
|
</para>
|
||||||
@ -904,7 +905,10 @@ outfile.pdf</option>
|
|||||||
supported generalized filters: <option>/LZWDecode</option>,
|
supported generalized filters: <option>/LZWDecode</option>,
|
||||||
<option>/FlateDecode</option>,
|
<option>/FlateDecode</option>,
|
||||||
<option>/ASCII85Decode</option>, and
|
<option>/ASCII85Decode</option>, and
|
||||||
<option>/ASCIIHexDecode</option>
|
<option>/ASCIIHexDecode</option>. We define generalized
|
||||||
|
filters as those to be used for general-purpose compression
|
||||||
|
or encoding, as opposed to filters specifically designed
|
||||||
|
for image data.
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
<listitem>
|
<listitem>
|
||||||
@ -953,9 +957,9 @@ outfile.pdf</option>
|
|||||||
</listitem>
|
</listitem>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
<option>uncompress</option>: uncompress stream data when
|
<option>uncompress</option>: uncompress stream data
|
||||||
possible; equivalent to
|
compressed with generalized filters when possible;
|
||||||
<option>--compress-streams=n</option>
|
equivalent to <option>--compress-streams=n</option>
|
||||||
<option>--decode-level=generalized</option>
|
<option>--decode-level=generalized</option>
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
@ -1130,18 +1134,6 @@ outfile.pdf</option>
|
|||||||
results in smaller files. This behavior may also be explicitly
|
results in smaller files. This behavior may also be explicitly
|
||||||
requested with <option>--stream-data=compress</option>.
|
requested with <option>--stream-data=compress</option>.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
|
||||||
When <option>--stream-data=preserve</option> is specified, qpdf
|
|
||||||
will never attempt to change the filtering of any stream data.
|
|
||||||
</para>
|
|
||||||
<para>
|
|
||||||
When <option>--stream-data=uncompress</option> is specified, qpdf
|
|
||||||
will attempt to remove any non-lossy filters that it supports.
|
|
||||||
This includes <literal>/FlateDecode</literal>,
|
|
||||||
<literal>/LZWDecode</literal>, <literal>/ASCII85Decode</literal>,
|
|
||||||
and <literal>/ASCIIHexDecode</literal>. This can be very useful
|
|
||||||
for inspecting the contents of various streams.
|
|
||||||
</para>
|
|
||||||
<para>
|
<para>
|
||||||
When <option>--normalize-content=y</option> is specified, qpdf
|
When <option>--normalize-content=y</option> is specified, qpdf
|
||||||
will attempt to normalize whitespace and newlines in page content
|
will attempt to normalize whitespace and newlines in page content
|
||||||
@ -1386,7 +1378,14 @@ outfile.pdf</option>
|
|||||||
conditions that <option>--check</option> detects. These are
|
conditions that <option>--check</option> detects. These are
|
||||||
issued as warnings instead of errors. If qpdf finds no errors
|
issued as warnings instead of errors. If qpdf finds no errors
|
||||||
but finds warnings, it will exit with a status of 3 (as of
|
but finds warnings, it will exit with a status of 3 (as of
|
||||||
version 2.0.4).
|
version 2.0.4). When <option>--check</option> is combined
|
||||||
|
with other options, checks are always performed before any
|
||||||
|
other options are processed. For erroneous files,
|
||||||
|
<option>--check</option> will cause qpdf to attempt to
|
||||||
|
recover, after which other options are effectively operating
|
||||||
|
on the recovered file. Combining <option>--check</option> with
|
||||||
|
other options in this way can be useful for manually
|
||||||
|
recovering severely damaged files.
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
@ -2924,6 +2923,237 @@ print "\n";
|
|||||||
For a detailed list of changes, please see the file
|
For a detailed list of changes, please see the file
|
||||||
<filename>ChangeLog</filename> in the source distribution.
|
<filename>ChangeLog</filename> in the source distribution.
|
||||||
</para>
|
</para>
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>7.0.0: September 15, 2017</term>
|
||||||
|
<listitem>
|
||||||
|
<itemizedlist>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Packaging and Distribution Changes
|
||||||
|
</para>
|
||||||
|
<itemizedlist>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
QPDF's primary license is now <ulink
|
||||||
|
url="http://www.apache.org/licenses/LICENSE-2.0">version 2.0
|
||||||
|
of the Apache License</ulink> 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.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
QPDF no longer has a dependency on the PCRE (Perl-Compatible
|
||||||
|
Regular Expression) library. QPDF now has an added
|
||||||
|
dependency on the JPEG library.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
</listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
<itemizedlist>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Bug Fixes
|
||||||
|
</para>
|
||||||
|
<itemizedlist>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
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.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
</listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
<itemizedlist>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
New Features
|
||||||
|
</para>
|
||||||
|
<itemizedlist>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
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
|
||||||
|
<option>--compress-streams</option> and
|
||||||
|
<option>--decode-level</option> and methods
|
||||||
|
<function>QPDFWriter::setCompressStreams</function> and
|
||||||
|
<function>QPDFWriter::setDecodeLevel</function>.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
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.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Page rotation is now supported and accessible from both the
|
||||||
|
library and the command line.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
<classname>QPDFWriter</classname> 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.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
</listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
<itemizedlist>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Enhancements to the <command>qpdf</command> Command-line Tool.
|
||||||
|
All new options listed here are documented in more detail in
|
||||||
|
<xref linkend="ref.using"/>.
|
||||||
|
</para>
|
||||||
|
<itemizedlist>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Command-line arguments can now be read from files or
|
||||||
|
standard input using <literal>@file</literal> or
|
||||||
|
<literal>@-</literal> syntax. Please see <xref
|
||||||
|
linkend="ref.invocation"/>.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
<option>--rotate</option>: request page rotation
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
<option>--newline-before-endstream</option>: ensure that a
|
||||||
|
newline appears before every <literal>endstream</literal>
|
||||||
|
keyword in the file; used to prevent qpdf from breaking
|
||||||
|
PDF/A compliance on already compliant files.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
<option>--preserve-unreferenced</option>: preserve
|
||||||
|
unreferenced objects in the input PDF
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
<option>--split-pages</option>: break output into chunks
|
||||||
|
with fixed numbers of pages
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
<option>--verbose</option>: print the name of each output
|
||||||
|
file that is created
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
<option>--compress-streams</option> and
|
||||||
|
<option>--decode-level</option> replace
|
||||||
|
<option>--stream-data</option> for improving granularity of
|
||||||
|
controlling compression and decompression of stream data.
|
||||||
|
The <option>--stream-data</option> option will remain
|
||||||
|
available.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
When running <command>qpdf --check</command> 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.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Process <command>--pages</command> earlier so that other
|
||||||
|
options like <option>--show-pages</option> or
|
||||||
|
<option>--split-pages</option> can operate on the file after
|
||||||
|
page splitting/merging has occurred.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
</listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
<itemizedlist>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
API Changes. All new API calls are documented in their
|
||||||
|
respective classes' header files.
|
||||||
|
</para>
|
||||||
|
<itemizedlist>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
<function>QPDFObjectHandle::rotatePage</function>: apply
|
||||||
|
rotation to a page object
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
<function>QPDFWriter::setNewlineBeforeEndstream</function>:
|
||||||
|
force newline to appear before <literal>endstream</literal>
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
<function>QPDFWriter::setPreserveUnreferencedObjects</function>:
|
||||||
|
preserve unreferenced objects that appear in the input PDF.
|
||||||
|
The default behavior is to discard them.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
New <classname>Pipeline</classname> types
|
||||||
|
<classname>Pl_RunLength</classname> and
|
||||||
|
<classname>Pl_DCT</classname> are available for developers
|
||||||
|
who wish to produce or consume RunLength or DCT stream data
|
||||||
|
directly. The <filename>examples/pdf-create.cc</filename>
|
||||||
|
example illustrates their use.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
<function>QPDFWriter::setCompressStreams</function> and
|
||||||
|
<function>QPDFWriter::setDecodeLevel</function> methods
|
||||||
|
control handling of different types of stream compression.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Add new C API functions
|
||||||
|
<function>qpdf_set_compress_streams</function>,
|
||||||
|
<function>qpdf_set_decode_level</function>,
|
||||||
|
<function>qpdf_set_preserve_unreferenced_objects</function>,
|
||||||
|
and <function>qpdf_set_newline_before_endstream</function>
|
||||||
|
corresponding to the new <classname>QPDFWriter</classname>
|
||||||
|
methods.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
</listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
<variablelist>
|
<variablelist>
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term>6.0.0: November 10, 2015</term>
|
<term>6.0.0: November 10, 2015</term>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user