From 5326f262e09c5759c5cd8f0e5e621bcfcb43fd19 Mon Sep 17 00:00:00 2001 From: notmasteryet Date: Mon, 29 Aug 2011 20:59:38 -0500 Subject: [PATCH] an-open-web document outline and bookmarks --- pdf.js | 12 ++++++++---- web/viewer.js | 3 ++- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/pdf.js b/pdf.js index 201744efe..bf0cf50c1 100644 --- a/pdf.js +++ b/pdf.js @@ -3541,6 +3541,11 @@ var Catalog = (function() { } }, get destinations() { + function fetchDestination(ref) { + var dest = xref.fetchIfRef(ref); + return IsDict(dest) ? dest.get('D') : dest; + } + var xref = this.xref; var dests = {}, nameTreeRef, nameDictionaryRef; var obj = this.catDict.get('Names'); @@ -3551,10 +3556,10 @@ var Catalog = (function() { if (nameDictionaryRef) { // reading simple destination dictionary - obj = xref.fetch(nameDictionaryRef); + obj = xref.fetchIfRef(nameDictionaryRef); obj.forEach(function(key, value) { if (!value) return; - dests[key] = xref.fetch(value).get('D'); + dests[key] = fetchDestination(value); }); } if (nameTreeRef) { @@ -3578,8 +3583,7 @@ var Catalog = (function() { } var names = obj.get('Names'); for (i = 0, n = names.length; i < n; i += 2) { - var dest = xref.fetch(names[i + 1]); - dests[names[i]] = IsDict(dest) ? dest.get('D') : dest; + dests[names[i]] = fetchDestination(names[i + 1]); } } } diff --git a/web/viewer.js b/web/viewer.js index 243afb7e5..b07408bc0 100644 --- a/web/viewer.js +++ b/web/viewer.js @@ -91,7 +91,8 @@ var PDFView = { return; // invalid destination // dest array looks like that: var destRef = dest[0]; - var pageNumber = this.pagesRefMap[destRef.num + ' ' + destRef.gen + ' R']; + var pageNumber = destRef instanceof Object ? + this.pagesRefMap[destRef.num + ' ' + destRef.gen + ' R'] : (destRef + 1); if (pageNumber) { this.page = pageNumber; // TODO scroll to specific region on the page, the precise scaling