MCPcopy
hub / github.com/pdfarranger/pdfarranger / rebuild_outlines

Function rebuild_outlines

pdfarranger/exporter_outlines.py:192–212  ·  view source on GitHub ↗

Rebuild outlines in pdf_output by remapping bookmarks from pdf_input.

(pdf_input, pdf_output, pages)

Source from the content-addressed store, hash-verified

190
191
192def rebuild_outlines(pdf_input, pdf_output, pages):
193 """Rebuild outlines in pdf_output by remapping bookmarks from pdf_input."""
194 remapper = OutlineRemapper(pdf_input, pdf_output, pages)
195 # preserve first-appearance order of source files, deduplicated
196 ordered_file_indices = list(dict.fromkeys(row.nfile - 1 for row in pages))
197 with pdf_output.open_outline() as new_outline:
198 for file_idx in ordered_file_indices:
199 source_pdf = pdf_input[file_idx]
200 if source_pdf is None or pikepdf.Name.Outlines not in source_pdf.Root:
201 continue
202 try:
203 with source_pdf.open_outline() as source_outline:
204 copier = OutlineCopier(remapper, file_idx)
205 for item in source_outline.root:
206 copier.copy_item(item, new_outline.root)
207 except pikepdf.PdfError as e:
208 warnings.warn(
209 f"Failed to copy bookmarks from document {file_idx + 1}: {e}"
210 )
211 if remapper.new_named_dests:
212 write_named_dests(pdf_output, remapper.new_named_dests)

Calls 4

copy_itemMethod · 0.95
OutlineRemapperClass · 0.85
OutlineCopierClass · 0.85
write_named_destsFunction · 0.85