From 16b3a7abc4fe4033e550589a0af18fcd36dc2c8f Mon Sep 17 00:00:00 2001 From: Andreas Gal Date: Fri, 6 May 2011 16:18:13 -0700 Subject: [PATCH] more XRef parsing --- pdf.js | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/pdf.js b/pdf.js index e3e79896d..3506b0ca9 100644 --- a/pdf.js +++ b/pdf.js @@ -611,9 +611,36 @@ var Linearization = (function () { var XRef = (function () { function constructor(stream, startXRef, mainXRefEntriesOffset) { + this.readXRef(stream, startXRef); } constructor.prototype = { + readXRefTable: function(parser) { + this.ok = true; + return true; + }, + readXRefStream: function(parser) { + this.ok = true; + return true; + }, + readXRef: function(stream, startXRef) { + stream.pos = startXRef; + var parser = new Parser(new Lexer(stream), false); + var obj = parser.getObj(); + // parse an old-style xref table + if (obj.isCmd("xref")) + return this.readXRefTable(parser); + // parse an xref stream + if (obj.isInt()) { + if (!parser.getObj().isInt() || + !parser.getObj().isCmd("obj") || + !(obj = parser.getObj()).isStream()) { + return false; + } + return this.readXRefStream(obj.value); + } + return false; + } }; return constructor; @@ -691,8 +718,8 @@ var PDFDoc = (function () { // May not be a PDF file, continue anyway. }, - setup: function(arrayBuffer, ownerPassword, userPassword) { - this.checkHeader(arrayBuffer); + setup: function(ownerPassword, userPassword) { + this.checkHeader(); this.xref = new XRef(this.stream, this.startXRef, this.mainXRefEntriesOffset);