Commit 41c839e20ee3431c881e87917930175b0fbf27ae
1 parent
7db44e26
Refactor `QPDFWriter`: update `qdf` handling logic to include `preserve_encrypti…
…on` checks, consolidate parameter updates, and remove redundant code for improved clarity.
Showing
2 changed files
with
20 additions
and
22 deletions
libqpdf/QPDFWriter.cc
| ... | ... | @@ -648,7 +648,26 @@ Config::qdf(bool val) |
| 648 | 648 | if (pclm_ || linearize_) { |
| 649 | 649 | usage("qdf cannot be set when linearize or pclm are set"); |
| 650 | 650 | } |
| 651 | + if (preserve_encryption_) { | |
| 652 | + usage("preserve_encryption cannot be set when qdf is set"); | |
| 653 | + } | |
| 651 | 654 | qdf_ = val; |
| 655 | + if (val) { | |
| 656 | + if (!normalize_content_set_) { | |
| 657 | + normalize_content(true); | |
| 658 | + } | |
| 659 | + if (!compress_streams_set_) { | |
| 660 | + compress_streams(false); | |
| 661 | + } | |
| 662 | + if (!stream_decode_level_set_) { | |
| 663 | + stream_decode_level(qpdf_dl_generalized); | |
| 664 | + } | |
| 665 | + preserve_encryption_ = false; | |
| 666 | + // Generate indirect stream lengths for qdf mode since fix-qdf uses them for storing | |
| 667 | + // recomputed stream length data. Certain streams such as object streams, xref streams, and | |
| 668 | + // hint streams always get direct stream lengths. | |
| 669 | + direct_stream_lengths_ = false; | |
| 670 | + } | |
| 652 | 671 | return *this; |
| 653 | 672 | } |
| 654 | 673 | |
| ... | ... | @@ -2307,22 +2326,10 @@ impl::Writer::doWriteSetup() |
| 2307 | 2326 | encryption = nullptr; |
| 2308 | 2327 | } |
| 2309 | 2328 | |
| 2310 | - if (cfg.qdf()) { | |
| 2311 | - if (!cfg.normalize_content_set_) { | |
| 2312 | - cfg.normalize_content(true); | |
| 2313 | - } | |
| 2314 | - if (!cfg.compress_streams_set_) { | |
| 2315 | - cfg.compress_streams(false); | |
| 2316 | - } | |
| 2317 | - if (!cfg.stream_decode_level_set_) { | |
| 2318 | - cfg.stream_decode_level(qpdf_dl_generalized); | |
| 2319 | - } | |
| 2320 | - } | |
| 2321 | - | |
| 2322 | 2329 | if (encryption) { |
| 2323 | 2330 | // Encryption has been explicitly set |
| 2324 | 2331 | cfg.preserve_encryption(false); |
| 2325 | - } else if (cfg.normalize_content() || cfg.pclm() || cfg.qdf()) { | |
| 2332 | + } else if (cfg.normalize_content() || cfg.pclm()) { | |
| 2326 | 2333 | // Encryption makes looking at contents pretty useless. If the user explicitly encrypted |
| 2327 | 2334 | // though, we still obey that. |
| 2328 | 2335 | cfg.preserve_encryption(false); |
| ... | ... | @@ -2346,13 +2353,6 @@ impl::Writer::doWriteSetup() |
| 2346 | 2353 | initializeSpecialStreams(); |
| 2347 | 2354 | } |
| 2348 | 2355 | |
| 2349 | - if (cfg.qdf()) { | |
| 2350 | - // Generate indirect stream lengths for qdf mode since fix-qdf uses them for storing | |
| 2351 | - // recomputed stream length data. Certain streams such as object streams, xref streams, and | |
| 2352 | - // hint streams always get direct stream lengths. | |
| 2353 | - cfg.direct_stream_lengths_ = false; | |
| 2354 | - } | |
| 2355 | - | |
| 2356 | 2356 | switch (cfg.object_streams()) { |
| 2357 | 2357 | case qpdf_o_disable: |
| 2358 | 2358 | initializeTables(); | ... | ... |