|
|
|
@ -22,8 +22,8 @@ if (typeof PDFJS === 'undefined') {
@@ -22,8 +22,8 @@ if (typeof PDFJS === 'undefined') {
|
|
|
|
|
(typeof window !== 'undefined' ? window : this).PDFJS = {}; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
PDFJS.version = '1.0.884'; |
|
|
|
|
PDFJS.build = 'fb6d87c'; |
|
|
|
|
PDFJS.version = '1.0.887'; |
|
|
|
|
PDFJS.build = '878fad4'; |
|
|
|
|
|
|
|
|
|
(function pdfjsWrapper() { |
|
|
|
|
// Use strict in our context only - users might not want it
|
|
|
|
@ -1880,10 +1880,20 @@ var PDFDocumentProxy = (function PDFDocumentProxyClosure() {
@@ -1880,10 +1880,20 @@ var PDFDocumentProxy = (function PDFDocumentProxyClosure() {
|
|
|
|
|
/** |
|
|
|
|
* @return {Promise} A promise that is resolved with a lookup table for |
|
|
|
|
* mapping named destinations to reference numbers. |
|
|
|
|
* |
|
|
|
|
* This can be slow for large documents: use getDestination instead |
|
|
|
|
*/ |
|
|
|
|
getDestinations: function PDFDocumentProxy_getDestinations() { |
|
|
|
|
return this.transport.getDestinations(); |
|
|
|
|
}, |
|
|
|
|
/** |
|
|
|
|
* @param {string} id The named destination to get. |
|
|
|
|
* @return {Promise} A promise that is resolved with all information |
|
|
|
|
* of the given named destination. |
|
|
|
|
*/ |
|
|
|
|
getDestination: function PDFDocumentProxy_getDestination(id) { |
|
|
|
|
return this.transport.getDestination(id); |
|
|
|
|
}, |
|
|
|
|
/** |
|
|
|
|
* @return {Promise} A promise that is resolved with a lookup table for |
|
|
|
|
* mapping named attachments to their content. |
|
|
|
@ -2661,6 +2671,10 @@ var WorkerTransport = (function WorkerTransportClosure() {
@@ -2661,6 +2671,10 @@ var WorkerTransport = (function WorkerTransportClosure() {
|
|
|
|
|
return this.messageHandler.sendWithPromise('GetDestinations', null); |
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
getDestination: function WorkerTransport_getDestination(id) { |
|
|
|
|
return this.messageHandler.sendWithPromise('GetDestination', { id: id } ); |
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
getAttachments: function WorkerTransport_getAttachments() { |
|
|
|
|
return this.messageHandler.sendWithPromise('GetAttachments', null); |
|
|
|
|
}, |
|
|
|
@ -9628,6 +9642,38 @@ var Catalog = (function CatalogClosure() {
@@ -9628,6 +9642,38 @@ var Catalog = (function CatalogClosure() {
|
|
|
|
|
} |
|
|
|
|
return shadow(this, 'destinations', dests); |
|
|
|
|
}, |
|
|
|
|
getDestination: function Catalog_getDestination(destinationId) { |
|
|
|
|
function fetchDestination(dest) { |
|
|
|
|
return isDict(dest) ? dest.get('D') : dest; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
var xref = this.xref; |
|
|
|
|
var dest, nameTreeRef, nameDictionaryRef; |
|
|
|
|
var obj = this.catDict.get('Names'); |
|
|
|
|
if (obj && obj.has('Dests')) { |
|
|
|
|
nameTreeRef = obj.getRaw('Dests'); |
|
|
|
|
} else if (this.catDict.has('Dests')) { |
|
|
|
|
nameDictionaryRef = this.catDict.get('Dests'); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (nameDictionaryRef) { |
|
|
|
|
// reading simple destination dictionary
|
|
|
|
|
obj = nameDictionaryRef; |
|
|
|
|
obj.forEach(function catalogForEach(key, value) { |
|
|
|
|
if (!value) { |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
if (key === destinationId) { |
|
|
|
|
dest = fetchDestination(value); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
if (nameTreeRef) { |
|
|
|
|
var nameTree = new NameTree(nameTreeRef, xref); |
|
|
|
|
dest = fetchDestination(nameTree.get(destinationId)); |
|
|
|
|
} |
|
|
|
|
return dest; |
|
|
|
|
}, |
|
|
|
|
get attachments() { |
|
|
|
|
var xref = this.xref; |
|
|
|
|
var attachments = null, nameTreeRef; |
|
|
|
@ -10529,6 +10575,76 @@ var NameTree = (function NameTreeClosure() {
@@ -10529,6 +10575,76 @@ var NameTree = (function NameTreeClosure() {
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return dict; |
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
get: function NameTree_get(destinationId) { |
|
|
|
|
if (!this.root) { |
|
|
|
|
return null; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
var xref = this.xref; |
|
|
|
|
var kidsOrNames = xref.fetchIfRef(this.root); |
|
|
|
|
var loopCount = 0; |
|
|
|
|
var MAX_NAMES_LEVELS = 10; |
|
|
|
|
var l, r, m; |
|
|
|
|
|
|
|
|
|
// Perform a binary search to quickly find the entry that
|
|
|
|
|
// contains the named destination we are looking for.
|
|
|
|
|
while (kidsOrNames.has('Kids')) { |
|
|
|
|
loopCount++; |
|
|
|
|
if (loopCount > MAX_NAMES_LEVELS) { |
|
|
|
|
warn('Search depth limit for named destionations has been reached.'); |
|
|
|
|
return null; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
var kids = kidsOrNames.get('Kids'); |
|
|
|
|
if (!isArray(kids)) { |
|
|
|
|
return null; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
l = 0; |
|
|
|
|
r = kids.length - 1; |
|
|
|
|
while (l <= r) { |
|
|
|
|
m = (l + r) >> 1; |
|
|
|
|
var kid = xref.fetchIfRef(kids[m]); |
|
|
|
|
var limits = kid.get('Limits'); |
|
|
|
|
|
|
|
|
|
if (destinationId < limits[0]) { |
|
|
|
|
r = m - 1; |
|
|
|
|
} else if (destinationId > limits[1]) { |
|
|
|
|
l = m + 1; |
|
|
|
|
} else { |
|
|
|
|
kidsOrNames = xref.fetchIfRef(kids[m]); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (l > r) { |
|
|
|
|
return null; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// If we get here, then we have found the right entry. Now
|
|
|
|
|
// go through the named destinations in the Named dictionary
|
|
|
|
|
// until we find the exact destination we're looking for.
|
|
|
|
|
var names = kidsOrNames.get('Names'); |
|
|
|
|
if (isArray(names)) { |
|
|
|
|
// Perform a binary search to reduce the lookup time.
|
|
|
|
|
l = 0; |
|
|
|
|
r = names.length - 2; |
|
|
|
|
while (l <= r) { |
|
|
|
|
// Check only even indices (0, 2, 4, ...) because the
|
|
|
|
|
// odd indices contain the actual D array.
|
|
|
|
|
m = (l + r) & ~1; |
|
|
|
|
if (destinationId < names[m]) { |
|
|
|
|
r = m - 2; |
|
|
|
|
} else if (destinationId > names[m]) { |
|
|
|
|
l = m + 2; |
|
|
|
|
} else { |
|
|
|
|
return xref.fetchIfRef(names[m + 1]); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return null; |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
return NameTree; |
|
|
|
@ -39758,6 +39874,12 @@ var WorkerMessageHandler = PDFJS.WorkerMessageHandler = {
@@ -39758,6 +39874,12 @@ var WorkerMessageHandler = PDFJS.WorkerMessageHandler = {
|
|
|
|
|
} |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
handler.on('GetDestination', |
|
|
|
|
function wphSetupGetDestination(data) { |
|
|
|
|
return pdfManager.ensureCatalog('getDestination', [ data.id ]); |
|
|
|
|
} |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
handler.on('GetAttachments', |
|
|
|
|
function wphSetupGetAttachments(data) { |
|
|
|
|
return pdfManager.ensureCatalog('attachments'); |
|
|
|
|