mirror of
https://github.com/qpdf/qpdf.git
synced 2024-09-28 04:59:05 +00:00
prepare 2.1.rc1 for release
git-svn-id: svn+q:///qpdf/trunk@901 71b93d88-0707-0410-a8cf-f5a4172ac649
This commit is contained in:
parent
b0a6f495d0
commit
ace2a031b5
12
ChangeLog
12
ChangeLog
@ -1,3 +1,7 @@
|
|||||||
|
2009-10-25 Jay Berkenbilt <ejb@ql.org>
|
||||||
|
|
||||||
|
* 2.1.rc1: release
|
||||||
|
|
||||||
2009-10-19 Jay Berkenbilt <jberkenb@argonst.com>
|
2009-10-19 Jay Berkenbilt <jberkenb@argonst.com>
|
||||||
|
|
||||||
* include/qpdf/QPDF.hh (QPDF): getWarnings now returns a list of
|
* include/qpdf/QPDF.hh (QPDF): getWarnings now returns a list of
|
||||||
@ -21,6 +25,12 @@
|
|||||||
* libqpdf/QPDFWriter.cc (unparseObject): avoid compressing
|
* libqpdf/QPDFWriter.cc (unparseObject): avoid compressing
|
||||||
Metadata streams if possible.
|
Metadata streams if possible.
|
||||||
|
|
||||||
|
2009-10-13 Jay Berkenbilt <ejb@ql.org>
|
||||||
|
|
||||||
|
* Upgrade embedded qtest to version 1.4, which allows the test
|
||||||
|
suite to be run in Windows with MSYS and ActiveState Perl rather
|
||||||
|
than requiring Cygwin perl.
|
||||||
|
|
||||||
2009-10-04 Jay Berkenbilt <ejb@ql.org>
|
2009-10-04 Jay Berkenbilt <ejb@ql.org>
|
||||||
|
|
||||||
* Implement support AES encrypt and crypt filters. Implementation
|
* Implement support AES encrypt and crypt filters. Implementation
|
||||||
@ -60,7 +70,7 @@
|
|||||||
|
|
||||||
2009-05-03 Jay Berkenbilt <ejb@ql.org>
|
2009-05-03 Jay Berkenbilt <ejb@ql.org>
|
||||||
|
|
||||||
* 2.0.6. release
|
* 2.0.6: release
|
||||||
|
|
||||||
* libqpdf/QPDF_Stream.cc (filterable): ignore /DecodeParms if it's
|
* libqpdf/QPDF_Stream.cc (filterable): ignore /DecodeParms if it's
|
||||||
not a type we recognize. (Fixes qpdf-Bugs-2779746.)
|
not a type we recognize. (Fixes qpdf-Bugs-2779746.)
|
||||||
|
20
README
20
README
@ -9,6 +9,18 @@ Artistic License which may be found in the source distribution as
|
|||||||
warranty.
|
warranty.
|
||||||
|
|
||||||
|
|
||||||
|
Prerequisites
|
||||||
|
=============
|
||||||
|
|
||||||
|
QPDF depends on external libraries "zlib" and "pcre". These are part
|
||||||
|
of virtually all Linux distributions and are readily available;
|
||||||
|
download information appears in the documentation. You can also
|
||||||
|
download the external library distributions in source from from qpdf's
|
||||||
|
download site. For Windows, you can download pre-built binary
|
||||||
|
verisons of those libraries for some compilers; see README.windows for
|
||||||
|
additional details.
|
||||||
|
|
||||||
|
|
||||||
Licensing terms of embedded software
|
Licensing terms of embedded software
|
||||||
====================================
|
====================================
|
||||||
|
|
||||||
@ -71,9 +83,11 @@ user's manual can be found in the "doc" directory. The docbook
|
|||||||
sources to the user's manual can be found in the "manual" directory.
|
sources to the user's manual can be found in the "manual" directory.
|
||||||
|
|
||||||
The software library is just libqpdf, and all the header files are in
|
The software library is just libqpdf, and all the header files are in
|
||||||
the qpdf subdirectory. If you link with -lqpdf and your system does
|
the qpdf subdirectory. If you link statically with -lqpdf, then you
|
||||||
not know how to read libtool .la files, then you will also need to
|
will also need to link with -lpcre and -lz. The shared qpdf library
|
||||||
link with -lpcre and -lz.
|
is linked with -lpcre and -lz, and none of qpdf's public header files
|
||||||
|
directly include files from pcre or libz, so in many cases, qpdf's
|
||||||
|
development files are self contained.
|
||||||
|
|
||||||
To learn about using the library, please read comments in the header
|
To learn about using the library, please read comments in the header
|
||||||
files in include/qpdf, especially QPDF.hh, QPDFObjectHandle.hh, and
|
files in include/qpdf, especially QPDF.hh, QPDFObjectHandle.hh, and
|
||||||
|
33
README-what-to-download.txt
Normal file
33
README-what-to-download.txt
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
To build from source for Linux or other UNIX/UNIX-like systems, it is
|
||||||
|
generally sufficient to download just the source qpdf-<version>.tar.gz
|
||||||
|
file.
|
||||||
|
|
||||||
|
For Windows, there are several additional files that you might want to
|
||||||
|
download.
|
||||||
|
|
||||||
|
* qpdf-<version>-bin-mingw.zip
|
||||||
|
|
||||||
|
If you just want to use the qpdf commandline program or use the
|
||||||
|
qpdf DLL's C-language interface, you can download this file. You
|
||||||
|
can also download this version if you are using MINGW's gcc 4.4 and
|
||||||
|
want to program using the C++ interface.
|
||||||
|
|
||||||
|
* qpdf-<version>-bin-msvc.zip
|
||||||
|
|
||||||
|
If you want to program using qpdf's C++ interface and you are using
|
||||||
|
Microsoft Visual C++ .NET 2008 (VC9), you can download this file.
|
||||||
|
|
||||||
|
* qpdf-external-libs-bin.zip
|
||||||
|
|
||||||
|
If you want to build qpdf for Windows yourself with either MINGW's
|
||||||
|
gcc 4.4 or VC9, you can download this file and extract it inside
|
||||||
|
the qpdf source distribution. Please refer to README.windows in
|
||||||
|
the qpdf source distribution for additional details.
|
||||||
|
|
||||||
|
* qpdf-external-libs-src.zip
|
||||||
|
|
||||||
|
If you want to build the external libraries on your own (for
|
||||||
|
Windows or anything else), you can download this archive. In
|
||||||
|
addition to including unmodified distributions of pcre and zlib, it
|
||||||
|
includes a README file and some scripts to help you build them for
|
||||||
|
Windows.
|
@ -11,7 +11,7 @@ Release Reminders
|
|||||||
|
|
||||||
configure.ac
|
configure.ac
|
||||||
qpdf.spec
|
qpdf.spec
|
||||||
qpdf/qpdf.cc
|
libqpdf/QPDF.cc
|
||||||
manual/qpdf-manual.xml
|
manual/qpdf-manual.xml
|
||||||
|
|
||||||
make_dist verifies this consistency.
|
make_dist verifies this consistency.
|
||||||
@ -55,7 +55,8 @@ Release Reminders
|
|||||||
* Remember to update documentation in the "files" subdirectory of the
|
* Remember to update documentation in the "files" subdirectory of the
|
||||||
website on sourceforge.net.
|
website on sourceforge.net.
|
||||||
|
|
||||||
* Create a tag in the version control system.
|
* Create a tag in the version control system, and make backups of the
|
||||||
|
actual releases.
|
||||||
|
|
||||||
* When releasing on source forge, external-libs distributions go in
|
* When releasing on source forge, external-libs distributions go in
|
||||||
external-libs/yyyymmdd, and qpdf distributions go in qpdf/vvv
|
external-libs/yyyymmdd, and qpdf distributions go in qpdf/vvv
|
||||||
|
42
TODO
42
TODO
@ -1,46 +1,8 @@
|
|||||||
2.1
|
2.1
|
||||||
===
|
===
|
||||||
|
|
||||||
* Update documentation to reflect new command line flags and any
|
* Remove rc1 from version; search for rc1 in release notes as
|
||||||
other relevant changes. Should read through ChangeLog and the
|
well...just change rc1 to 2.1 and update the date.
|
||||||
manual before releasing 2.1.
|
|
||||||
|
|
||||||
* Write documentation section on source-level API changes between 2.0
|
|
||||||
and 2.1.
|
|
||||||
|
|
||||||
* Add comments for the security functions that map them back to the
|
|
||||||
items in Adobe's products.
|
|
||||||
|
|
||||||
* Create the following packages:
|
|
||||||
|
|
||||||
- README-what-to-download.txt -- descriptions of what to download
|
|
||||||
on Windows, etc.
|
|
||||||
|
|
||||||
* make_windows_releases:
|
|
||||||
|
|
||||||
- make sure external-libs exists; if not, tell the user to extract
|
|
||||||
it
|
|
||||||
|
|
||||||
- set path to include libqpdf/build
|
|
||||||
|
|
||||||
- ./config-mingw; make check install
|
|
||||||
|
|
||||||
- make distclean
|
|
||||||
|
|
||||||
- ./config-msvc; make check install
|
|
||||||
|
|
||||||
- instruct the user to create qpdf-vvv-bin-mingw.zip and
|
|
||||||
qpdf-vvv-bin-msvc.zip from the contents of the install-mingw and
|
|
||||||
install-msys directories.
|
|
||||||
|
|
||||||
*** still have to make sure libqpdf.a/qpdf.lib doesn't have to be
|
|
||||||
in the same directory as the dll, but I'm pretty sure it
|
|
||||||
doesn't.
|
|
||||||
|
|
||||||
* "Delphi wrapper unit 'qpdf.pas' created by Zarko Gajic
|
|
||||||
(http://delphi.about.com). .. use at your own risk and for whatever
|
|
||||||
the purpose you want .. no support provided. Sample code provided."
|
|
||||||
|
|
||||||
|
|
||||||
2.2
|
2.2
|
||||||
===
|
===
|
||||||
|
@ -48,13 +48,13 @@ enum qpdf_r3_print_e
|
|||||||
qpdf_r3p_low, /* allow only low-resolution printing */
|
qpdf_r3p_low, /* allow only low-resolution printing */
|
||||||
qpdf_r3p_none /* allow no printing */
|
qpdf_r3p_none /* allow no printing */
|
||||||
};
|
};
|
||||||
enum qpdf_r3_modify_e
|
enum qpdf_r3_modify_e /* Allowed changes: */
|
||||||
{
|
{
|
||||||
qpdf_r3m_all = 0, /* allow all modification */
|
qpdf_r3m_all = 0, /* General editing, comments, forms */
|
||||||
qpdf_r3m_annotate, /* allow comment authoring and form operations */
|
qpdf_r3m_annotate, /* Comments, form field fill-in, and signing */
|
||||||
qpdf_r3m_form, /* allow form field fill-in or signing */
|
qpdf_r3m_form, /* form field fill-in and signing */
|
||||||
qpdf_r3m_assembly, /* allow only document assembly */
|
qpdf_r3m_assembly, /* only document assembly */
|
||||||
qpdf_r3m_none /* allow no modification */
|
qpdf_r3m_none /* no modifications */
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* __QPDFCONSTANTS_H__ */
|
#endif /* __QPDFCONSTANTS_H__ */
|
||||||
|
@ -28,6 +28,10 @@ class QPDFExc;
|
|||||||
class QPDF
|
class QPDF
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
// Get the current version of the QPDF software
|
||||||
|
QPDF_DLL
|
||||||
|
static std::string const& QPDFVersion();
|
||||||
|
|
||||||
QPDF_DLL
|
QPDF_DLL
|
||||||
QPDF();
|
QPDF();
|
||||||
QPDF_DLL
|
QPDF_DLL
|
||||||
@ -304,6 +308,8 @@ class QPDF
|
|||||||
friend class Pipe;
|
friend class Pipe;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
static std::string qpdf_version;
|
||||||
|
|
||||||
class InputSource
|
class InputSource
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -15,6 +15,8 @@
|
|||||||
#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 = "2.1.rc1";
|
||||||
|
|
||||||
void
|
void
|
||||||
QPDF::InputSource::setLastOffset(off_t offset)
|
QPDF::InputSource::setLastOffset(off_t offset)
|
||||||
{
|
{
|
||||||
@ -249,6 +251,12 @@ QPDF::ObjGen::operator<(ObjGen const& rhs) const
|
|||||||
((this->obj == rhs.obj) && (this->gen < rhs.gen)));
|
((this->obj == rhs.obj) && (this->gen < rhs.gen)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string const&
|
||||||
|
QPDF::QPDFVersion()
|
||||||
|
{
|
||||||
|
return QPDF::qpdf_version;
|
||||||
|
}
|
||||||
|
|
||||||
QPDF::QPDF() :
|
QPDF::QPDF() :
|
||||||
encrypted(false),
|
encrypted(false),
|
||||||
encryption_initialized(false),
|
encryption_initialized(false),
|
||||||
|
@ -48,11 +48,11 @@ while (<$fh>)
|
|||||||
}
|
}
|
||||||
$fh->close();
|
$fh->close();
|
||||||
|
|
||||||
$fh = safe_open("qpdf/qpdf.cc");
|
$fh = safe_open("libqpdf/QPDF.cc");
|
||||||
my $code_version = 'unknown';
|
my $code_version = 'unknown';
|
||||||
while (<$fh>)
|
while (<$fh>)
|
||||||
{
|
{
|
||||||
if (m/whoami << \" version ([^\"]+)\"/)
|
if (m/QPDF::qpdf_version = ([^\"]+)\"/)
|
||||||
{
|
{
|
||||||
$code_version = $1;
|
$code_version = $1;
|
||||||
last;
|
last;
|
||||||
|
@ -18,8 +18,8 @@ make distclean
|
|||||||
make check install
|
make check install
|
||||||
make distclean
|
make distclean
|
||||||
|
|
||||||
cp -p README-windows-install.txt install-mingw/README.txt
|
cp -p README-windows-install.txt install-mingw/qpdf*/README.txt
|
||||||
cp -p README-windows-install.txt install-msvc/README.txt
|
cp -p README-windows-install.txt install-msvc/qpdf*/README.txt
|
||||||
|
|
||||||
set +x
|
set +x
|
||||||
|
|
||||||
|
@ -5,8 +5,8 @@
|
|||||||
<!ENTITY mdash "—">
|
<!ENTITY mdash "—">
|
||||||
<!ENTITY ndash "–">
|
<!ENTITY ndash "–">
|
||||||
<!ENTITY nbsp " ">
|
<!ENTITY nbsp " ">
|
||||||
<!ENTITY swversion "2.1.a1">
|
<!ENTITY swversion "2.1.rc1">
|
||||||
<!ENTITY lastreleased "XXX, 2009">
|
<!ENTITY lastreleased "October 25, 2009">
|
||||||
]>
|
]>
|
||||||
<book>
|
<book>
|
||||||
<bookinfo>
|
<bookinfo>
|
||||||
@ -218,7 +218,9 @@ make
|
|||||||
<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.
|
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.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
Most options require an output file, but some testing or
|
Most options require an output file, but some testing or
|
||||||
@ -399,7 +401,8 @@ make
|
|||||||
<para>
|
<para>
|
||||||
Controls modify access.
|
Controls modify access.
|
||||||
<option><replaceable>modify-opt</replaceable></option> may be
|
<option><replaceable>modify-opt</replaceable></option> may be
|
||||||
one of the following:
|
one of the following, each of which implies all the options
|
||||||
|
that follow it:
|
||||||
<itemizedlist>
|
<itemizedlist>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
@ -430,6 +433,40 @@ make
|
|||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><option>--cleartext-metadata</option></term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
If specified, any metadata stream in the document will be left
|
||||||
|
unencrypted even if the rest of the document is encrypted.
|
||||||
|
This also forces the PDF version to be at least 1.5.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><option>--use-aes=[yn]</option></term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
If <option>--use-aes=y</option> is specified, AES encryption
|
||||||
|
will be used instead of RC4 encryption. This forces the PDF
|
||||||
|
version to be at least 1.6.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><option>--force-V4</option></term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Use of this option forces the <literal>/V</literal> and
|
||||||
|
<literal>/R</literal> parameters in the document's encryption
|
||||||
|
dictionary to be set to the value <literal>4</literal>. As
|
||||||
|
qpdf will automatically do this when required, there is no
|
||||||
|
reason to ever use this option. It exists primarily for use
|
||||||
|
in testing qpdf itself. This option also forces the PDF
|
||||||
|
version to be at least 1.5.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
</variablelist>
|
</variablelist>
|
||||||
The default for each permission option is to be fully permissive.
|
The default for each permission option is to be fully permissive.
|
||||||
</para>
|
</para>
|
||||||
@ -533,6 +570,50 @@ make
|
|||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><option>--min-version=<replaceable>version</replaceable></option></term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Forces the PDF version of the output file to be at least
|
||||||
|
<replaceable>version</replaceable>. In other words, if the
|
||||||
|
input file has a lower version than the specified version, the
|
||||||
|
specified version will be used. If the input file has a
|
||||||
|
higher version, the input file's original version will be
|
||||||
|
used. It is seldom necessary to use this option since qpdf
|
||||||
|
will automatically increase the version as needed when adding
|
||||||
|
features that require newer PDF readers.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><option>--force-version=<replaceable>version</replaceable></option></term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
This option forces the PDF version to be the exact version
|
||||||
|
specified <emphasis>even when the file may have content that
|
||||||
|
is not supported in that version</emphasis>. In some cases,
|
||||||
|
forcing the output file's PDF version to be lower than that of
|
||||||
|
the input file will cause qpdf to disable certain features of
|
||||||
|
the document. Specifically, AES encryption is disabled if the
|
||||||
|
version is less than 1.6, cleartext metadata and object
|
||||||
|
streams are disabled if less than 1.5, 128-bit encryption keys
|
||||||
|
are disabled if less than 1.4, and all encryption is disabled
|
||||||
|
if less than 1.3. Even with these precautions, qpdf won't be
|
||||||
|
able to do things like eliminate use of newer image
|
||||||
|
compression schemes, transparency groups, or other features
|
||||||
|
that may have been added in more recent versions of PDF.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
As a general rule, with the exception of big structural things
|
||||||
|
like the use of object streams or AES encryption, PDF viewers
|
||||||
|
are supposed to ignore features in files that they don't
|
||||||
|
support from newer versions. This means that forcing the
|
||||||
|
version to a lower version may make it possible to open your
|
||||||
|
PDF file with an older version, though bear in mind that some
|
||||||
|
of the original document's functionality may be lost.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
</variablelist>
|
</variablelist>
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
@ -1985,7 +2066,169 @@ print "\n";
|
|||||||
</chapter>
|
</chapter>
|
||||||
<appendix id="ref.release-notes">
|
<appendix id="ref.release-notes">
|
||||||
<title>Release Notes</title>
|
<title>Release Notes</title>
|
||||||
|
<para>
|
||||||
|
For a detailed list of changes, please see the file
|
||||||
|
<filename>ChangeLog</filename> in the source distribution.
|
||||||
|
</para>
|
||||||
<variablelist>
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>2.1.rc1: October 25, 2009</term>
|
||||||
|
<listitem>
|
||||||
|
<itemizedlist>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
This is the first version of qpdf to include Windows support.
|
||||||
|
On Windows, it is possible to build a DLL. Additionally, a
|
||||||
|
partial C-language API has been introduced, which makes it
|
||||||
|
possible to call qpdf functions from non-C++ environments. I
|
||||||
|
am very grateful to Zarko Gagic (<ulink
|
||||||
|
url="http://delphi.about.com/">http://delphi.about.com/</ulink>)
|
||||||
|
for tirelessly testing numerous pre-release versions of this
|
||||||
|
DLL and providing many excellent suggestions on improving the
|
||||||
|
interface.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
For programming to the C interface, please see the header file
|
||||||
|
<filename>qpdf/qpdf-c.h</filename> and the example
|
||||||
|
<filename>examples/pdf-linearize.c</filename>.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Zarko Gajic has written a Delphi wrapper for qpdf, which can
|
||||||
|
be downloaded from qpdf's download side. Zarko's Delphi
|
||||||
|
wrapper is released with the same licensing terms as qpdf
|
||||||
|
itself and comes with this disclaimer: “Delphi wrapper
|
||||||
|
unit <filename>qpdf.pas</filename> created by Zarko Gajic
|
||||||
|
(<ulink
|
||||||
|
url="http://delphi.about.com/">http://delphi.about.com/</ulink>).
|
||||||
|
Use at your own risk and for whatever purpose you want. No
|
||||||
|
support is provided. Sample code is provided.”
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Support has been added for AES encryption and crypt filters.
|
||||||
|
Although qpdf does not presently support files that use
|
||||||
|
PKI-based encryption, with the addition of AES and crypt
|
||||||
|
filters, qpdf is now be able to open most encrypted files
|
||||||
|
created with newer versions of Acrobat or other PDF creation
|
||||||
|
software. Note that I have not been able to get very many
|
||||||
|
files encrypted in this way, so it's possible there could
|
||||||
|
still be some cases that qpdf can't handle. Please report
|
||||||
|
them if you find them.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Many error messages have been improved to include more
|
||||||
|
information in hopes of making qpdf a more useful tool for PDF
|
||||||
|
experts to use in manually recovering damaged PDF files.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Attempt to avoid compressing metadata streams if possible.
|
||||||
|
This is consistent with other PDF creation applications.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Provide new command-line options for AES encrypt, cleartext
|
||||||
|
metadata, and setting the minimum and forced PDF versions of
|
||||||
|
output files.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Add additional methods to the <classname>QPDF</classname>
|
||||||
|
object for querying the document's permissions. Although qpdf
|
||||||
|
does not enforce these permissions, it does make them
|
||||||
|
available so that applications that use qpdf can enforce
|
||||||
|
permissions.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The <option>--check</option> option to <command>qpdf</command>
|
||||||
|
has been extended to include some additional information.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
There have been a handful of non-compatible API changes. For
|
||||||
|
details, see <xref linkend="ref.upgrading-to-2.1"/>.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>2.0.6: May 3, 2009</term>
|
||||||
|
<listitem>
|
||||||
|
<itemizedlist>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Do not attempt to uncompress streams that have decode
|
||||||
|
parameters we don't recognize. Earlier versions of qpdf would
|
||||||
|
have rejected files with such streams.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>2.0.5: March 10, 2009</term>
|
||||||
|
<listitem>
|
||||||
|
<itemizedlist>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Improve error handling in the LZW decoder, and fix a small
|
||||||
|
error introduced in the previous version with regard to
|
||||||
|
handling full tables. The LZW decoder has been more strongly
|
||||||
|
verified in this release.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>2.0.4: February 21, 2009</term>
|
||||||
|
<listitem>
|
||||||
|
<itemizedlist>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Include proper support for LZW streams encoded without the
|
||||||
|
“early code change” flag. Special thanks to Atom
|
||||||
|
Smasher who reported the problem and provided an input file
|
||||||
|
compressed in this way, which I did not previously have.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Implement some improvements to file recovery logic.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>2.0.3: February 15, 2009</term>
|
||||||
|
<listitem>
|
||||||
|
<itemizedlist>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Compile cleanly with gcc 4.4.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Handle strings encoded as UTF-16BE properly.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term>2.0.2: June 30, 2008</term>
|
<term>2.0.2: June 30, 2008</term>
|
||||||
<listitem>
|
<listitem>
|
||||||
@ -2031,4 +2274,87 @@ print "\n";
|
|||||||
</varlistentry>
|
</varlistentry>
|
||||||
</variablelist>
|
</variablelist>
|
||||||
</appendix>
|
</appendix>
|
||||||
|
<appendix id="ref.upgrading-to-2.1">
|
||||||
|
<title>Upgrading from 2.0 to 2.1</title>
|
||||||
|
<para>
|
||||||
|
Although, as a general rule, we like to avoid introducing
|
||||||
|
source-level incompatibilities in qpdf's interface, there were a
|
||||||
|
few non-compatible changes made in this version. A considerable
|
||||||
|
amount of source code that uses qpdf will probably compile without
|
||||||
|
any changes, but in some cases, you may have to update your code.
|
||||||
|
The changes are enumerated here. There are also some new
|
||||||
|
interfaces; for those, please refer to the header files.
|
||||||
|
</para>
|
||||||
|
<itemizedlist>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
QPDF's exception handling mechanism now uses
|
||||||
|
<classname>std::logic_error</classname> for internal errors and
|
||||||
|
<classname>std::runtime_error</classname> for runtime errors in
|
||||||
|
favor of the now removed <classname>QEXC</classname> classes used
|
||||||
|
in previous versions. The <classname>QEXC</classname> exception
|
||||||
|
classes predated the addition of the
|
||||||
|
<filename><stdexcept></filename> header file to the C++
|
||||||
|
standard library. Most of the exceptions thrown by the qpdf
|
||||||
|
library itself are still of type <classname>QPDFExc</classname>
|
||||||
|
which is now derived from
|
||||||
|
<classname>std::runtime_error</classname>. Programs that caught
|
||||||
|
an instance of <classname>std::exception</classname> and
|
||||||
|
displayed it by calling the <function>what()</function> method
|
||||||
|
will not need to be changed.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The <classname>QPDFExc</classname> class now internally
|
||||||
|
represents various fields of the error condition and provides
|
||||||
|
interfaces for querying them. Among the fields is a numeric
|
||||||
|
error code that can help applications act differently on (a small
|
||||||
|
number of) different error conditions. See
|
||||||
|
<filename>QPDFExc.hh</filename> for details.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Warnings can be retrieved from qpdf as instances of
|
||||||
|
<classname>QPDFExc</classname> instead of strings.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The nested <classname>QPDF::EncryptionData</classname> class's
|
||||||
|
constructor takes an additional argument. This class is
|
||||||
|
primarily intended to be used by
|
||||||
|
<classname>QPDFWriter</classname>. There's not really anything
|
||||||
|
useful an end-user application could do with it. It probably
|
||||||
|
shouldn't really be part of the public interface to begin with.
|
||||||
|
Likewise, some of the methods for computing internal encryption
|
||||||
|
dictionary parameters have changed to support
|
||||||
|
<literal>/R=4</literal> encryption.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The method <function>QPDF::getUserPassword</function> has been
|
||||||
|
removed since it didn't do what people would think it did. There
|
||||||
|
are now two new methods:
|
||||||
|
<function>QPDF::getPaddedUserPassword</function> and
|
||||||
|
<function>QPDF::getTrimmedUserPassword</function>. The first one
|
||||||
|
does what the old <function>QPDF::getUserPassword</function>
|
||||||
|
method used to do, which is to return the password with possible
|
||||||
|
binary padding as specified by the PDF specification. The second
|
||||||
|
one returns a human-readable password string.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The enumerated types that used to be nested in
|
||||||
|
<classname>QPDFWriter</classname> have moved to top-level
|
||||||
|
enumerated types and are now defined in the file
|
||||||
|
<filename>qpdf/Constants.h</filename>. This enables them to be
|
||||||
|
shared by both the C and C++ interfaces.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
</appendix>
|
||||||
</book>
|
</book>
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
Summary: Command-line tools and library for transforming PDF files
|
Summary: Command-line tools and library for transforming PDF files
|
||||||
Name: qpdf
|
Name: qpdf
|
||||||
Version: 2.1.a1
|
Version: 2.1.rc1
|
||||||
Release: 1%{?dist}
|
Release: 1%{?dist}
|
||||||
License: Artistic
|
License: Artistic
|
||||||
Group: System Environment/Libraries
|
Group: System Environment/Libraries
|
||||||
URL: http://sourceforge.net/projects/qpdf/
|
URL: http://qpdf.sourceforge.net/
|
||||||
|
|
||||||
Source: %{name}-%{version}.tar.gz
|
Source: %{name}-%{version}.tar.gz
|
||||||
|
|
||||||
|
@ -555,7 +555,7 @@ int main(int argc, char* argv[])
|
|||||||
// 1 2 3 4 5 6 7 8
|
// 1 2 3 4 5 6 7 8
|
||||||
// 12345678901234567890123456789012345678901234567890123456789012345678901234567890
|
// 12345678901234567890123456789012345678901234567890123456789012345678901234567890
|
||||||
std::cout
|
std::cout
|
||||||
<< whoami << " version 2.1.a1" << std::endl
|
<< whoami << " version " << QPDF::QPDFVersion() << std::endl
|
||||||
<< "Copyright (c) 2005-2009 Jay Berkenbilt"
|
<< "Copyright (c) 2005-2009 Jay Berkenbilt"
|
||||||
<< std::endl
|
<< std::endl
|
||||||
<< "This software may be distributed under the terms of version 2 of the"
|
<< "This software may be distributed under the terms of version 2 of the"
|
||||||
|
@ -81,7 +81,12 @@ flush_tiff_cache();
|
|||||||
show_ntests();
|
show_ntests();
|
||||||
# ----------
|
# ----------
|
||||||
$td->notify("--- Miscellaneous Tests ---");
|
$td->notify("--- Miscellaneous Tests ---");
|
||||||
$n_tests += 14;
|
$n_tests += 15;
|
||||||
|
|
||||||
|
$td->runtest("qpdf version",
|
||||||
|
{$td->COMMAND => "qpdf --version"},
|
||||||
|
{$td->REGEXP => "qpdf version \\S+\n.*", $td->EXIT_STATUS => 0},
|
||||||
|
$td->NORMALIZE_NEWLINES);
|
||||||
|
|
||||||
foreach (my $i = 1; $i <= 3; ++$i)
|
foreach (my $i = 1; $i <= 3; ++$i)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user