Commit 99f3a7b5a33a31f4d519918b6ad2ca0b5034334f
1 parent
634d9249
In QPDFWriter::writeLinearized remember whether streams are filtered
Showing
1 changed file
with
13 additions
and
7 deletions
libqpdf/QPDFWriter.cc
| ... | ... | @@ -2544,14 +2544,20 @@ QPDFWriter::writeLinearized() |
| 2544 | 2544 | { |
| 2545 | 2545 | // Optimize file and enqueue objects in order |
| 2546 | 2546 | |
| 2547 | - auto skip_stream_parameters = [this](QPDFObjectHandle& stream) { | |
| 2548 | - bool compress_stream; | |
| 2549 | - bool is_metadata; | |
| 2550 | - if (willFilterStream(stream, compress_stream, is_metadata, nullptr)) { | |
| 2551 | - return 2; | |
| 2552 | - } else { | |
| 2553 | - return 1; | |
| 2547 | + std::map<int, int> stream_cache; | |
| 2548 | + | |
| 2549 | + auto skip_stream_parameters = [this, &stream_cache](QPDFObjectHandle& stream) { | |
| 2550 | + auto& result = stream_cache[stream.getObjectID()]; | |
| 2551 | + if (result == 0) { | |
| 2552 | + bool compress_stream; | |
| 2553 | + bool is_metadata; | |
| 2554 | + if (willFilterStream(stream, compress_stream, is_metadata, nullptr)) { | |
| 2555 | + result = 2; | |
| 2556 | + } else { | |
| 2557 | + result = 1; | |
| 2558 | + } | |
| 2554 | 2559 | } |
| 2560 | + return result; | |
| 2555 | 2561 | }; |
| 2556 | 2562 | |
| 2557 | 2563 | QPDF::Writer::optimize(m->pdf, m->obj, skip_stream_parameters); | ... | ... |