diff options
author | Jay Berkenbilt <ejb@ql.org> | 2019-08-24 01:59:38 +0200 |
---|---|---|
committer | Jay Berkenbilt <ejb@ql.org> | 2019-08-24 02:34:21 +0200 |
commit | 2794bfb1a665cad93a38144bea0ba0daea7152e7 (patch) | |
tree | e83256473254f4935de0477d784a2123a7828d27 /libqpdf/QPDFWriter.cc | |
parent | dac0598b94c877bec92a1edd78ae00021cfa1638 (diff) | |
download | qpdf-2794bfb1a665cad93a38144bea0ba0daea7152e7.tar.zst |
Add flags to control zlib compression level (fixes #113)
Diffstat (limited to 'libqpdf/QPDFWriter.cc')
-rw-r--r-- | libqpdf/QPDFWriter.cc | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/libqpdf/QPDFWriter.cc b/libqpdf/QPDFWriter.cc index 6c92338d..30bc1fcb 100644 --- a/libqpdf/QPDFWriter.cc +++ b/libqpdf/QPDFWriter.cc @@ -37,6 +37,7 @@ QPDFWriter::Members::Members(QPDF& pdf) : compress_streams_set(false), stream_decode_level(qpdf_dl_none), stream_decode_level_set(false), + recompress_flate(false), qdf_mode(false), preserve_unreferenced_objects(false), newline_before_endstream(false), @@ -207,6 +208,12 @@ QPDFWriter::setDecodeLevel(qpdf_stream_decode_level_e val) } void +QPDFWriter::setRecompressFlate(bool val) +{ + this->m->recompress_flate = val; +} + +void QPDFWriter::setContentNormalization(bool val) { this->m->normalize_content_set = true; @@ -1716,13 +1723,14 @@ QPDFWriter::unparseObject(QPDFObjectHandle object, int level, if (this->m->compress_streams) { // Don't filter if the stream is already compressed with - // FlateDecode. We don't want to make it worse by getting - // rid of a predictor or otherwise messing with it. We - // should also avoid messing with anything that's - // compressed with a lossy compression scheme, but we - // don't support any of those right now. + // FlateDecode. This way we don't make it worse if the + // original file used a better Flate algorithm, and we + // don't spend time and CPU cycles uncompressing and + // recompressing stuff. This can be overridden with + // setRecompressFlate(true). QPDFObjectHandle filter_obj = stream_dict.getKey("/Filter"); - if ((! object.isDataModified()) && + if ((! this->m->recompress_flate) && + (! object.isDataModified()) && filter_obj.isName() && ((filter_obj.getName() == "/FlateDecode") || (filter_obj.getName() == "/Fl"))) |