| 
66 | 66 |     ArrayObject,  | 
67 | 67 |     ContentStream,  | 
68 | 68 |     DecodedStreamObject,  | 
 | 69 | +    Destination,  | 
69 | 70 |     DictionaryObject,  | 
70 | 71 |     EncodedStreamObject,  | 
71 | 72 |     IndirectObject,  | 
 | 
75 | 76 |     PdfObject,  | 
76 | 77 |     StreamObject,  | 
77 | 78 |     TextStringObject,  | 
 | 79 | +    TreeObject,  | 
78 | 80 |     is_null_or_none,  | 
79 | 81 |     read_object,  | 
80 | 82 | )  | 
@@ -138,6 +140,9 @@ def __init__(  | 
138 | 140 |         elif password is not None:  | 
139 | 141 |             raise PdfReadError("Not an encrypted file")  | 
140 | 142 | 
 
  | 
 | 143 | +        # cache so we don't have to parse this over and over  | 
 | 144 | +        self._named_destinations: Optional[dict[str, Destination]] = None  | 
 | 145 | + | 
141 | 146 |     def _initialize_stream(self, stream: Union[StrByteType, Path]) -> None:  | 
142 | 147 |         if hasattr(stream, "mode") and "b" not in stream.mode:  | 
143 | 148 |             logger_warning(  | 
@@ -1274,3 +1279,18 @@ def _repr_mimebundle_(  | 
1274 | 1279 |             data = {k: v for k, v in data.items() if k not in exclude}  | 
1275 | 1280 | 
 
  | 
1276 | 1281 |         return data  | 
 | 1282 | + | 
 | 1283 | +    def _get_named_destinations(  | 
 | 1284 | +        self,  | 
 | 1285 | +        tree: Union[TreeObject, None] = None,  | 
 | 1286 | +        retval: Optional[dict[str, Destination]] = None,  | 
 | 1287 | +    ) -> dict[str, Destination]:  | 
 | 1288 | +        """Override from PdfDocCommon. In the reader we can assume this is  | 
 | 1289 | +        static, but not in the writer.  | 
 | 1290 | +        """  | 
 | 1291 | +        if tree or retval:  | 
 | 1292 | +            return PdfDocCommon._get_named_destinations(self, tree, retval)  | 
 | 1293 | + | 
 | 1294 | +        if self._named_destinations is None:  | 
 | 1295 | +            self._named_destinations = PdfDocCommon._get_named_destinations(self)  | 
 | 1296 | +        return self._named_destinations  | 
0 commit comments