Commit ace2a031b5c1580ea9a69f116e6a8c9393860267
1 parent
b0a6f495
prepare 2.1.rc1 for release
git-svn-id: svn+q:///qpdf/trunk@901 71b93d88-0707-0410-a8cf-f5a4172ac649
Showing
14 changed files
with
429 additions
and
64 deletions
ChangeLog
| 1 | +2009-10-25 Jay Berkenbilt <ejb@ql.org> | |
| 2 | + | |
| 3 | + * 2.1.rc1: release | |
| 4 | + | |
| 1 | 5 | 2009-10-19 Jay Berkenbilt <jberkenb@argonst.com> |
| 2 | 6 | |
| 3 | 7 | * include/qpdf/QPDF.hh (QPDF): getWarnings now returns a list of |
| ... | ... | @@ -21,6 +25,12 @@ |
| 21 | 25 | * libqpdf/QPDFWriter.cc (unparseObject): avoid compressing |
| 22 | 26 | Metadata streams if possible. |
| 23 | 27 | |
| 28 | +2009-10-13 Jay Berkenbilt <ejb@ql.org> | |
| 29 | + | |
| 30 | + * Upgrade embedded qtest to version 1.4, which allows the test | |
| 31 | + suite to be run in Windows with MSYS and ActiveState Perl rather | |
| 32 | + than requiring Cygwin perl. | |
| 33 | + | |
| 24 | 34 | 2009-10-04 Jay Berkenbilt <ejb@ql.org> |
| 25 | 35 | |
| 26 | 36 | * Implement support AES encrypt and crypt filters. Implementation |
| ... | ... | @@ -60,7 +70,7 @@ |
| 60 | 70 | |
| 61 | 71 | 2009-05-03 Jay Berkenbilt <ejb@ql.org> |
| 62 | 72 | |
| 63 | - * 2.0.6. release | |
| 73 | + * 2.0.6: release | |
| 64 | 74 | |
| 65 | 75 | * libqpdf/QPDF_Stream.cc (filterable): ignore /DecodeParms if it's |
| 66 | 76 | not a type we recognize. (Fixes qpdf-Bugs-2779746.) | ... | ... |
README
| ... | ... | @@ -9,6 +9,18 @@ Artistic License which may be found in the source distribution as |
| 9 | 9 | warranty. |
| 10 | 10 | |
| 11 | 11 | |
| 12 | +Prerequisites | |
| 13 | +============= | |
| 14 | + | |
| 15 | +QPDF depends on external libraries "zlib" and "pcre". These are part | |
| 16 | +of virtually all Linux distributions and are readily available; | |
| 17 | +download information appears in the documentation. You can also | |
| 18 | +download the external library distributions in source from from qpdf's | |
| 19 | +download site. For Windows, you can download pre-built binary | |
| 20 | +verisons of those libraries for some compilers; see README.windows for | |
| 21 | +additional details. | |
| 22 | + | |
| 23 | + | |
| 12 | 24 | Licensing terms of embedded software |
| 13 | 25 | ==================================== |
| 14 | 26 | |
| ... | ... | @@ -71,9 +83,11 @@ user's manual can be found in the "doc" directory. The docbook |
| 71 | 83 | sources to the user's manual can be found in the "manual" directory. |
| 72 | 84 | |
| 73 | 85 | The software library is just libqpdf, and all the header files are in |
| 74 | -the qpdf subdirectory. If you link with -lqpdf and your system does | |
| 75 | -not know how to read libtool .la files, then you will also need to | |
| 76 | -link with -lpcre and -lz. | |
| 86 | +the qpdf subdirectory. If you link statically with -lqpdf, then you | |
| 87 | +will also need to link with -lpcre and -lz. The shared qpdf library | |
| 88 | +is linked with -lpcre and -lz, and none of qpdf's public header files | |
| 89 | +directly include files from pcre or libz, so in many cases, qpdf's | |
| 90 | +development files are self contained. | |
| 77 | 91 | |
| 78 | 92 | To learn about using the library, please read comments in the header |
| 79 | 93 | files in include/qpdf, especially QPDF.hh, QPDFObjectHandle.hh, and | ... | ... |
README-what-to-download.txt
0 → 100644
| 1 | +To build from source for Linux or other UNIX/UNIX-like systems, it is | |
| 2 | +generally sufficient to download just the source qpdf-<version>.tar.gz | |
| 3 | +file. | |
| 4 | + | |
| 5 | +For Windows, there are several additional files that you might want to | |
| 6 | +download. | |
| 7 | + | |
| 8 | + * qpdf-<version>-bin-mingw.zip | |
| 9 | + | |
| 10 | + If you just want to use the qpdf commandline program or use the | |
| 11 | + qpdf DLL's C-language interface, you can download this file. You | |
| 12 | + can also download this version if you are using MINGW's gcc 4.4 and | |
| 13 | + want to program using the C++ interface. | |
| 14 | + | |
| 15 | + * qpdf-<version>-bin-msvc.zip | |
| 16 | + | |
| 17 | + If you want to program using qpdf's C++ interface and you are using | |
| 18 | + Microsoft Visual C++ .NET 2008 (VC9), you can download this file. | |
| 19 | + | |
| 20 | + * qpdf-external-libs-bin.zip | |
| 21 | + | |
| 22 | + If you want to build qpdf for Windows yourself with either MINGW's | |
| 23 | + gcc 4.4 or VC9, you can download this file and extract it inside | |
| 24 | + the qpdf source distribution. Please refer to README.windows in | |
| 25 | + the qpdf source distribution for additional details. | |
| 26 | + | |
| 27 | + * qpdf-external-libs-src.zip | |
| 28 | + | |
| 29 | + If you want to build the external libraries on your own (for | |
| 30 | + Windows or anything else), you can download this archive. In | |
| 31 | + addition to including unmodified distributions of pcre and zlib, it | |
| 32 | + includes a README file and some scripts to help you build them for | |
| 33 | + Windows. | ... | ... |
README.maintainer
| ... | ... | @@ -11,7 +11,7 @@ Release Reminders |
| 11 | 11 | |
| 12 | 12 | configure.ac |
| 13 | 13 | qpdf.spec |
| 14 | - qpdf/qpdf.cc | |
| 14 | + libqpdf/QPDF.cc | |
| 15 | 15 | manual/qpdf-manual.xml |
| 16 | 16 | |
| 17 | 17 | make_dist verifies this consistency. |
| ... | ... | @@ -55,7 +55,8 @@ Release Reminders |
| 55 | 55 | * Remember to update documentation in the "files" subdirectory of the |
| 56 | 56 | website on sourceforge.net. |
| 57 | 57 | |
| 58 | - * Create a tag in the version control system. | |
| 58 | + * Create a tag in the version control system, and make backups of the | |
| 59 | + actual releases. | |
| 59 | 60 | |
| 60 | 61 | * When releasing on source forge, external-libs distributions go in |
| 61 | 62 | external-libs/yyyymmdd, and qpdf distributions go in qpdf/vvv | ... | ... |
TODO
| 1 | 1 | 2.1 |
| 2 | 2 | === |
| 3 | 3 | |
| 4 | - * Update documentation to reflect new command line flags and any | |
| 5 | - other relevant changes. Should read through ChangeLog and the | |
| 6 | - manual before releasing 2.1. | |
| 7 | - | |
| 8 | - * Write documentation section on source-level API changes between 2.0 | |
| 9 | - and 2.1. | |
| 10 | - | |
| 11 | - * Add comments for the security functions that map them back to the | |
| 12 | - items in Adobe's products. | |
| 13 | - | |
| 14 | - * Create the following packages: | |
| 15 | - | |
| 16 | - - README-what-to-download.txt -- descriptions of what to download | |
| 17 | - on Windows, etc. | |
| 18 | - | |
| 19 | - * make_windows_releases: | |
| 20 | - | |
| 21 | - - make sure external-libs exists; if not, tell the user to extract | |
| 22 | - it | |
| 23 | - | |
| 24 | - - set path to include libqpdf/build | |
| 25 | - | |
| 26 | - - ./config-mingw; make check install | |
| 27 | - | |
| 28 | - - make distclean | |
| 29 | - | |
| 30 | - - ./config-msvc; make check install | |
| 31 | - | |
| 32 | - - instruct the user to create qpdf-vvv-bin-mingw.zip and | |
| 33 | - qpdf-vvv-bin-msvc.zip from the contents of the install-mingw and | |
| 34 | - install-msys directories. | |
| 35 | - | |
| 36 | - *** still have to make sure libqpdf.a/qpdf.lib doesn't have to be | |
| 37 | - in the same directory as the dll, but I'm pretty sure it | |
| 38 | - doesn't. | |
| 39 | - | |
| 40 | - * "Delphi wrapper unit 'qpdf.pas' created by Zarko Gajic | |
| 41 | - (http://delphi.about.com). .. use at your own risk and for whatever | |
| 42 | - the purpose you want .. no support provided. Sample code provided." | |
| 43 | - | |
| 4 | + * Remove rc1 from version; search for rc1 in release notes as | |
| 5 | + well...just change rc1 to 2.1 and update the date. | |
| 44 | 6 | |
| 45 | 7 | 2.2 |
| 46 | 8 | === | ... | ... |
include/qpdf/Constants.h
| ... | ... | @@ -48,13 +48,13 @@ enum qpdf_r3_print_e |
| 48 | 48 | qpdf_r3p_low, /* allow only low-resolution printing */ |
| 49 | 49 | qpdf_r3p_none /* allow no printing */ |
| 50 | 50 | }; |
| 51 | -enum qpdf_r3_modify_e | |
| 51 | +enum qpdf_r3_modify_e /* Allowed changes: */ | |
| 52 | 52 | { |
| 53 | - qpdf_r3m_all = 0, /* allow all modification */ | |
| 54 | - qpdf_r3m_annotate, /* allow comment authoring and form operations */ | |
| 55 | - qpdf_r3m_form, /* allow form field fill-in or signing */ | |
| 56 | - qpdf_r3m_assembly, /* allow only document assembly */ | |
| 57 | - qpdf_r3m_none /* allow no modification */ | |
| 53 | + qpdf_r3m_all = 0, /* General editing, comments, forms */ | |
| 54 | + qpdf_r3m_annotate, /* Comments, form field fill-in, and signing */ | |
| 55 | + qpdf_r3m_form, /* form field fill-in and signing */ | |
| 56 | + qpdf_r3m_assembly, /* only document assembly */ | |
| 57 | + qpdf_r3m_none /* no modifications */ | |
| 58 | 58 | }; |
| 59 | 59 | |
| 60 | 60 | #endif /* __QPDFCONSTANTS_H__ */ | ... | ... |
include/qpdf/QPDF.hh
| ... | ... | @@ -28,6 +28,10 @@ class QPDFExc; |
| 28 | 28 | class QPDF |
| 29 | 29 | { |
| 30 | 30 | public: |
| 31 | + // Get the current version of the QPDF software | |
| 32 | + QPDF_DLL | |
| 33 | + static std::string const& QPDFVersion(); | |
| 34 | + | |
| 31 | 35 | QPDF_DLL |
| 32 | 36 | QPDF(); |
| 33 | 37 | QPDF_DLL |
| ... | ... | @@ -304,6 +308,8 @@ class QPDF |
| 304 | 308 | friend class Pipe; |
| 305 | 309 | |
| 306 | 310 | private: |
| 311 | + static std::string qpdf_version; | |
| 312 | + | |
| 307 | 313 | class InputSource |
| 308 | 314 | { |
| 309 | 315 | public: | ... | ... |
libqpdf/QPDF.cc
| ... | ... | @@ -15,6 +15,8 @@ |
| 15 | 15 | #include <qpdf/QPDF_Null.hh> |
| 16 | 16 | #include <qpdf/QPDF_Dictionary.hh> |
| 17 | 17 | |
| 18 | +std::string QPDF::qpdf_version = "2.1.rc1"; | |
| 19 | + | |
| 18 | 20 | void |
| 19 | 21 | QPDF::InputSource::setLastOffset(off_t offset) |
| 20 | 22 | { |
| ... | ... | @@ -249,6 +251,12 @@ QPDF::ObjGen::operator<(ObjGen const& rhs) const |
| 249 | 251 | ((this->obj == rhs.obj) && (this->gen < rhs.gen))); |
| 250 | 252 | } |
| 251 | 253 | |
| 254 | +std::string const& | |
| 255 | +QPDF::QPDFVersion() | |
| 256 | +{ | |
| 257 | + return QPDF::qpdf_version; | |
| 258 | +} | |
| 259 | + | |
| 252 | 260 | QPDF::QPDF() : |
| 253 | 261 | encrypted(false), |
| 254 | 262 | encryption_initialized(false), | ... | ... |
make_dist
| ... | ... | @@ -48,11 +48,11 @@ while (<$fh>) |
| 48 | 48 | } |
| 49 | 49 | $fh->close(); |
| 50 | 50 | |
| 51 | -$fh = safe_open("qpdf/qpdf.cc"); | |
| 51 | +$fh = safe_open("libqpdf/QPDF.cc"); | |
| 52 | 52 | my $code_version = 'unknown'; |
| 53 | 53 | while (<$fh>) |
| 54 | 54 | { |
| 55 | - if (m/whoami << \" version ([^\"]+)\"/) | |
| 55 | + if (m/QPDF::qpdf_version = ([^\"]+)\"/) | |
| 56 | 56 | { |
| 57 | 57 | $code_version = $1; |
| 58 | 58 | last; | ... | ... |
make_windows_releases
| ... | ... | @@ -18,8 +18,8 @@ make distclean |
| 18 | 18 | make check install |
| 19 | 19 | make distclean |
| 20 | 20 | |
| 21 | -cp -p README-windows-install.txt install-mingw/README.txt | |
| 22 | -cp -p README-windows-install.txt install-msvc/README.txt | |
| 21 | +cp -p README-windows-install.txt install-mingw/qpdf*/README.txt | |
| 22 | +cp -p README-windows-install.txt install-msvc/qpdf*/README.txt | |
| 23 | 23 | |
| 24 | 24 | set +x |
| 25 | 25 | ... | ... |
manual/qpdf-manual.xml
| ... | ... | @@ -5,8 +5,8 @@ |
| 5 | 5 | <!ENTITY mdash "—"> |
| 6 | 6 | <!ENTITY ndash "–"> |
| 7 | 7 | <!ENTITY nbsp " "> |
| 8 | -<!ENTITY swversion "2.1.a1"> | |
| 9 | -<!ENTITY lastreleased "XXX, 2009"> | |
| 8 | +<!ENTITY swversion "2.1.rc1"> | |
| 9 | +<!ENTITY lastreleased "October 25, 2009"> | |
| 10 | 10 | ]> |
| 11 | 11 | <book> |
| 12 | 12 | <bookinfo> |
| ... | ... | @@ -218,7 +218,9 @@ make |
| 218 | 218 | <option>outfilename</option> does not have to be seekable, even |
| 219 | 219 | when generating linearized files. Specifying |
| 220 | 220 | “<option>-</option>” as <option>outfilename</option> |
| 221 | - means to write to standard output. | |
| 221 | + means to write to standard output. However, you can't specify the | |
| 222 | + same file as both the input and the output because qpdf reads data | |
| 223 | + from the input file as it writes to the output file. | |
| 222 | 224 | </para> |
| 223 | 225 | <para> |
| 224 | 226 | Most options require an output file, but some testing or |
| ... | ... | @@ -399,7 +401,8 @@ make |
| 399 | 401 | <para> |
| 400 | 402 | Controls modify access. |
| 401 | 403 | <option><replaceable>modify-opt</replaceable></option> may be |
| 402 | - one of the following: | |
| 404 | + one of the following, each of which implies all the options | |
| 405 | + that follow it: | |
| 403 | 406 | <itemizedlist> |
| 404 | 407 | <listitem> |
| 405 | 408 | <para> |
| ... | ... | @@ -430,6 +433,40 @@ make |
| 430 | 433 | </para> |
| 431 | 434 | </listitem> |
| 432 | 435 | </varlistentry> |
| 436 | + <varlistentry> | |
| 437 | + <term><option>--cleartext-metadata</option></term> | |
| 438 | + <listitem> | |
| 439 | + <para> | |
| 440 | + If specified, any metadata stream in the document will be left | |
| 441 | + unencrypted even if the rest of the document is encrypted. | |
| 442 | + This also forces the PDF version to be at least 1.5. | |
| 443 | + </para> | |
| 444 | + </listitem> | |
| 445 | + </varlistentry> | |
| 446 | + <varlistentry> | |
| 447 | + <term><option>--use-aes=[yn]</option></term> | |
| 448 | + <listitem> | |
| 449 | + <para> | |
| 450 | + If <option>--use-aes=y</option> is specified, AES encryption | |
| 451 | + will be used instead of RC4 encryption. This forces the PDF | |
| 452 | + version to be at least 1.6. | |
| 453 | + </para> | |
| 454 | + </listitem> | |
| 455 | + </varlistentry> | |
| 456 | + <varlistentry> | |
| 457 | + <term><option>--force-V4</option></term> | |
| 458 | + <listitem> | |
| 459 | + <para> | |
| 460 | + Use of this option forces the <literal>/V</literal> and | |
| 461 | + <literal>/R</literal> parameters in the document's encryption | |
| 462 | + dictionary to be set to the value <literal>4</literal>. As | |
| 463 | + qpdf will automatically do this when required, there is no | |
| 464 | + reason to ever use this option. It exists primarily for use | |
| 465 | + in testing qpdf itself. This option also forces the PDF | |
| 466 | + version to be at least 1.5. | |
| 467 | + </para> | |
| 468 | + </listitem> | |
| 469 | + </varlistentry> | |
| 433 | 470 | </variablelist> |
| 434 | 471 | The default for each permission option is to be fully permissive. |
| 435 | 472 | </para> |
| ... | ... | @@ -533,6 +570,50 @@ make |
| 533 | 570 | </para> |
| 534 | 571 | </listitem> |
| 535 | 572 | </varlistentry> |
| 573 | + <varlistentry> | |
| 574 | + <term><option>--min-version=<replaceable>version</replaceable></option></term> | |
| 575 | + <listitem> | |
| 576 | + <para> | |
| 577 | + Forces the PDF version of the output file to be at least | |
| 578 | + <replaceable>version</replaceable>. In other words, if the | |
| 579 | + input file has a lower version than the specified version, the | |
| 580 | + specified version will be used. If the input file has a | |
| 581 | + higher version, the input file's original version will be | |
| 582 | + used. It is seldom necessary to use this option since qpdf | |
| 583 | + will automatically increase the version as needed when adding | |
| 584 | + features that require newer PDF readers. | |
| 585 | + </para> | |
| 586 | + </listitem> | |
| 587 | + </varlistentry> | |
| 588 | + <varlistentry> | |
| 589 | + <term><option>--force-version=<replaceable>version</replaceable></option></term> | |
| 590 | + <listitem> | |
| 591 | + <para> | |
| 592 | + This option forces the PDF version to be the exact version | |
| 593 | + specified <emphasis>even when the file may have content that | |
| 594 | + is not supported in that version</emphasis>. In some cases, | |
| 595 | + forcing the output file's PDF version to be lower than that of | |
| 596 | + the input file will cause qpdf to disable certain features of | |
| 597 | + the document. Specifically, AES encryption is disabled if the | |
| 598 | + version is less than 1.6, cleartext metadata and object | |
| 599 | + streams are disabled if less than 1.5, 128-bit encryption keys | |
| 600 | + are disabled if less than 1.4, and all encryption is disabled | |
| 601 | + if less than 1.3. Even with these precautions, qpdf won't be | |
| 602 | + able to do things like eliminate use of newer image | |
| 603 | + compression schemes, transparency groups, or other features | |
| 604 | + that may have been added in more recent versions of PDF. | |
| 605 | + </para> | |
| 606 | + <para> | |
| 607 | + As a general rule, with the exception of big structural things | |
| 608 | + like the use of object streams or AES encryption, PDF viewers | |
| 609 | + are supposed to ignore features in files that they don't | |
| 610 | + support from newer versions. This means that forcing the | |
| 611 | + version to a lower version may make it possible to open your | |
| 612 | + PDF file with an older version, though bear in mind that some | |
| 613 | + of the original document's functionality may be lost. | |
| 614 | + </para> | |
| 615 | + </listitem> | |
| 616 | + </varlistentry> | |
| 536 | 617 | </variablelist> |
| 537 | 618 | </para> |
| 538 | 619 | <para> |
| ... | ... | @@ -1985,8 +2066,170 @@ print "\n"; |
| 1985 | 2066 | </chapter> |
| 1986 | 2067 | <appendix id="ref.release-notes"> |
| 1987 | 2068 | <title>Release Notes</title> |
| 2069 | + <para> | |
| 2070 | + For a detailed list of changes, please see the file | |
| 2071 | + <filename>ChangeLog</filename> in the source distribution. | |
| 2072 | + </para> | |
| 1988 | 2073 | <variablelist> |
| 1989 | 2074 | <varlistentry> |
| 2075 | + <term>2.1.rc1: October 25, 2009</term> | |
| 2076 | + <listitem> | |
| 2077 | + <itemizedlist> | |
| 2078 | + <listitem> | |
| 2079 | + <para> | |
| 2080 | + This is the first version of qpdf to include Windows support. | |
| 2081 | + On Windows, it is possible to build a DLL. Additionally, a | |
| 2082 | + partial C-language API has been introduced, which makes it | |
| 2083 | + possible to call qpdf functions from non-C++ environments. I | |
| 2084 | + am very grateful to Zarko Gagic (<ulink | |
| 2085 | + url="http://delphi.about.com/">http://delphi.about.com/</ulink>) | |
| 2086 | + for tirelessly testing numerous pre-release versions of this | |
| 2087 | + DLL and providing many excellent suggestions on improving the | |
| 2088 | + interface. | |
| 2089 | + </para> | |
| 2090 | + <para> | |
| 2091 | + For programming to the C interface, please see the header file | |
| 2092 | + <filename>qpdf/qpdf-c.h</filename> and the example | |
| 2093 | + <filename>examples/pdf-linearize.c</filename>. | |
| 2094 | + </para> | |
| 2095 | + </listitem> | |
| 2096 | + <listitem> | |
| 2097 | + <para> | |
| 2098 | + Zarko Gajic has written a Delphi wrapper for qpdf, which can | |
| 2099 | + be downloaded from qpdf's download side. Zarko's Delphi | |
| 2100 | + wrapper is released with the same licensing terms as qpdf | |
| 2101 | + itself and comes with this disclaimer: “Delphi wrapper | |
| 2102 | + unit <filename>qpdf.pas</filename> created by Zarko Gajic | |
| 2103 | + (<ulink | |
| 2104 | + url="http://delphi.about.com/">http://delphi.about.com/</ulink>). | |
| 2105 | + Use at your own risk and for whatever purpose you want. No | |
| 2106 | + support is provided. Sample code is provided.” | |
| 2107 | + </para> | |
| 2108 | + </listitem> | |
| 2109 | + <listitem> | |
| 2110 | + <para> | |
| 2111 | + Support has been added for AES encryption and crypt filters. | |
| 2112 | + Although qpdf does not presently support files that use | |
| 2113 | + PKI-based encryption, with the addition of AES and crypt | |
| 2114 | + filters, qpdf is now be able to open most encrypted files | |
| 2115 | + created with newer versions of Acrobat or other PDF creation | |
| 2116 | + software. Note that I have not been able to get very many | |
| 2117 | + files encrypted in this way, so it's possible there could | |
| 2118 | + still be some cases that qpdf can't handle. Please report | |
| 2119 | + them if you find them. | |
| 2120 | + </para> | |
| 2121 | + </listitem> | |
| 2122 | + <listitem> | |
| 2123 | + <para> | |
| 2124 | + Many error messages have been improved to include more | |
| 2125 | + information in hopes of making qpdf a more useful tool for PDF | |
| 2126 | + experts to use in manually recovering damaged PDF files. | |
| 2127 | + </para> | |
| 2128 | + </listitem> | |
| 2129 | + <listitem> | |
| 2130 | + <para> | |
| 2131 | + Attempt to avoid compressing metadata streams if possible. | |
| 2132 | + This is consistent with other PDF creation applications. | |
| 2133 | + </para> | |
| 2134 | + </listitem> | |
| 2135 | + <listitem> | |
| 2136 | + <para> | |
| 2137 | + Provide new command-line options for AES encrypt, cleartext | |
| 2138 | + metadata, and setting the minimum and forced PDF versions of | |
| 2139 | + output files. | |
| 2140 | + </para> | |
| 2141 | + </listitem> | |
| 2142 | + <listitem> | |
| 2143 | + <para> | |
| 2144 | + Add additional methods to the <classname>QPDF</classname> | |
| 2145 | + object for querying the document's permissions. Although qpdf | |
| 2146 | + does not enforce these permissions, it does make them | |
| 2147 | + available so that applications that use qpdf can enforce | |
| 2148 | + permissions. | |
| 2149 | + </para> | |
| 2150 | + </listitem> | |
| 2151 | + <listitem> | |
| 2152 | + <para> | |
| 2153 | + The <option>--check</option> option to <command>qpdf</command> | |
| 2154 | + has been extended to include some additional information. | |
| 2155 | + </para> | |
| 2156 | + </listitem> | |
| 2157 | + <listitem> | |
| 2158 | + <para> | |
| 2159 | + There have been a handful of non-compatible API changes. For | |
| 2160 | + details, see <xref linkend="ref.upgrading-to-2.1"/>. | |
| 2161 | + </para> | |
| 2162 | + </listitem> | |
| 2163 | + </itemizedlist> | |
| 2164 | + </listitem> | |
| 2165 | + </varlistentry> | |
| 2166 | + <varlistentry> | |
| 2167 | + <term>2.0.6: May 3, 2009</term> | |
| 2168 | + <listitem> | |
| 2169 | + <itemizedlist> | |
| 2170 | + <listitem> | |
| 2171 | + <para> | |
| 2172 | + Do not attempt to uncompress streams that have decode | |
| 2173 | + parameters we don't recognize. Earlier versions of qpdf would | |
| 2174 | + have rejected files with such streams. | |
| 2175 | + </para> | |
| 2176 | + </listitem> | |
| 2177 | + </itemizedlist> | |
| 2178 | + </listitem> | |
| 2179 | + </varlistentry> | |
| 2180 | + <varlistentry> | |
| 2181 | + <term>2.0.5: March 10, 2009</term> | |
| 2182 | + <listitem> | |
| 2183 | + <itemizedlist> | |
| 2184 | + <listitem> | |
| 2185 | + <para> | |
| 2186 | + Improve error handling in the LZW decoder, and fix a small | |
| 2187 | + error introduced in the previous version with regard to | |
| 2188 | + handling full tables. The LZW decoder has been more strongly | |
| 2189 | + verified in this release. | |
| 2190 | + </para> | |
| 2191 | + </listitem> | |
| 2192 | + </itemizedlist> | |
| 2193 | + </listitem> | |
| 2194 | + </varlistentry> | |
| 2195 | + <varlistentry> | |
| 2196 | + <term>2.0.4: February 21, 2009</term> | |
| 2197 | + <listitem> | |
| 2198 | + <itemizedlist> | |
| 2199 | + <listitem> | |
| 2200 | + <para> | |
| 2201 | + Include proper support for LZW streams encoded without the | |
| 2202 | + “early code change” flag. Special thanks to Atom | |
| 2203 | + Smasher who reported the problem and provided an input file | |
| 2204 | + compressed in this way, which I did not previously have. | |
| 2205 | + </para> | |
| 2206 | + </listitem> | |
| 2207 | + <listitem> | |
| 2208 | + <para> | |
| 2209 | + Implement some improvements to file recovery logic. | |
| 2210 | + </para> | |
| 2211 | + </listitem> | |
| 2212 | + </itemizedlist> | |
| 2213 | + </listitem> | |
| 2214 | + </varlistentry> | |
| 2215 | + <varlistentry> | |
| 2216 | + <term>2.0.3: February 15, 2009</term> | |
| 2217 | + <listitem> | |
| 2218 | + <itemizedlist> | |
| 2219 | + <listitem> | |
| 2220 | + <para> | |
| 2221 | + Compile cleanly with gcc 4.4. | |
| 2222 | + </para> | |
| 2223 | + </listitem> | |
| 2224 | + <listitem> | |
| 2225 | + <para> | |
| 2226 | + Handle strings encoded as UTF-16BE properly. | |
| 2227 | + </para> | |
| 2228 | + </listitem> | |
| 2229 | + </itemizedlist> | |
| 2230 | + </listitem> | |
| 2231 | + </varlistentry> | |
| 2232 | + <varlistentry> | |
| 1990 | 2233 | <term>2.0.2: June 30, 2008</term> |
| 1991 | 2234 | <listitem> |
| 1992 | 2235 | <itemizedlist> |
| ... | ... | @@ -2031,4 +2274,87 @@ print "\n"; |
| 2031 | 2274 | </varlistentry> |
| 2032 | 2275 | </variablelist> |
| 2033 | 2276 | </appendix> |
| 2277 | + <appendix id="ref.upgrading-to-2.1"> | |
| 2278 | + <title>Upgrading from 2.0 to 2.1</title> | |
| 2279 | + <para> | |
| 2280 | + Although, as a general rule, we like to avoid introducing | |
| 2281 | + source-level incompatibilities in qpdf's interface, there were a | |
| 2282 | + few non-compatible changes made in this version. A considerable | |
| 2283 | + amount of source code that uses qpdf will probably compile without | |
| 2284 | + any changes, but in some cases, you may have to update your code. | |
| 2285 | + The changes are enumerated here. There are also some new | |
| 2286 | + interfaces; for those, please refer to the header files. | |
| 2287 | + </para> | |
| 2288 | + <itemizedlist> | |
| 2289 | + <listitem> | |
| 2290 | + <para> | |
| 2291 | + QPDF's exception handling mechanism now uses | |
| 2292 | + <classname>std::logic_error</classname> for internal errors and | |
| 2293 | + <classname>std::runtime_error</classname> for runtime errors in | |
| 2294 | + favor of the now removed <classname>QEXC</classname> classes used | |
| 2295 | + in previous versions. The <classname>QEXC</classname> exception | |
| 2296 | + classes predated the addition of the | |
| 2297 | + <filename><stdexcept></filename> header file to the C++ | |
| 2298 | + standard library. Most of the exceptions thrown by the qpdf | |
| 2299 | + library itself are still of type <classname>QPDFExc</classname> | |
| 2300 | + which is now derived from | |
| 2301 | + <classname>std::runtime_error</classname>. Programs that caught | |
| 2302 | + an instance of <classname>std::exception</classname> and | |
| 2303 | + displayed it by calling the <function>what()</function> method | |
| 2304 | + will not need to be changed. | |
| 2305 | + </para> | |
| 2306 | + </listitem> | |
| 2307 | + <listitem> | |
| 2308 | + <para> | |
| 2309 | + The <classname>QPDFExc</classname> class now internally | |
| 2310 | + represents various fields of the error condition and provides | |
| 2311 | + interfaces for querying them. Among the fields is a numeric | |
| 2312 | + error code that can help applications act differently on (a small | |
| 2313 | + number of) different error conditions. See | |
| 2314 | + <filename>QPDFExc.hh</filename> for details. | |
| 2315 | + </para> | |
| 2316 | + </listitem> | |
| 2317 | + <listitem> | |
| 2318 | + <para> | |
| 2319 | + Warnings can be retrieved from qpdf as instances of | |
| 2320 | + <classname>QPDFExc</classname> instead of strings. | |
| 2321 | + </para> | |
| 2322 | + </listitem> | |
| 2323 | + <listitem> | |
| 2324 | + <para> | |
| 2325 | + The nested <classname>QPDF::EncryptionData</classname> class's | |
| 2326 | + constructor takes an additional argument. This class is | |
| 2327 | + primarily intended to be used by | |
| 2328 | + <classname>QPDFWriter</classname>. There's not really anything | |
| 2329 | + useful an end-user application could do with it. It probably | |
| 2330 | + shouldn't really be part of the public interface to begin with. | |
| 2331 | + Likewise, some of the methods for computing internal encryption | |
| 2332 | + dictionary parameters have changed to support | |
| 2333 | + <literal>/R=4</literal> encryption. | |
| 2334 | + </para> | |
| 2335 | + </listitem> | |
| 2336 | + <listitem> | |
| 2337 | + <para> | |
| 2338 | + The method <function>QPDF::getUserPassword</function> has been | |
| 2339 | + removed since it didn't do what people would think it did. There | |
| 2340 | + are now two new methods: | |
| 2341 | + <function>QPDF::getPaddedUserPassword</function> and | |
| 2342 | + <function>QPDF::getTrimmedUserPassword</function>. The first one | |
| 2343 | + does what the old <function>QPDF::getUserPassword</function> | |
| 2344 | + method used to do, which is to return the password with possible | |
| 2345 | + binary padding as specified by the PDF specification. The second | |
| 2346 | + one returns a human-readable password string. | |
| 2347 | + </para> | |
| 2348 | + </listitem> | |
| 2349 | + <listitem> | |
| 2350 | + <para> | |
| 2351 | + The enumerated types that used to be nested in | |
| 2352 | + <classname>QPDFWriter</classname> have moved to top-level | |
| 2353 | + enumerated types and are now defined in the file | |
| 2354 | + <filename>qpdf/Constants.h</filename>. This enables them to be | |
| 2355 | + shared by both the C and C++ interfaces. | |
| 2356 | + </para> | |
| 2357 | + </listitem> | |
| 2358 | + </itemizedlist> | |
| 2359 | + </appendix> | |
| 2034 | 2360 | </book> | ... | ... |
qpdf.spec
| 1 | 1 | Summary: Command-line tools and library for transforming PDF files |
| 2 | 2 | Name: qpdf |
| 3 | -Version: 2.1.a1 | |
| 3 | +Version: 2.1.rc1 | |
| 4 | 4 | Release: 1%{?dist} |
| 5 | 5 | License: Artistic |
| 6 | 6 | Group: System Environment/Libraries |
| 7 | -URL: http://sourceforge.net/projects/qpdf/ | |
| 7 | +URL: http://qpdf.sourceforge.net/ | |
| 8 | 8 | |
| 9 | 9 | Source: %{name}-%{version}.tar.gz |
| 10 | 10 | ... | ... |
qpdf/qpdf.cc
| ... | ... | @@ -555,7 +555,7 @@ int main(int argc, char* argv[]) |
| 555 | 555 | // 1 2 3 4 5 6 7 8 |
| 556 | 556 | // 12345678901234567890123456789012345678901234567890123456789012345678901234567890 |
| 557 | 557 | std::cout |
| 558 | - << whoami << " version 2.1.a1" << std::endl | |
| 558 | + << whoami << " version " << QPDF::QPDFVersion() << std::endl | |
| 559 | 559 | << "Copyright (c) 2005-2009 Jay Berkenbilt" |
| 560 | 560 | << std::endl |
| 561 | 561 | << "This software may be distributed under the terms of version 2 of the" | ... | ... |
qpdf/qtest/qpdf.test
| ... | ... | @@ -81,7 +81,12 @@ flush_tiff_cache(); |
| 81 | 81 | show_ntests(); |
| 82 | 82 | # ---------- |
| 83 | 83 | $td->notify("--- Miscellaneous Tests ---"); |
| 84 | -$n_tests += 14; | |
| 84 | +$n_tests += 15; | |
| 85 | + | |
| 86 | +$td->runtest("qpdf version", | |
| 87 | + {$td->COMMAND => "qpdf --version"}, | |
| 88 | + {$td->REGEXP => "qpdf version \\S+\n.*", $td->EXIT_STATUS => 0}, | |
| 89 | + $td->NORMALIZE_NEWLINES); | |
| 85 | 90 | |
| 86 | 91 | foreach (my $i = 1; $i <= 3; ++$i) |
| 87 | 92 | { | ... | ... |