Skip to content

Commit b04bfff

Browse files
committedOct 10, 2022
Fix ParentTree and root StructElem children
1 parent d275dac commit b04bfff

File tree

1 file changed

+15
-6
lines changed

1 file changed

+15
-6
lines changed
 

‎weasyprint/pdf/pdfua.py

+15-6
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,11 @@ def pdfua(pdf, metadata, document, page_streams):
3333
structure = {}
3434
document.build_element_structure(structure)
3535

36-
elements = []
36+
document_children = []
3737
content_mapping['Nums'] = pydyf.Array()
3838
links = []
3939
for page_number, page_stream in enumerate(page_streams):
40-
page_elements = []
40+
parents = [None] * len(page_stream.marked)
4141
for mcid, (key, box) in enumerate(page_stream.marked):
4242
# Build structure elements
4343
kids = [mcid]
@@ -78,31 +78,40 @@ def pdfua(pdf, metadata, document, page_streams):
7878
'P': child.reference,
7979
})
8080
pdf.add_object(real_child)
81+
for kid in kids:
82+
if isinstance(kid, int):
83+
parents[kid] = real_child.reference
8184
child['K'] = pydyf.Array([real_child.reference])
8285
structure_data['element'] = real_child
86+
else:
87+
for kid in kids:
88+
if isinstance(kid, int):
89+
parents[kid] = child.reference
8390
else:
8491
child = structure_data['element']
8592
child['K'].extend(kids)
93+
for kid in kids:
94+
if isinstance(kid, int):
95+
parents[kid] = child.reference
8696
kid = child.reference
8797
if key == 'Link':
8898
links.append((kid, box.link_annotation))
8999
if child_structure_data_element is not None:
90100
child_structure_data_element['P'] = kid
91101
if not new_element:
92102
break
93-
page_elements.append(kid)
94103
kids = [kid]
95104
child_structure_data_element = child
96105
if structure_data['parent'] is None:
97106
child['P'] = structure_document.reference
107+
document_children.append(child.reference)
98108
break
99109
else:
100110
etree_element = structure_data['parent']
101111
key = page_stream.get_marked_content_tag(etree_element.tag)
102112
content_mapping['Nums'].append(page_number)
103-
content_mapping['Nums'].append(pydyf.Array(page_elements))
104-
elements.extend(page_elements)
105-
structure_document['K'] = pydyf.Array(elements)
113+
content_mapping['Nums'].append(pydyf.Array(parents))
114+
structure_document['K'] = pydyf.Array(document_children)
106115
for i, (link, annotation) in enumerate(links, start=page_number + 1):
107116
content_mapping['Nums'].append(i)
108117
content_mapping['Nums'].append(link)

0 commit comments

Comments
 (0)
Please sign in to comment.