diff --git a/src/core.js b/src/core.js index ecc2c94a5..890563f4e 100644 --- a/src/core.js +++ b/src/core.js @@ -587,13 +587,15 @@ var PDFDocModel = (function PDFDocModelClosure() { this.mainXRefEntriesOffset); this.xref = xref; this.catalog = new Catalog(xref); - if (xref.trailer && xref.trailer.has('ID')) { - var fileID = ''; - var id = xref.fetchIfRef(xref.trailer.get('ID'))[0]; - id.split('').forEach(function(el) { - fileID += Number(el.charCodeAt(0)).toString(16); - }); - this.fileID = fileID; + if (xref.trailer) { + if (xref.trailer.has('ID')) { + var fileID = ''; + var id = xref.fetchIfRef(xref.trailer.get('ID'))[0]; + id.split('').forEach(function(el) { + fileID += Number(el.charCodeAt(0)).toString(16); + }); + this.fileID = fileID; + } } }, get numPages() { @@ -602,6 +604,11 @@ var PDFDocModel = (function PDFDocModelClosure() { // shadow the prototype getter return shadow(this, 'numPages', num); }, + getDocumentInfo: function pdfDocGetDocumentInfo() { + if (this.xref.trailer.has('Info')) { + return this.xref.fetch(this.xref.trailer.get('Info')); + } + }, getFingerprint: function pdfDocGetFingerprint() { if (this.fileID) { return this.fileID; @@ -645,6 +652,7 @@ var PDFDoc = (function PDFDocClosure() { this.stream = stream; this.pdfModel = new PDFDocModel(stream); this.fingerprint = this.pdfModel.getFingerprint(); + this.info = this.pdfModel.getDocumentInfo(); this.catalog = this.pdfModel.catalog; this.objs = new PDFObjects(); diff --git a/src/metadata.js b/src/metadata.js index 68b19764b..a46077f56 100644 --- a/src/metadata.js +++ b/src/metadata.js @@ -44,25 +44,7 @@ var Metadata = (function MetadataClosure() { for (ii = 0, iLength = entries.length; ii < iLength; ii++) { var entry = entries[ii]; var name = entry.nodeName.toLowerCase(); - var entryName = name.split(':'); - entryName = (entryName.length > 1) ? entryName[1] : entryName[0]; - switch (name) { - case 'pdf:moddate': - case 'xap:createdate': - case 'xap:metadatadate': - case 'xap:modifydate': - this.metadata[entryName] = new Date(entry.textContent.trim()); - break; - - default: - // For almost all entries we just add them to the metadata object - if (this.metadata[entryName]) { - this.metadata[name] = entry.textContent.trim(); - } else { - this.metadata[entryName] = entry.textContent.trim(); - } - break; - } + this.metadata[name] = entry.textContent.trim(); } } }, diff --git a/web/viewer.js b/web/viewer.js index 68577ad34..838de20d3 100644 --- a/web/viewer.js +++ b/web/viewer.js @@ -501,12 +501,23 @@ var PDFView = { } var metadata = pdf.catalog.metadata; + var info = pdf.info; + var pdfTitle; + if (metadata) { this.metadata = metadata = new Metadata(metadata); - if (metadata.has('title')) { - document.title = metadata.get('title'); + if (metadata.has('dc:title')) { + pdfTitle = metadata.get('dc:title'); } } + + if (info && info.has('Title') && !pdfTitle) { + pdfTitle = info.get('Title'); + } + + if (pdfTitle) { + document.title = pdfTitle; + } }, setHash: function pdfViewSetHash(hash) {