Skip to content

Commit 6c19fcd

Browse files
authored
ENH: Add Enforce from PDF2.0 in viewer_preferences (py-pdf#2511)
Closes py-pdf#2509 In order to use it: ``` # to set it: writer.viewer_preferences.enforce += writer.viewer_preferences.PRINT_SCALING # to clear it: writer.viewer_preferences.enforce = None ```
1 parent 4683874 commit 6c19fcd

File tree

2 files changed

+20
-0
lines changed

2 files changed

+20
-0
lines changed

pypdf/generic/_viewerpref.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,12 @@ def _get_arr(self, key: str, deft: Optional[List[Any]]) -> NumberObject:
5959
return self.get(key, None if deft is None else ArrayObject(deft))
6060

6161
def _set_arr(self, key: str, v: Optional[ArrayObject]) -> None:
62+
if v is None:
63+
try:
64+
del self[NameObject(key)]
65+
except KeyError:
66+
pass
67+
return
6268
if not isinstance(v, ArrayObject):
6369
raise ValueError("ArrayObject is expected")
6470
self[NameObject(key)] = v
@@ -69,6 +75,10 @@ def _get_int(self, key: str, deft: Optional[NumberObject]) -> NumberObject:
6975
def _set_int(self, key: str, v: int) -> None:
7076
self[NameObject(key)] = NumberObject(v)
7177

78+
@property
79+
def PRINT_SCALING(self) -> NameObject:
80+
return NameObject("/PrintScaling")
81+
7282
def __new__(cls: Any, value: Any = None) -> "ViewerPreferences":
7383
def _add_prop_bool(key: str, deft: Optional[BooleanObject]) -> property:
7484
return property(
@@ -140,6 +150,8 @@ def _add_prop_int(key: str, deft: Optional[int]) -> property:
140150
cls.print_pagerange = _add_prop_arr("/PrintPageRange", None)
141151
cls.num_copies = _add_prop_int("/NumCopies", None)
142152

153+
cls.enforce = _add_prop_arr("/Enforce", ArrayObject())
154+
143155
return DictionaryObject.__new__(cls)
144156

145157
def __init__(self, obj: Optional[DictionaryObject] = None) -> None:

tests/test_writer.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1807,6 +1807,14 @@ def test_viewerpreferences():
18071807
writer.viewer_preferences.direction = "/R2L"
18081808
assert len(writer.root_object["/ViewerPreferences"]) == 1
18091809

1810+
assert writer.viewer_preferences.enforce == []
1811+
assert "/Enforce" not in writer.viewer_preferences
1812+
writer.viewer_preferences.enforce += writer.viewer_preferences.PRINT_SCALING
1813+
assert writer.viewer_preferences["/Enforce"] == ["/PrintScaling"]
1814+
writer.viewer_preferences.enforce = None
1815+
assert "/Enforce" not in writer.viewer_preferences
1816+
writer.viewer_preferences.enforce = None
1817+
18101818
del reader.trailer["/Root"]["/ViewerPreferences"]
18111819
assert reader.viewer_preferences is None
18121820
writer = PdfWriter(clone_from=reader)

0 commit comments

Comments
 (0)