summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilipp Knechtges <philipp-dev@knechtges.com>2017-08-28 12:23:46 +0200
committerTor Andersson <tor.andersson@artifex.com>2017-08-31 13:42:39 +0200
commit98a0491b614bd4461bec7b286c08a97c2dab705b (patch)
tree2e950d7f3c26cb8ed22829d32d19695cd2726b38
parent108325161df50f90073309a042993454a3208d90 (diff)
downloadmupdf-98a0491b614bd4461bec7b286c08a97c2dab705b.tar.xz
Do not deflate metadata (necessary for PDF/A compliance).
-rw-r--r--resources/pdf/names.txt2
-rw-r--r--source/pdf/pdf-write.c10
2 files changed, 12 insertions, 0 deletions
diff --git a/resources/pdf/names.txt b/resources/pdf/names.txt
index 01e0ff35..19293009 100644
--- a/resources/pdf/names.txt
+++ b/resources/pdf/names.txt
@@ -247,6 +247,7 @@ Matrix
Matte
MaxLen
MediaBox
+Metadata
MissingWidth
ModDate
Movie
@@ -402,6 +403,7 @@ Widths
WinAnsiEncoding
Wipe
XHeight
+XML
XObject
XRef
XRefStm
diff --git a/source/pdf/pdf-write.c b/source/pdf/pdf-write.c
index a70addad..d78442a2 100644
--- a/source/pdf/pdf-write.c
+++ b/source/pdf/pdf-write.c
@@ -1822,6 +1822,14 @@ static int is_font_stream(fz_context *ctx, pdf_obj *obj)
return 0;
}
+static int is_xml_metadata(fz_context *ctx, pdf_obj *obj)
+{
+ if (pdf_name_eq(ctx, pdf_dict_get(ctx, obj, PDF_NAME_Type), PDF_NAME_Metadata))
+ if (pdf_name_eq(ctx, pdf_dict_get(ctx, obj, PDF_NAME_Subtype), PDF_NAME_XML))
+ return 1;
+ return 0;
+}
+
static void writeobject(fz_context *ctx, pdf_document *doc, pdf_write_state *opts, int num, int gen, int skip_xrefs)
{
pdf_xref_entry *entry;
@@ -1888,6 +1896,8 @@ static void writeobject(fz_context *ctx, pdf_document *doc, pdf_write_state *opt
do_deflate = 1, do_expand = 0;
if (opts->do_compress_fonts && is_font_stream(ctx, obj))
do_deflate = 1, do_expand = 0;
+ if (is_xml_metadata(ctx, obj))
+ do_deflate = 0, do_expand = 0;
if (do_expand)
expandstream(ctx, doc, opts, obj, num, gen, do_deflate);
else