]> git.parisson.com Git - pdf.js.git/commitdiff
Now also fetch 'Document Info Dictionary', and expose 'raw' metadata attributes
authorSaebekassebil <saebekassebil@gmail.com>
Mon, 26 Mar 2012 21:48:04 +0000 (23:48 +0200)
committerSaebekassebil <saebekassebil@gmail.com>
Mon, 26 Mar 2012 21:48:04 +0000 (23:48 +0200)
src/core.js
src/metadata.js
web/viewer.js

index ecc2c94a5a8993869b15f3e562e2583ce2019d8a..890563f4e12b1efdd6444746b7c057586ac57d34 100644 (file)
@@ -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();
 
index 68b19764be8f7a9cc2673bf7fe4381fdcec83509..a46077f563900ed86c2fcb95198dd5bb65dedcb9 100644 (file)
@@ -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();
         }
       }
     },
index 68577ad3405af311b8770dd22d6e7d95b67d456a..838de20d30993823eddbb841ea099f9342148811 100644 (file)
@@ -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) {