Commit 0f1ce8e6461d417d1fed2ea4a0cbf27f10ee4eff
1 parent
4c31d3b8
Prepare 7.0.0 release
Showing
6 changed files
with
268 additions
and
42 deletions
ChangeLog
README-maintainer.md
| ... | ... | @@ -14,7 +14,7 @@ |
| 14 | 14 | --enable-werror --disable-shared |
| 15 | 15 | ``` |
| 16 | 16 | The test suite should run clean with this. This seems to be more reliable than valgrind. |
| 17 | -* Test with clang. | |
| 17 | +* Test with clang. Pass `CC=clang CXX=clang++` to `./configure`. | |
| 18 | 18 | * Check all open issues in the sourceforge trackers and on github. |
| 19 | 19 | * 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. |
| 20 | 20 | * Avoid atoi. Use QUtil::string_to_int instead. It does overflow/underflow checking. | ... | ... |
TODO
configure.ac
| ... | ... | @@ -2,7 +2,7 @@ dnl Process this file with autoconf to produce a configure script. |
| 2 | 2 | dnl This config.in requires autoconf 2.5 or greater. |
| 3 | 3 | |
| 4 | 4 | AC_PREREQ([2.68]) |
| 5 | -AC_INIT([qpdf],[7.0.b1]) | |
| 5 | +AC_INIT([qpdf],[7.0.0]) | |
| 6 | 6 | |
| 7 | 7 | AC_CONFIG_MACRO_DIR([m4]) |
| 8 | 8 | AC_CONFIG_FILES([autoconf.mk]) |
| ... | ... | @@ -29,9 +29,9 @@ LT_INIT([win32-dll]) |
| 29 | 29 | # * Otherwise, increment LT_REVISION |
| 30 | 30 | |
| 31 | 31 | # LT = libtool |
| 32 | -LT_CURRENT=18 | |
| 32 | +LT_CURRENT=19 | |
| 33 | +LT_AGE=1 | |
| 33 | 34 | LT_REVISION=0 |
| 34 | -LT_AGE=0 | |
| 35 | 35 | AC_SUBST(LT_CURRENT) |
| 36 | 36 | AC_SUBST(LT_REVISION) |
| 37 | 37 | AC_SUBST(LT_AGE) | ... | ... |
libqpdf/QPDF.cc
manual/qpdf-manual.xml
| ... | ... | @@ -5,8 +5,8 @@ |
| 5 | 5 | <!ENTITY mdash "—"> |
| 6 | 6 | <!ENTITY ndash "–"> |
| 7 | 7 | <!ENTITY nbsp " "> |
| 8 | -<!ENTITY swversion "7.0.b1"> | |
| 9 | -<!ENTITY lastreleased "August 22, 2017"> | |
| 8 | +<!ENTITY swversion "7.0.0"> | |
| 9 | +<!ENTITY lastreleased "September 15, 2017"> | |
| 10 | 10 | ]> |
| 11 | 11 | <book> |
| 12 | 12 | <bookinfo> |
| ... | ... | @@ -154,8 +154,8 @@ |
| 154 | 154 | <listitem> |
| 155 | 155 | <para> |
| 156 | 156 | A C++ compiler that works well with STL and has the <type>long |
| 157 | - long</type> type. Most modern C++ compilers should fit the | |
| 158 | - bill fine. QPDF is tested with gcc and Microsoft Visual C++. | |
| 157 | + long</type> type. Most modern C++ compilers should fit the bill | |
| 158 | + fine. QPDF is tested with gcc, clang, and Microsoft Visual C++. | |
| 159 | 159 | </para> |
| 160 | 160 | </listitem> |
| 161 | 161 | </itemizedlist> |
| ... | ... | @@ -283,15 +283,17 @@ make |
| 283 | 283 | treated as a command-line argument. The <option>@-</option> option |
| 284 | 284 | allows arguments to be read from standard input. This allows qpdf |
| 285 | 285 | to be invoked with an arbitrary number of arbitrarily long |
| 286 | - arguments. | |
| 286 | + arguments. It is also very useful for avoiding having to pass | |
| 287 | + passwords on the command line. | |
| 287 | 288 | </para> |
| 288 | 289 | <para> |
| 289 | 290 | <option>outfilename</option> does not have to be seekable, even |
| 290 | 291 | when generating linearized files. Specifying |
| 291 | - “<option>--</option>” as <option>outfilename</option> | |
| 292 | + “<option>-</option>” as <option>outfilename</option> | |
| 292 | 293 | means to write to standard output. However, you can't specify the |
| 293 | 294 | same file as both the input and the output because qpdf reads data |
| 294 | - from the input file as it writes to the output file. | |
| 295 | + from the input file as it writes to the output file. QPDF attempts | |
| 296 | + to detect this case and fail without overwriting the output file. | |
| 295 | 297 | </para> |
| 296 | 298 | <para> |
| 297 | 299 | Most options require an output file, but some testing or |
| ... | ... | @@ -507,12 +509,11 @@ make |
| 507 | 509 | encoded in ISO-8859-1 and your terminal is configured to use |
| 508 | 510 | UTF-8, the password you supply may not work properly. There are |
| 509 | 511 | various approaches to handling this. For example, if you are |
| 510 | - using Linux and have the iconv executable (part of the ICU | |
| 511 | - package) installed, you could pass <option>--password=`echo | |
| 512 | - <replaceable>password</replaceable> | iconv -t | |
| 513 | - iso-8859-1`</option> to qpdf where | |
| 512 | + using Linux and have the iconv executable installed, you could | |
| 513 | + pass <option>--password=`echo <replaceable>password</replaceable> | |
| 514 | + | iconv -t iso-8859-1`</option> to qpdf where | |
| 514 | 515 | <replaceable>password</replaceable> is a password specified in |
| 515 | - your terminal's locale. A detailed discussion of this is out of | |
| 516 | + your terminal's locale. A detailed discussion of this is out of | |
| 516 | 517 | scope for this manual, but just be aware of this issue if you have |
| 517 | 518 | trouble with a password that contains 8-bit characters. |
| 518 | 519 | </para> |
| ... | ... | @@ -904,7 +905,10 @@ outfile.pdf</option> |
| 904 | 905 | supported generalized filters: <option>/LZWDecode</option>, |
| 905 | 906 | <option>/FlateDecode</option>, |
| 906 | 907 | <option>/ASCII85Decode</option>, and |
| 907 | - <option>/ASCIIHexDecode</option> | |
| 908 | + <option>/ASCIIHexDecode</option>. We define generalized | |
| 909 | + filters as those to be used for general-purpose compression | |
| 910 | + or encoding, as opposed to filters specifically designed | |
| 911 | + for image data. | |
| 908 | 912 | </para> |
| 909 | 913 | </listitem> |
| 910 | 914 | <listitem> |
| ... | ... | @@ -953,9 +957,9 @@ outfile.pdf</option> |
| 953 | 957 | </listitem> |
| 954 | 958 | <listitem> |
| 955 | 959 | <para> |
| 956 | - <option>uncompress</option>: uncompress stream data when | |
| 957 | - possible; equivalent to | |
| 958 | - <option>--compress-streams=n</option> | |
| 960 | + <option>uncompress</option>: uncompress stream data | |
| 961 | + compressed with generalized filters when possible; | |
| 962 | + equivalent to <option>--compress-streams=n</option> | |
| 959 | 963 | <option>--decode-level=generalized</option> |
| 960 | 964 | </para> |
| 961 | 965 | </listitem> |
| ... | ... | @@ -1131,18 +1135,6 @@ outfile.pdf</option> |
| 1131 | 1135 | requested with <option>--stream-data=compress</option>. |
| 1132 | 1136 | </para> |
| 1133 | 1137 | <para> |
| 1134 | - When <option>--stream-data=preserve</option> is specified, qpdf | |
| 1135 | - will never attempt to change the filtering of any stream data. | |
| 1136 | - </para> | |
| 1137 | - <para> | |
| 1138 | - When <option>--stream-data=uncompress</option> is specified, qpdf | |
| 1139 | - will attempt to remove any non-lossy filters that it supports. | |
| 1140 | - This includes <literal>/FlateDecode</literal>, | |
| 1141 | - <literal>/LZWDecode</literal>, <literal>/ASCII85Decode</literal>, | |
| 1142 | - and <literal>/ASCIIHexDecode</literal>. This can be very useful | |
| 1143 | - for inspecting the contents of various streams. | |
| 1144 | - </para> | |
| 1145 | - <para> | |
| 1146 | 1138 | When <option>--normalize-content=y</option> is specified, qpdf |
| 1147 | 1139 | will attempt to normalize whitespace and newlines in page content |
| 1148 | 1140 | streams. This is generally safe but could, in some cases, cause |
| ... | ... | @@ -1386,7 +1378,14 @@ outfile.pdf</option> |
| 1386 | 1378 | conditions that <option>--check</option> detects. These are |
| 1387 | 1379 | issued as warnings instead of errors. If qpdf finds no errors |
| 1388 | 1380 | but finds warnings, it will exit with a status of 3 (as of |
| 1389 | - version 2.0.4). | |
| 1381 | + version 2.0.4). When <option>--check</option> is combined | |
| 1382 | + with other options, checks are always performed before any | |
| 1383 | + other options are processed. For erroneous files, | |
| 1384 | + <option>--check</option> will cause qpdf to attempt to | |
| 1385 | + recover, after which other options are effectively operating | |
| 1386 | + on the recovered file. Combining <option>--check</option> with | |
| 1387 | + other options in this way can be useful for manually | |
| 1388 | + recovering severely damaged files. | |
| 1390 | 1389 | </para> |
| 1391 | 1390 | </listitem> |
| 1392 | 1391 | </varlistentry> |
| ... | ... | @@ -2926,6 +2925,237 @@ print "\n"; |
| 2926 | 2925 | </para> |
| 2927 | 2926 | <variablelist> |
| 2928 | 2927 | <varlistentry> |
| 2928 | + <term>7.0.0: September 15, 2017</term> | |
| 2929 | + <listitem> | |
| 2930 | + <itemizedlist> | |
| 2931 | + <listitem> | |
| 2932 | + <para> | |
| 2933 | + Packaging and Distribution Changes | |
| 2934 | + </para> | |
| 2935 | + <itemizedlist> | |
| 2936 | + <listitem> | |
| 2937 | + <para> | |
| 2938 | + QPDF's primary license is now <ulink | |
| 2939 | + url="http://www.apache.org/licenses/LICENSE-2.0">version 2.0 | |
| 2940 | + of the Apache License</ulink> rather than version 2.0 of the | |
| 2941 | + Artistic License. You may still, at your option, consider | |
| 2942 | + qpdf to be licensed with version 2.0 of the Artistic | |
| 2943 | + license. | |
| 2944 | + </para> | |
| 2945 | + </listitem> | |
| 2946 | + <listitem> | |
| 2947 | + <para> | |
| 2948 | + QPDF no longer has a dependency on the PCRE (Perl-Compatible | |
| 2949 | + Regular Expression) library. QPDF now has an added | |
| 2950 | + dependency on the JPEG library. | |
| 2951 | + </para> | |
| 2952 | + </listitem> | |
| 2953 | + </itemizedlist> | |
| 2954 | + </listitem> | |
| 2955 | + </itemizedlist> | |
| 2956 | + <itemizedlist> | |
| 2957 | + <listitem> | |
| 2958 | + <para> | |
| 2959 | + Bug Fixes | |
| 2960 | + </para> | |
| 2961 | + <itemizedlist> | |
| 2962 | + <listitem> | |
| 2963 | + <para> | |
| 2964 | + This release contains many bug fixes for various infinite | |
| 2965 | + loops, memory leaks, and other memory errors that could be | |
| 2966 | + encountered with specially crafted or otherwise erroneous | |
| 2967 | + PDF files. | |
| 2968 | + </para> | |
| 2969 | + </listitem> | |
| 2970 | + </itemizedlist> | |
| 2971 | + </listitem> | |
| 2972 | + </itemizedlist> | |
| 2973 | + <itemizedlist> | |
| 2974 | + <listitem> | |
| 2975 | + <para> | |
| 2976 | + New Features | |
| 2977 | + </para> | |
| 2978 | + <itemizedlist> | |
| 2979 | + <listitem> | |
| 2980 | + <para> | |
| 2981 | + QPDF now supports reading and writing streams encoded with | |
| 2982 | + JPEG or RunLength encoding. Library API enhancements and | |
| 2983 | + command-line options have been added to control this | |
| 2984 | + behavior. See command-line options | |
| 2985 | + <option>--compress-streams</option> and | |
| 2986 | + <option>--decode-level</option> and methods | |
| 2987 | + <function>QPDFWriter::setCompressStreams</function> and | |
| 2988 | + <function>QPDFWriter::setDecodeLevel</function>. | |
| 2989 | + </para> | |
| 2990 | + </listitem> | |
| 2991 | + <listitem> | |
| 2992 | + <para> | |
| 2993 | + QPDF is much better at recovering from broken files. In most | |
| 2994 | + cases, qpdf will skip invalid objects and will preserve | |
| 2995 | + broken stream data by not attempting to filter broken | |
| 2996 | + streams. QPDF is now able to recover or at least not crash | |
| 2997 | + on dozens of broken test files I have received over the past | |
| 2998 | + few years. | |
| 2999 | + </para> | |
| 3000 | + </listitem> | |
| 3001 | + <listitem> | |
| 3002 | + <para> | |
| 3003 | + Page rotation is now supported and accessible from both the | |
| 3004 | + library and the command line. | |
| 3005 | + </para> | |
| 3006 | + </listitem> | |
| 3007 | + <listitem> | |
| 3008 | + <para> | |
| 3009 | + <classname>QPDFWriter</classname> supports writing files in | |
| 3010 | + a way that preserves PCLm compliance in support of | |
| 3011 | + driverless printing. This is very specialized and is only | |
| 3012 | + useful to applications that already know how to create PCLm | |
| 3013 | + files. | |
| 3014 | + </para> | |
| 3015 | + </listitem> | |
| 3016 | + </itemizedlist> | |
| 3017 | + </listitem> | |
| 3018 | + </itemizedlist> | |
| 3019 | + <itemizedlist> | |
| 3020 | + <listitem> | |
| 3021 | + <para> | |
| 3022 | + Enhancements to the <command>qpdf</command> Command-line Tool. | |
| 3023 | + All new options listed here are documented in more detail in | |
| 3024 | + <xref linkend="ref.using"/>. | |
| 3025 | + </para> | |
| 3026 | + <itemizedlist> | |
| 3027 | + <listitem> | |
| 3028 | + <para> | |
| 3029 | + Command-line arguments can now be read from files or | |
| 3030 | + standard input using <literal>@file</literal> or | |
| 3031 | + <literal>@-</literal> syntax. Please see <xref | |
| 3032 | + linkend="ref.invocation"/>. | |
| 3033 | + </para> | |
| 3034 | + </listitem> | |
| 3035 | + <listitem> | |
| 3036 | + <para> | |
| 3037 | + <option>--rotate</option>: request page rotation | |
| 3038 | + </para> | |
| 3039 | + </listitem> | |
| 3040 | + <listitem> | |
| 3041 | + <para> | |
| 3042 | + <option>--newline-before-endstream</option>: ensure that a | |
| 3043 | + newline appears before every <literal>endstream</literal> | |
| 3044 | + keyword in the file; used to prevent qpdf from breaking | |
| 3045 | + PDF/A compliance on already compliant files. | |
| 3046 | + </para> | |
| 3047 | + </listitem> | |
| 3048 | + <listitem> | |
| 3049 | + <para> | |
| 3050 | + <option>--preserve-unreferenced</option>: preserve | |
| 3051 | + unreferenced objects in the input PDF | |
| 3052 | + </para> | |
| 3053 | + </listitem> | |
| 3054 | + <listitem> | |
| 3055 | + <para> | |
| 3056 | + <option>--split-pages</option>: break output into chunks | |
| 3057 | + with fixed numbers of pages | |
| 3058 | + </para> | |
| 3059 | + </listitem> | |
| 3060 | + <listitem> | |
| 3061 | + <para> | |
| 3062 | + <option>--verbose</option>: print the name of each output | |
| 3063 | + file that is created | |
| 3064 | + </para> | |
| 3065 | + </listitem> | |
| 3066 | + <listitem> | |
| 3067 | + <para> | |
| 3068 | + <option>--compress-streams</option> and | |
| 3069 | + <option>--decode-level</option> replace | |
| 3070 | + <option>--stream-data</option> for improving granularity of | |
| 3071 | + controlling compression and decompression of stream data. | |
| 3072 | + The <option>--stream-data</option> option will remain | |
| 3073 | + available. | |
| 3074 | + </para> | |
| 3075 | + </listitem> | |
| 3076 | + <listitem> | |
| 3077 | + <para> | |
| 3078 | + When running <command>qpdf --check</command> with other | |
| 3079 | + options, checks are always run first. This enables qpdf to | |
| 3080 | + perform its full recovery logic before outputting other | |
| 3081 | + information. This can be especially useful when manually | |
| 3082 | + recovering broken files, looking at qpdf's regenerated cross | |
| 3083 | + reference table, or other similar operations. | |
| 3084 | + </para> | |
| 3085 | + </listitem> | |
| 3086 | + <listitem> | |
| 3087 | + <para> | |
| 3088 | + Process <command>--pages</command> earlier so that other | |
| 3089 | + options like <option>--show-pages</option> or | |
| 3090 | + <option>--split-pages</option> can operate on the file after | |
| 3091 | + page splitting/merging has occurred. | |
| 3092 | + </para> | |
| 3093 | + </listitem> | |
| 3094 | + </itemizedlist> | |
| 3095 | + </listitem> | |
| 3096 | + </itemizedlist> | |
| 3097 | + <itemizedlist> | |
| 3098 | + <listitem> | |
| 3099 | + <para> | |
| 3100 | + API Changes. All new API calls are documented in their | |
| 3101 | + respective classes' header files. | |
| 3102 | + </para> | |
| 3103 | + <itemizedlist> | |
| 3104 | + <listitem> | |
| 3105 | + <para> | |
| 3106 | + <function>QPDFObjectHandle::rotatePage</function>: apply | |
| 3107 | + rotation to a page object | |
| 3108 | + </para> | |
| 3109 | + </listitem> | |
| 3110 | + <listitem> | |
| 3111 | + <para> | |
| 3112 | + <function>QPDFWriter::setNewlineBeforeEndstream</function>: | |
| 3113 | + force newline to appear before <literal>endstream</literal> | |
| 3114 | + </para> | |
| 3115 | + </listitem> | |
| 3116 | + <listitem> | |
| 3117 | + <para> | |
| 3118 | + <function>QPDFWriter::setPreserveUnreferencedObjects</function>: | |
| 3119 | + preserve unreferenced objects that appear in the input PDF. | |
| 3120 | + The default behavior is to discard them. | |
| 3121 | + </para> | |
| 3122 | + </listitem> | |
| 3123 | + <listitem> | |
| 3124 | + <para> | |
| 3125 | + New <classname>Pipeline</classname> types | |
| 3126 | + <classname>Pl_RunLength</classname> and | |
| 3127 | + <classname>Pl_DCT</classname> are available for developers | |
| 3128 | + who wish to produce or consume RunLength or DCT stream data | |
| 3129 | + directly. The <filename>examples/pdf-create.cc</filename> | |
| 3130 | + example illustrates their use. | |
| 3131 | + </para> | |
| 3132 | + </listitem> | |
| 3133 | + <listitem> | |
| 3134 | + <para> | |
| 3135 | + <function>QPDFWriter::setCompressStreams</function> and | |
| 3136 | + <function>QPDFWriter::setDecodeLevel</function> methods | |
| 3137 | + control handling of different types of stream compression. | |
| 3138 | + </para> | |
| 3139 | + </listitem> | |
| 3140 | + <listitem> | |
| 3141 | + <para> | |
| 3142 | + Add new C API functions | |
| 3143 | + <function>qpdf_set_compress_streams</function>, | |
| 3144 | + <function>qpdf_set_decode_level</function>, | |
| 3145 | + <function>qpdf_set_preserve_unreferenced_objects</function>, | |
| 3146 | + and <function>qpdf_set_newline_before_endstream</function> | |
| 3147 | + corresponding to the new <classname>QPDFWriter</classname> | |
| 3148 | + methods. | |
| 3149 | + </para> | |
| 3150 | + </listitem> | |
| 3151 | + </itemizedlist> | |
| 3152 | + </listitem> | |
| 3153 | + </itemizedlist> | |
| 3154 | + </listitem> | |
| 3155 | + </varlistentry> | |
| 3156 | + </variablelist> | |
| 3157 | + <variablelist> | |
| 3158 | + <varlistentry> | |
| 2929 | 3159 | <term>6.0.0: November 10, 2015</term> |
| 2930 | 3160 | <listitem> |
| 2931 | 3161 | <itemizedlist> | ... | ... |