aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2019-08-24 01:59:38 +0200
committerJay Berkenbilt <ejb@ql.org>2019-08-24 02:34:21 +0200
commit2794bfb1a665cad93a38144bea0ba0daea7152e7 (patch)
treee83256473254f4935de0477d784a2123a7828d27 /libqpdf
parentdac0598b94c877bec92a1edd78ae00021cfa1638 (diff)
downloadqpdf-2794bfb1a665cad93a38144bea0ba0daea7152e7.tar.zst
Add flags to control zlib compression level (fixes #113)
Diffstat (limited to 'libqpdf')
-rw-r--r--libqpdf/QPDFWriter.cc20
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")))