1
0
Fork 0
mirror of https://github.com/mozilla/pdf.js.git synced 2025-04-26 10:08:06 +02:00

Adding support for page rotation

This commit is contained in:
Brendan Dahl 2011-08-06 14:41:18 -07:00
parent ad02c82f6a
commit 4377eed920
5 changed files with 53 additions and 11 deletions

50
pdf.js
View file

@ -2995,7 +2995,7 @@ var Page = (function() {
inheritPageProp: function(key) {
var dict = this.pageDict;
var obj = dict.get(key);
while (!obj) {
while (typeof obj == 'undefined') {
dict = this.xref.fetchIfRef(dict.get('Parent'));
if (!dict)
break;
@ -3014,6 +3014,32 @@ var Page = (function() {
return shadow(this, 'mediaBox',
((IsArray(obj) && obj.length == 4) ? obj : null));
},
get width() {
var mediaBox = this.mediaBox;
var rotate = this.rotate;
var width;
if (rotate == 0 || rotate == 180) {
width = (mediaBox[2] - mediaBox[0]);
} else {
width = (mediaBox[3] - mediaBox[1]);
}
return shadow(this, 'width', width);
},
get height() {
var mediaBox = this.mediaBox;
var rotate = this.rotate;
var height;
if (rotate == 0 || rotate == 180) {
height = (mediaBox[3] - mediaBox[1]);
} else {
height = (mediaBox[2] - mediaBox[0]);
}
return shadow(this, 'height', height);
},
get rotate() {
var rotate = this.inheritPageProp("Rotate") || 0;
return shadow(this, 'rotate', rotate);
},
startRendering: function(canvasCtx, continuation, onerror) {
var self = this;
var stats = self.stats;
@ -3085,8 +3111,9 @@ var Page = (function() {
var mediaBox = xref.fetchIfRef(this.mediaBox);
assertWellFormed(IsDict(resources), 'invalid page resources');
gfx.beginDrawing({ x: mediaBox[0], y: mediaBox[1],
width: mediaBox[2] - mediaBox[0],
height: mediaBox[3] - mediaBox[1] });
width: this.width,
height: this.height,
rotate: this.rotate });
gfx.execute(this.code, xref, resources);
gfx.endDrawing();
}
@ -3994,8 +4021,21 @@ var CanvasGraphics = (function() {
beginDrawing: function(mediaBox) {
var cw = this.ctx.canvas.width, ch = this.ctx.canvas.height;
this.ctx.save();
this.ctx.scale(cw / mediaBox.width, -ch / mediaBox.height);
this.ctx.translate(0, -mediaBox.height);
switch (mediaBox.rotate) {
case 0:
this.ctx.transform(1, 0, 0, -1, 0, ch);
break;
case 90:
this.ctx.transform(0, 1, 1, 0, 0, 0);
break;
case 180:
this.ctx.transform(-1, 0, 0, 1, cw, 0);
break;
case 270:
this.ctx.transform(0, -1, -1, 0, cw, ch);
break;
}
this.ctx.scale(cw / mediaBox.width, ch / mediaBox.height);
},
compile: function(stream, xref, resources, fonts) {