@@ -233,6 +233,9 @@ const RENDERING_CANCELLED_TIMEOUT = 100; // ms
233233 * The default value is {DOMFilterFactory}.
234234 * @property {boolean } [enableHWA] - Enables hardware acceleration for
235235 * rendering. The default value is `false`.
236+ * @property {Object } [pagesMapper] - The pages mapper that will be used to map
237+ * page ids and page numbers. It's used when the page order is changed or some
238+ * pages are removed, cloned, etc.
236239 */
237240
238241/**
@@ -342,6 +345,7 @@ function getDocument(src = {}) {
342345 : DOMFilterFactory ) ;
343346 const enableHWA = src . enableHWA === true ;
344347 const useWasm = src . useWasm !== false ;
348+ const pagesMapper = src . pagesMapper || new PagesMapper ( ) ;
345349
346350 // Parameters whose default values depend on other parameters.
347351 const length = rangeTransport ? rangeTransport . length : ( src . length ?? NaN ) ;
@@ -511,7 +515,8 @@ function getDocument(src = {}) {
511515 task ,
512516 networkStream ,
513517 transportParams ,
514- transportFactory
518+ transportFactory ,
519+ pagesMapper
515520 ) ;
516521 task . _transport = transport ;
517522 messageHandler . send ( "Ready" , null ) ;
@@ -761,6 +766,13 @@ class PDFDocumentProxy {
761766 }
762767 }
763768
769+ /**
770+ * @type {PagesMapper } The pages mapper instance.
771+ */
772+ get pagesMapper ( ) {
773+ return this . _transport . pagesMapper ;
774+ }
775+
764776 /**
765777 * @type {AnnotationStorage } Storage for annotation data in forms.
766778 */
@@ -1324,9 +1336,9 @@ class PDFDocumentProxy {
13241336class PDFPageProxy {
13251337 #pendingCleanup = false ;
13261338
1327- #pagesMapper = PagesMapper . instance ;
1339+ #pagesMapper = null ;
13281340
1329- constructor ( pageIndex , pageInfo , transport , pdfBug = false ) {
1341+ constructor ( pageIndex , pageInfo , transport , pagesMapper , pdfBug = false ) {
13301342 this . _pageIndex = pageIndex ;
13311343 this . _pageInfo = pageInfo ;
13321344 this . _transport = transport ;
@@ -1339,6 +1351,7 @@ class PDFPageProxy {
13391351 this . _intentStates = new Map ( ) ;
13401352 this . destroyed = false ;
13411353 this . recordedBBoxes = null ;
1354+ this . #pagesMapper = pagesMapper ;
13421355 }
13431356
13441357 /**
@@ -2402,9 +2415,14 @@ class WorkerTransport {
24022415
24032416 #passwordCapability = null ;
24042417
2405- #pagesMapper = PagesMapper . instance ;
2406-
2407- constructor ( messageHandler , loadingTask , networkStream , params , factory ) {
2418+ constructor (
2419+ messageHandler ,
2420+ loadingTask ,
2421+ networkStream ,
2422+ params ,
2423+ factory ,
2424+ pagesMapper
2425+ ) {
24082426 this . messageHandler = messageHandler ;
24092427 this . loadingTask = loadingTask ;
24102428 this . #networkStream = networkStream ;
@@ -2429,7 +2447,8 @@ class WorkerTransport {
24292447
24302448 this . setupMessageHandler ( ) ;
24312449
2432- this . #pagesMapper. addListener ( this . #updateCaches. bind ( this ) ) ;
2450+ this . pagesMapper = pagesMapper ;
2451+ this . pagesMapper . addListener ( this . #updateCaches. bind ( this ) ) ;
24332452
24342453 if ( typeof PDFJSDev === "undefined" || PDFJSDev . test ( "TESTING" ) ) {
24352454 // For testing purposes.
@@ -2458,8 +2477,8 @@ class WorkerTransport {
24582477 #updateCaches( ) {
24592478 const newPageCache = new Map ( ) ;
24602479 const newPromiseCache = new Map ( ) ;
2461- for ( let i = 0 , ii = this . # pagesMapper. pagesNumber ; i < ii ; i ++ ) {
2462- const prevPageIndex = this . # pagesMapper. getPrevPageNumber ( i + 1 ) - 1 ;
2480+ for ( let i = 0 , ii = this . pagesMapper . pagesNumber ; i < ii ; i ++ ) {
2481+ const prevPageIndex = this . pagesMapper . getPrevPageNumber ( i + 1 ) - 1 ;
24632482 const page = this . #pageCache. get ( prevPageIndex ) ;
24642483 if ( page ) {
24652484 newPageCache . set ( i , page ) ;
@@ -2730,7 +2749,7 @@ class WorkerTransport {
27302749 } ) ;
27312750
27322751 messageHandler . on ( "GetDoc" , ( { pdfInfo } ) => {
2733- this . # pagesMapper. pagesNumber = pdfInfo . numPages ;
2752+ this . pagesMapper . pagesNumber = pdfInfo . numPages ;
27342753 this . _numPages = pdfInfo . numPages ;
27352754 this . _htmlForXfa = pdfInfo . htmlForXfa ;
27362755 delete pdfInfo . htmlForXfa ;
@@ -2947,12 +2966,12 @@ class WorkerTransport {
29472966 if (
29482967 ! Number . isInteger ( pageNumber ) ||
29492968 pageNumber <= 0 ||
2950- pageNumber > this . # pagesMapper. pagesNumber
2969+ pageNumber > this . pagesMapper . pagesNumber
29512970 ) {
29522971 return Promise . reject ( new Error ( "Invalid page request." ) ) ;
29532972 }
29542973 const pageIndex = pageNumber - 1 ;
2955- const newPageIndex = this . # pagesMapper. getPageId ( pageNumber ) - 1 ;
2974+ const newPageIndex = this . pagesMapper . getPageId ( pageNumber ) - 1 ;
29562975
29572976 const cachedPromise = this . #pagePromises. get ( pageIndex ) ;
29582977 if ( cachedPromise ) {
@@ -2974,6 +2993,7 @@ class WorkerTransport {
29742993 pageIndex ,
29752994 pageInfo ,
29762995 this ,
2996+ this . pagesMapper ,
29772997 this . _params . pdfBug
29782998 ) ;
29792999 this . #pageCache. set ( pageIndex , page ) ;
@@ -2991,12 +3011,12 @@ class WorkerTransport {
29913011 num : ref . num ,
29923012 gen : ref . gen ,
29933013 } ) ;
2994- return this . # pagesMapper. getPageNumber ( index + 1 ) - 1 ;
3014+ return this . pagesMapper . getPageNumber ( index + 1 ) - 1 ;
29953015 }
29963016
29973017 getAnnotations ( pageIndex , intent ) {
29983018 return this . messageHandler . sendWithPromise ( "GetAnnotations" , {
2999- pageIndex : this . # pagesMapper. getPageId ( pageIndex + 1 ) - 1 ,
3019+ pageIndex : this . pagesMapper . getPageId ( pageIndex + 1 ) - 1 ,
30003020 intent,
30013021 } ) ;
30023022 }
@@ -3063,13 +3083,13 @@ class WorkerTransport {
30633083
30643084 getPageJSActions ( pageIndex ) {
30653085 return this . messageHandler . sendWithPromise ( "GetPageJSActions" , {
3066- pageIndex : this . # pagesMapper. getPageId ( pageIndex + 1 ) - 1 ,
3086+ pageIndex : this . pagesMapper . getPageId ( pageIndex + 1 ) - 1 ,
30673087 } ) ;
30683088 }
30693089
30703090 getStructTree ( pageIndex ) {
30713091 return this . messageHandler . sendWithPromise ( "GetStructTree" , {
3072- pageIndex : this . # pagesMapper. getPageId ( pageIndex + 1 ) - 1 ,
3092+ pageIndex : this . pagesMapper . getPageId ( pageIndex + 1 ) - 1 ,
30733093 } ) ;
30743094 }
30753095
@@ -3141,7 +3161,7 @@ class WorkerTransport {
31413161 const refStr = ref . gen === 0 ? `${ ref . num } R` : `${ ref . num } R${ ref . gen } ` ;
31423162 const pageIndex = this . #pageRefCache. get ( refStr ) ;
31433163 return pageIndex >= 0
3144- ? this . # pagesMapper. getPageNumber ( pageIndex + 1 )
3164+ ? this . pagesMapper . getPageNumber ( pageIndex + 1 )
31453165 : null ;
31463166 }
31473167}
0 commit comments