Skip to content

Commit 4c1ff3f

Browse files
src/__init__.py tests/: fix bug in Document.set_layer().
We need to use mupdf.pdf_array_push(), not mupdf.pdf_array_push_drop(). Addresses #3180.
1 parent 79053d6 commit 4c1ff3f

File tree

2 files changed

+66
-1
lines changed

2 files changed

+66
-1
lines changed

src/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17437,7 +17437,7 @@ def JM_set_ocg_arrays_imp(arr, list_):
1743717437
# Not found.
1743817438
continue
1743917439
obj = mupdf.pdf_new_indirect(pdf, xref, 0)
17440-
mupdf.pdf_array_push_drop(arr, obj)
17440+
mupdf.pdf_array_push(arr, obj)
1744117441

1744217442

1744317443
def JM_set_resource_property(ref, name, xref):

tests/test_optional_content.py

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,3 +72,68 @@ def test_3143():
7272
set1 = set([p["layer"] for p in page.get_drawings()])
7373
set2 = set([b[2] for b in page.get_bboxlog(layers=True)])
7474
assert set0 == set1 == set2
75+
76+
77+
def test_3180():
78+
doc = fitz.open()
79+
page = doc.new_page()
80+
81+
# Define the items for the combo box
82+
combo_items = ['first', 'second', 'third']
83+
84+
# Create a combo box field
85+
combo_box = fitz.Widget() # create a new widget
86+
combo_box.field_type = fitz.PDF_WIDGET_TYPE_COMBOBOX
87+
combo_box.field_name = "myComboBox"
88+
combo_box.field_value = combo_items[0]
89+
combo_box.choice_values = combo_items
90+
combo_box.rect = fitz.Rect(50, 50, 200, 75) # position of the combo box
91+
combo_box.script_change = """
92+
var value = event.value;
93+
app.alert('You selected: ' + value);
94+
95+
//var group_id = optional_content_group_ids[value];
96+
97+
"""
98+
99+
# Insert the combo box into the page
100+
# https://pymupdf.readthedocs.io/en/latest/page.html#Page.add_widget
101+
page.add_widget(combo_box)
102+
103+
# Create optional content groups
104+
# https://github.com/pymupdf/PyMuPDF-Utilities/blob/master/jupyter-notebooks/optional-content.ipynb
105+
106+
107+
# Load images and create OCGs for each
108+
optional_content_group_ids = {}
109+
for i, item in enumerate(combo_items):
110+
optional_content_group_id = doc.add_ocg(item, on=False)
111+
optional_content_group_ids[item] = optional_content_group_id
112+
rect = fitz.Rect(50, 100, 250, 300)
113+
image_file_name = f'{item}.png'
114+
# xref = page.insert_image(
115+
# rect,
116+
# filename=image_file_name,
117+
# oc=optional_content_group_id,
118+
# )
119+
120+
121+
first_id = optional_content_group_ids['first']
122+
second_id = optional_content_group_ids['second']
123+
third_id = optional_content_group_ids['third']
124+
125+
# https://pymupdf.readthedocs.io/en/latest/document.html#Document.set_layer
126+
127+
128+
doc.set_layer(-1, basestate="OFF")
129+
layers = doc.get_layer()
130+
doc.set_layer(config=-1, on=[first_id])
131+
132+
# https://pymupdf.readthedocs.io/en/latest/document.html#Document.set_layer_ui_config
133+
# configs = doc.layer_ui_configs()
134+
# doc.set_layer_ui_config(0, fitz.PDF_OC_ON)
135+
# doc.set_layer_ui_config('third', action=2)
136+
137+
# Save the PDF
138+
doc.save(os.path.abspath(f'{__file__}/../../tests/test_3180.pdf'))
139+
doc.close()

0 commit comments

Comments
 (0)