fix some bugs

This commit is contained in:
Chris Jones 2011-07-15 17:40:37 -07:00
parent bbc940724f
commit 6f3fff5798
2 changed files with 52 additions and 8 deletions

51
pdf.js
View File

@ -19,6 +19,7 @@ function warn(msg) {
} }
function error(msg) { function error(msg) {
console.log(backtrace());
throw new Error(msg); throw new Error(msg);
} }
@ -43,6 +44,16 @@ function assertWellFormed(cond, msg) {
malformed(msg); malformed(msg);
} }
function backtrace() {
var stackStr;
try {
throw new Error();
} catch(e) {
stackStr = e.stack;
};
return stackStr.split('\n').slice(1).join('\n');
}
function shadow(obj, prop, value) { function shadow(obj, prop, value) {
Object.defineProperty(obj, prop, { value: value, enumerable: true, configurable: true, writable: false }); Object.defineProperty(obj, prop, { value: value, enumerable: true, configurable: true, writable: false });
return value; return value;
@ -2838,6 +2849,13 @@ var XRef = (function() {
return this.fetch(obj); return this.fetch(obj);
}, },
fetch: function(ref) { fetch: function(ref) {
if ("undefined" == typeof ref) {
console.log(backtrace());
}
var num = ref.num; var num = ref.num;
var e = this.cache[num]; var e = this.cache[num];
if (e) if (e)
@ -2960,7 +2978,7 @@ var Page = (function() {
return shadow(this, 'mediaBox', return shadow(this, 'mediaBox',
((IsArray(obj) && obj.length == 4) ? obj : null)); ((IsArray(obj) && obj.length == 4) ? obj : null));
}, },
startRendering: function(canvasCtx, continuation) { startRendering: function(canvasCtx, continuation, onerror) {
var self = this; var self = this;
var stats = self.stats; var stats = self.stats;
stats.compile = stats.fonts = stats.render = 0; stats.compile = stats.fonts = stats.render = 0;
@ -2978,9 +2996,14 @@ var Page = (function() {
// Always defer call to display() to work around bug in // Always defer call to display() to work around bug in
// Firefox error reporting from XHR callbacks. // Firefox error reporting from XHR callbacks.
setTimeout(function () { setTimeout(function () {
var exc = null;
try {
self.display(gfx); self.display(gfx);
stats.render = Date.now(); stats.render = Date.now();
continuation(); } catch (e) {
exc = e.toString();
}
continuation(exc);
}); });
}); });
}, },
@ -3639,7 +3662,12 @@ var PartialEvaluator = (function() {
if (!df) if (!df)
return null; return null;
compositeFont = true; compositeFont = true;
descendant = xref.fetch(df[0]);
if (IsRef(df)) {
df = xref.fetch(df);
}
descendant = xref.fetch(IsRef(df) ? df : df[0]);
subType = descendant.get('Subtype'); subType = descendant.get('Subtype');
fd = descendant.get('FontDescriptor'); fd = descendant.get('FontDescriptor');
} else { } else {
@ -4765,6 +4793,15 @@ var ColorSpace = (function() {
}; };
constructor.parse = function colorspace_parse(cs, xref, res) { constructor.parse = function colorspace_parse(cs, xref, res) {
if ("undefined" == typeof(cs))
console.log(backtrace());
if (IsName(cs)) { if (IsName(cs)) {
var colorSpaces = res.get('ColorSpace'); var colorSpaces = res.get('ColorSpace');
if (colorSpaces) { if (colorSpaces) {
@ -4854,10 +4891,10 @@ var ColorSpace = (function() {
case 'Lab': case 'Lab':
case 'DeviceN': case 'DeviceN':
default: default:
error("unrecognized color space object '" + mode + "'"); error("unimplemented color space object '" + mode + "'");
} }
} else { } else {
error('unrecognized color space object'); error('unrecognized color space object: "'+ cs +"'");
} }
}; };
@ -5131,6 +5168,10 @@ var PDFImage = (function() {
this.bpc = bitsPerComponent; this.bpc = bitsPerComponent;
var colorSpace = dict.get('ColorSpace', 'CS'); var colorSpace = dict.get('ColorSpace', 'CS');
if (!colorSpace) {
TODO('JPX images (which don"t require color spaces');
colorSpace = new Name('DeviceRGB');
}
this.colorSpace = ColorSpace.parse(colorSpace, xref, res); this.colorSpace = ColorSpace.parse(colorSpace, xref, res);
this.numComps = this.colorSpace.numComps; this.numComps = this.colorSpace.numComps;

View File

@ -111,7 +111,10 @@ function nextPage(task, loadError) {
page.startRendering( page.startRendering(
ctx, ctx,
function() { snapshotCurrentPage(page, task, failure); }); function(e) {
snapshotCurrentPage(page, task,
(!failure && e) ? ('render: '+ e) : failure);
});
} catch(e) { } catch(e) {
failure = 'page setup: '+ e.toString(); failure = 'page setup: '+ e.toString();
} }