diff tests/test_object_manipulation.py @ 1:1d09e1dec1d9 upstream

ADD: PyMuPDF v1.26.4: the original sdist. It does not yet contain MuPDF. This normally will be downloaded when building PyMuPDF.
author Franz Glasner <fzglas.hg@dom66.de>
date Mon, 15 Sep 2025 11:37:51 +0200
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test_object_manipulation.py	Mon Sep 15 11:37:51 2025 +0200
@@ -0,0 +1,74 @@
+"""
+Check some low-level PDF object manipulations:
+1. Set page rotation and compare with string in object definition.
+2. Set page rotation via string manipulation and compare with result of
+   proper page property.
+3. Read the PDF trailer and verify it has the keys "/Root", "/ID", etc.
+"""
+import pymupdf
+import os
+
+scriptdir = os.path.abspath(os.path.dirname(__file__))
+resources = os.path.join(scriptdir, "resources")
+filename = os.path.join(resources, "001003ED.pdf")
+
+
+def test_rotation1():
+    doc = pymupdf.open()
+    page = doc.new_page()
+    page.set_rotation(270)
+    assert doc.xref_get_key(page.xref, "Rotate") == ("int", "270")
+
+
+def test_rotation2():
+    doc = pymupdf.open()
+    page = doc.new_page()
+    doc.xref_set_key(page.xref, "Rotate", "270")
+    assert page.rotation == 270
+
+
+def test_trailer():
+    """Access PDF trailer information."""
+    doc = pymupdf.open(filename)
+    xreflen = doc.xref_length()
+    _, xreflen_str = doc.xref_get_key(-1, "Size")
+    assert xreflen == int(xreflen_str)
+    trailer_keys = doc.xref_get_keys(-1)
+    assert "ID" in trailer_keys
+    assert "Root" in trailer_keys
+
+
+def test_valid_name():
+    """Verify correct PDF names in method xref_set_key."""
+    doc = pymupdf.open()
+    page = doc.new_page()
+
+    # testing name in "key": confirm correct spec is accepted
+    doc.xref_set_key(page.xref, "Rotate", "90")
+    assert page.rotation == 90
+
+    # check wrong spec is detected
+    error_generated = False
+    try:
+        # illegal char in name (white space)
+        doc.xref_set_key(page.xref, "my rotate", "90")
+    except ValueError as e:
+        assert str(e) == "bad 'key'"
+        error_generated = True
+    assert error_generated
+
+    # test name in "value": confirm correct spec is accepted
+    doc.xref_set_key(page.xref, "my_rotate/something", "90")
+    assert doc.xref_get_key(page.xref, "my_rotate/something") == ("int", "90")
+    doc.xref_set_key(page.xref, "my_rotate", "/90")
+    assert doc.xref_get_key(page.xref, "my_rotate") == ("name", "/90")
+
+    # check wrong spec is detected
+    error_generated = False
+    try:
+        # no slash inside name allowed
+        doc.xref_set_key(page.xref, "my_rotate", "/9/0")
+    except ValueError as e:
+        assert str(e) == "bad 'value'"
+        error_generated = True
+    assert error_generated