Commit edefc8964f0d5f9b9f265d32b084793a256b46a0

Authored by m-holger
1 parent 8d4de787

Refactor `QPDFWriter`: replace `QPDFObjectHandle` with `Dictionary` in stream di…

…ctionary handling, streamline filtering logic, and simplify length checks.
Showing 1 changed file with 6 additions and 7 deletions
libqpdf/QPDFWriter.cc
@@ -1522,7 +1522,7 @@ QPDFWriter::Members::will_filter_stream(QPDFObjectHandle stream, std::string* st @@ -1522,7 +1522,7 @@ QPDFWriter::Members::will_filter_stream(QPDFObjectHandle stream, std::string* st
1522 bool compress_stream = false; 1522 bool compress_stream = false;
1523 const bool is_root_metadata = stream.isRootMetadata(); 1523 const bool is_root_metadata = stream.isRootMetadata();
1524 1524
1525 - QPDFObjectHandle stream_dict = stream.getDict(); 1525 + Dictionary stream_dict = stream.getDict();
1526 1526
1527 bool filter = false; 1527 bool filter = false;
1528 bool normalize = false; 1528 bool normalize = false;
@@ -1535,9 +1535,9 @@ QPDFWriter::Members::will_filter_stream(QPDFObjectHandle stream, std::string* st @@ -1535,9 +1535,9 @@ QPDFWriter::Members::will_filter_stream(QPDFObjectHandle stream, std::string* st
1535 // make it worse if the original file used a better Flate algorithm, and we don't spend 1535 // make it worse if the original file used a better Flate algorithm, and we don't spend
1536 // time and CPU cycles uncompressing and recompressing stuff. This can be overridden 1536 // time and CPU cycles uncompressing and recompressing stuff. This can be overridden
1537 // with setRecompressFlate(true). 1537 // with setRecompressFlate(true).
1538 - QPDFObjectHandle filter_obj = stream_dict.getKey("/Filter");  
1539 - if (!recompress_flate && !stream.isDataModified() && filter_obj.isName() &&  
1540 - (filter_obj.getName() == "/FlateDecode" || filter_obj.getName() == "/Fl")) { 1538 + Name Filter = stream_dict["/Filter"];
  1539 + if (Filter && !recompress_flate && !stream.isDataModified() &&
  1540 + (Filter == "/FlateDecode" || Filter == "/Fl")) {
1541 filter = false; 1541 filter = false;
1542 } 1542 }
1543 } 1543 }
@@ -1554,8 +1554,7 @@ QPDFWriter::Members::will_filter_stream(QPDFObjectHandle stream, std::string* st @@ -1554,8 +1554,7 @@ QPDFWriter::Members::will_filter_stream(QPDFObjectHandle stream, std::string* st
1554 } 1554 }
1555 1555
1556 // Disable compression for empty streams to improve compatibility 1556 // Disable compression for empty streams to improve compatibility
1557 - if (stream_dict.getKey("/Length").isInteger() &&  
1558 - stream_dict.getKey("/Length").getIntValue() == 0) { 1557 + if (Integer(stream_dict["/Length"]) == 0) {
1559 filter = true; 1558 filter = true;
1560 compress_stream = false; 1559 compress_stream = false;
1561 } 1560 }
@@ -1597,7 +1596,7 @@ QPDFWriter::Members::will_filter_stream(QPDFObjectHandle stream, std::string* st @@ -1597,7 +1596,7 @@ QPDFWriter::Members::will_filter_stream(QPDFObjectHandle stream, std::string* st
1597 } 1596 }
1598 } 1597 }
1599 if (!filtered) { 1598 if (!filtered) {
1600 - compress_stream = false; 1599 + return {false, false, is_root_metadata};
1601 } 1600 }
1602 return {filtered, compress_stream, is_root_metadata}; 1601 return {filtered, compress_stream, is_root_metadata};
1603 } 1602 }