From 6b5438f6d4a92c26baf7b52d054675728da66201 Mon Sep 17 00:00:00 2001 From: "Jorj X. McKie" Date: Wed, 5 Jun 2024 13:45:54 -0400 Subject: [PATCH] call init_doc after every metadata change --- src/utils.py | 7 +++++-- tests/test_metadata.py | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/utils.py b/src/utils.py index 466dd49a4..eb20445c6 100644 --- a/src/utils.py +++ b/src/utils.py @@ -1192,7 +1192,7 @@ def get_area(*args) -> float: return f * rect.width * rect.height -def set_metadata(doc: pymupdf.Document, m: dict) -> None: +def set_metadata(doc: pymupdf.Document, m: dict = None) -> None: """Update the PDF /Info object. Args: @@ -1202,7 +1202,9 @@ def set_metadata(doc: pymupdf.Document, m: dict) -> None: raise ValueError("is no PDF") if doc.is_closed or doc.is_encrypted: raise ValueError("document closed or encrypted") - if type(m) is not dict: + if m is None: + m = {} + elif type(m) is not dict: raise ValueError("bad metadata") keymap = { "author": "Author", @@ -1238,6 +1240,7 @@ def set_metadata(doc: pymupdf.Document, m: dict) -> None: doc.xref_set_key(-1, "Info", "%i 0 R" % info_xref) elif m == {}: # remove existing metadata doc.xref_set_key(-1, "Info", "null") + doc.init_doc() return for key, val in [(k, v) for k, v in m.items() if keymap[k] is not None]: diff --git a/tests/test_metadata.py b/tests/test_metadata.py index 63a440cc8..9a5ef8ca4 100644 --- a/tests/test_metadata.py +++ b/tests/test_metadata.py @@ -34,7 +34,7 @@ def test_3237(): metadata1 = doc.metadata metadata1 = repr(metadata1).encode('utf8') doc.set_metadata({}) - doc.init_doc() + metadata2 = doc.metadata metadata2 = repr(metadata2).encode('utf8') print(f'{metadata1=}')