summaryrefslogtreecommitdiff
path: root/source/pdf/pdf-write.c
diff options
context:
space:
mode:
authorTor Andersson <tor.andersson@artifex.com>2017-12-01 15:28:32 +0100
committerTor Andersson <tor.andersson@artifex.com>2017-12-13 15:01:05 +0100
commit634d64e47f82f23bc8cd7a05464a9defc66fee08 (patch)
tree94c3ad2ff718875af9a1798828e9adff2ad7c4ba /source/pdf/pdf-write.c
parentc4d4d6cfcacdbeb277ab6624dc33d0b490024f9b (diff)
downloadmupdf-634d64e47f82f23bc8cd7a05464a9defc66fee08.tar.xz
Add 'clean' option to pdfclean to clean (but not sanitize) content streams.
This goes well with the 'mutool clean -d' decompression option to debug content streams, without doing the sanitize optimization pass.
Diffstat (limited to 'source/pdf/pdf-write.c')
-rw-r--r--source/pdf/pdf-write.c19
1 files changed, 11 insertions, 8 deletions
diff --git a/source/pdf/pdf-write.c b/source/pdf/pdf-write.c
index 154655e0..9fcdbf0a 100644
--- a/source/pdf/pdf-write.c
+++ b/source/pdf/pdf-write.c
@@ -2703,7 +2703,7 @@ static void complete_signatures(fz_context *ctx, pdf_document *doc, pdf_write_st
}
}
-static void sanitize(fz_context *ctx, pdf_document *doc, int ascii)
+static void clean_content_streams(fz_context *ctx, pdf_document *doc, int sanitize, int ascii)
{
int n = pdf_count_pages(ctx, doc);
int i;
@@ -2712,11 +2712,11 @@ static void sanitize(fz_context *ctx, pdf_document *doc, int ascii)
{
pdf_annot *annot;
pdf_page *page = pdf_load_page(ctx, doc, i);
- pdf_clean_page_contents(ctx, doc, page, NULL, NULL, NULL, ascii);
+ pdf_clean_page_contents(ctx, doc, page, NULL, NULL, NULL, sanitize, ascii);
for (annot = pdf_first_annot(ctx, page); annot != NULL; annot = pdf_next_annot(ctx, annot))
{
- pdf_clean_annot_contents(ctx, doc, annot, NULL, NULL, NULL, ascii);
+ pdf_clean_annot_contents(ctx, doc, annot, NULL, NULL, NULL, sanitize, ascii);
}
fz_drop_page(ctx, &page->super);
@@ -2787,7 +2787,8 @@ const char *fz_pdf_write_options_usage =
"\tascii: ASCII hex encode binary streams\n"
"\tpretty: pretty-print objects with indentation\n"
"\tlinearize: optimize for web browsers\n"
- "\tsanitize: clean up graphics commands in content streams\n"
+ "\tclean: pretty-print graphics commands in content streams\n"
+ "\tsanitize: sanitize graphics commands in content streams\n"
"\tgarbage: garbage collect unused objects\n"
"\tincremental: write changes as incremental update\n"
"\tcontinue-on-error: continue saving the document even if there is an error\n"
@@ -2816,8 +2817,10 @@ pdf_parse_write_options(fz_context *ctx, pdf_write_options *opts, const char *ar
opts->do_pretty = fz_option_eq(val, "yes");
if (fz_has_option(ctx, args, "linearize", &val))
opts->do_linear = fz_option_eq(val, "yes");
- if (fz_has_option(ctx, args, "sanitize", &val))
+ if (fz_has_option(ctx, args, "clean", &val))
opts->do_clean = fz_option_eq(val, "yes");
+ if (fz_has_option(ctx, args, "sanitize", &val))
+ opts->do_sanitize = fz_option_eq(val, "yes");
if (fz_has_option(ctx, args, "incremental", &val))
opts->do_incremental = fz_option_eq(val, "yes");
if (fz_has_option(ctx, args, "continue-on-error", &val))
@@ -2851,9 +2854,9 @@ prepare_for_save(fz_context *ctx, pdf_document *doc, pdf_write_options *in_opts)
{
doc->freeze_updates = 1;
- /* Sanitize the operator streams */
- if (in_opts->do_clean)
- sanitize(ctx, doc, in_opts->do_ascii);
+ /* Rewrite (and possibly sanitize) the operator streams */
+ if (in_opts->do_clean || in_opts->do_sanitize)
+ clean_content_streams(ctx, doc, in_opts->do_sanitize, in_opts->do_ascii);
pdf_finish_edit(ctx, doc);
presize_unsaved_signature_byteranges(ctx, doc);