Now also fetch 'Document Info Dictionary', and expose 'raw' metadata attributes

This commit is contained in:
Saebekassebil 2012-03-26 23:48:04 +02:00
parent ab198e89cc
commit edc1694620
3 changed files with 29 additions and 28 deletions

View 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();

View 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();
}
}
},

View 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) {