fix reading linearized documents

This commit is contained in:
Andreas Gal 2011-05-06 22:44:01 -07:00
parent e655900785
commit d971dfa01b

18
pdf.js
View File

@ -417,7 +417,7 @@ var Lexer = (function() {
if (ch == '<') { if (ch == '<') {
// dict punctuation // dict punctuation
stream.getChar(); stream.getChar();
return new Cmd(ch); return new Cmd("<<");
} }
return this.getHexString(ch); return this.getHexString(ch);
// dict punctuation // dict punctuation
@ -425,7 +425,7 @@ var Lexer = (function() {
ch = stream.lookChar(); ch = stream.lookChar();
if (ch == '>') { if (ch == '>') {
stream.getChar(); stream.getChar();
return new Cmd(ch); return new Cmd(">>");
} }
// fall through // fall through
case ')': case ')':
@ -494,6 +494,7 @@ var Parser = (function() {
this.refill(); this.refill();
if (IsCmd(this.buf1, "[")) { // array if (IsCmd(this.buf1, "[")) { // array
this.shift();
var array = []; var array = [];
while (!IsCmd(this.buf1, "]") && !IsEOF(this.buf1)) while (!IsCmd(this.buf1, "]") && !IsEOF(this.buf1))
array.push(this.getObj()); array.push(this.getObj());
@ -509,7 +510,7 @@ var Parser = (function() {
error("Dictionary key must be a name object"); error("Dictionary key must be a name object");
shift(); shift();
} else { } else {
var key = buf1; var key = this.buf1.name;
this.shift(); this.shift();
if (IsEOF(this.buf1) || IsError(this.buf1)) if (IsEOF(this.buf1) || IsError(this.buf1))
break; break;
@ -570,7 +571,7 @@ var Linearization = (function () {
var obj3 = this.parser.getObj(); var obj3 = this.parser.getObj();
this.linDict = this.parser.getObj(); this.linDict = this.parser.getObj();
if (IsInt(obj1) && IsInt(obj2) && IsCmd(obj3, "obj") && IsDict(this.linDict)) { if (IsInt(obj1) && IsInt(obj2) && IsCmd(obj3, "obj") && IsDict(this.linDict)) {
var obj = this.linDict.lookup("Linearized"); var obj = this.linDict.get("Linearized");
if (!(IsNum(obj) && obj > 0)) if (!(IsNum(obj) && obj > 0))
this.linDict = null; this.linDict = null;
} }
@ -581,9 +582,9 @@ var Linearization = (function () {
var linDict = this.linDict; var linDict = this.linDict;
var obj; var obj;
if (IsDict(linDict) && if (IsDict(linDict) &&
IsInt(obj = linDict.lookup(name)) && IsInt(obj = linDict.get(name)) &&
obj > 0) { obj > 0) {
return length; return obj;
} }
error("'" + name + "' field in linearization table is invalid"); error("'" + name + "' field in linearization table is invalid");
return 0; return 0;
@ -592,7 +593,7 @@ var Linearization = (function () {
var linDict = this.linDict; var linDict = this.linDict;
var obj1, obj2; var obj1, obj2;
if (IsDict(linDict) && if (IsDict(linDict) &&
IsArray(obj1 = linDict.lookup("H")) && IsArray(obj1 = linDict.get("H")) &&
obj1.length >= 2 && obj1.length >= 2 &&
IsInt(obj2 = obj1[index]) && IsInt(obj2 = obj1[index]) &&
obj2 > 0) { obj2 > 0) {
@ -1282,7 +1283,8 @@ function runEchoTests() {
} }
function runParseTests() { function runParseTests() {
var data = snarf("simple_graphics.pdf", "binary"); //var data = snarf("simple_graphics.pdf", "binary");
var data = snarf("/tmp/pdf_reference_1-7.pdf", "binary");
var pdf = new PDFDoc(new Stream(data)); var pdf = new PDFDoc(new Stream(data));
} }