@@ -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