From 0de0e92bc4fa1c09c19fdf4178e589a18ee46051 Mon Sep 17 00:00:00 2001 From: Saebekassebil Date: Thu, 22 Dec 2011 23:44:42 +0100 Subject: [PATCH] Added #getFingerprint method to PDFDocModel --- src/core.js | 17 ++++++++++++++++- web/viewer.js | 8 ++++---- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/core.js b/src/core.js index ac140dafe..664ecf33c 100644 --- a/src/core.js +++ b/src/core.js @@ -542,6 +542,21 @@ var PDFDocModel = (function PDFDocModelClosure() { // shadow the prototype getter return shadow(this, 'numPages', num); }, + getFingerprint: function pdfDocGetFingerprint() { + if(this.fileID) { + return this.fileID; + } else { + // If we got no fileID, then we generate one, from the first 100 bytes of PDF + var data = this.stream.bytes.subarray(0, 100); + var hash = calculateMD5(data, 0, data.length); + var strHash = ''; + for(var i = 0, length = hash.length; i < length; i++) { + strHash += Number(hash[i]).toString(16); + } + + return strHash; + } + }, getPage: function pdfDocGetPage(n) { return this.catalog.getPage(n); } @@ -568,7 +583,7 @@ var PDFDoc = (function PDFDocClosure() { this.data = data; this.stream = stream; this.pdf = new PDFDocModel(stream); - this.fileID = this.pdf.fileID; + this.fingerprint = this.pdf.getFingerprint(); this.catalog = this.pdf.catalog; this.objs = new PDFObjects(); diff --git a/web/viewer.js b/web/viewer.js index 5e8ec773f..d4afa8faa 100644 --- a/web/viewer.js +++ b/web/viewer.js @@ -347,7 +347,7 @@ var PDFView = { pagesRefMap[pageRef.num + ' ' + pageRef.gen + ' R'] = i; } - var id = pdf.fileID; + var id = pdf.fingerprint; if (id) { var scroll = Settings.get(id + '.scroll', -1); if (scroll != -1) { @@ -895,9 +895,9 @@ function updateViewarea() { window.addEventListener('scroll', function webViewerScroll(evt) { updateViewarea(); - var fileID; - if((fileID = PDFView.pages[0].content.pdf.fileID)) { - Settings.set(fileID+'.scroll', window.pageYOffset); + var id; + if((id = PDFView.pages[0].content.pdf.fingerprint)) { + Settings.set(id+'.scroll', window.pageYOffset); } }, true);