Commit 0f1ce8e6461d417d1fed2ea4a0cbf27f10ee4eff

Authored by Jay Berkenbilt
1 parent 4c31d3b8

Prepare 7.0.0 release

ChangeLog
  1 +2017-09-15 Jay Berkenbilt <ejb@ql.org>
  2 +
  3 + * 7.0.0: release
  4 +
1 5 2017-09-12 Jay Berkenbilt <ejb@ql.org>
2 6  
3 7 * Relicense qpdf under version 2.0 of the Apache License rather
... ...
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.
... ...
1   -Before final 7.0.0
2   -==================
3   -
4   - * Include information about relicensing prominently in release
5   - announcement for packagers.
6   -
7   - * Create release notes
8   -
9 1 Soon
10 2 ====
11 3  
... ...
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
... ... @@ -19,7 +19,7 @@
19 19 #include <qpdf/QPDF_Null.hh>
20 20 #include <qpdf/QPDF_Dictionary.hh>
21 21  
22   -std::string QPDF::qpdf_version = "7.0.b1";
  22 +std::string QPDF::qpdf_version = "7.0.0";
23 23  
24 24 static char const* EMPTY_PDF =
25 25 "%PDF-1.3\n"
... ...
manual/qpdf-manual.xml
... ... @@ -5,8 +5,8 @@
5 5 <!ENTITY mdash "&#x2014;">
6 6 <!ENTITY ndash "&#x2013;">
7 7 <!ENTITY nbsp "&#xA0;">
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   - &ldquo;<option>--</option>&rdquo; as <option>outfilename</option>
  292 + &ldquo;<option>-</option>&rdquo; 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&lt;/option&gt;
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&lt;/option&gt;
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&lt;/option&gt;
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&lt;/option&gt;
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&nbsp;2.0.4).
  1381 + version&nbsp;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 &quot;\n&quot;;
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>
... ...