Merge branch 'master' of github.com:andreasgal/pdf.js
This commit is contained in:
commit
f16e6b8d1c
131
pdf.js
131
pdf.js
@ -1574,6 +1574,8 @@ var Interpreter = (function() {
|
|||||||
this.map = {
|
this.map = {
|
||||||
// Graphics state
|
// Graphics state
|
||||||
w: gfx.setLineWidth,
|
w: gfx.setLineWidth,
|
||||||
|
J: gfx.setLineCap,
|
||||||
|
j: gfx.setLineJoin,
|
||||||
d: gfx.setDash,
|
d: gfx.setDash,
|
||||||
q: gfx.save,
|
q: gfx.save,
|
||||||
Q: gfx.restore,
|
Q: gfx.restore,
|
||||||
@ -1601,6 +1603,7 @@ var Interpreter = (function() {
|
|||||||
},
|
},
|
||||||
Td: gfx.moveText,
|
Td: gfx.moveText,
|
||||||
Tj: gfx.showText,
|
Tj: gfx.showText,
|
||||||
|
TJ: gfx.showSpacedText,
|
||||||
|
|
||||||
// Type3 fonts
|
// Type3 fonts
|
||||||
|
|
||||||
@ -1678,6 +1681,12 @@ var EchoGraphics = (function() {
|
|||||||
setLineWidth: function(width) {
|
setLineWidth: function(width) {
|
||||||
this.printdentln(width +" w");
|
this.printdentln(width +" w");
|
||||||
},
|
},
|
||||||
|
setLineCap: function(style) {
|
||||||
|
this.printdentln(style +" J");
|
||||||
|
},
|
||||||
|
setLineJoin: function(style) {
|
||||||
|
this.printdentln(style +" j");
|
||||||
|
},
|
||||||
setDash: function(dashArray, dashPhase) {
|
setDash: function(dashArray, dashPhase) {
|
||||||
this.printdentln(""+ dashArray +" "+ dashPhase +" d");
|
this.printdentln(""+ dashArray +" "+ dashPhase +" d");
|
||||||
},
|
},
|
||||||
@ -1743,6 +1752,9 @@ var EchoGraphics = (function() {
|
|||||||
showText: function(text) {
|
showText: function(text) {
|
||||||
this.printdentln("( "+ text +" ) Tj");
|
this.printdentln("( "+ text +" ) Tj");
|
||||||
},
|
},
|
||||||
|
showSpacedText: function(arr) {
|
||||||
|
this.printdentln(""+ arr +" TJ");
|
||||||
|
},
|
||||||
|
|
||||||
// Type3 fonts
|
// Type3 fonts
|
||||||
|
|
||||||
@ -1792,7 +1804,11 @@ var EchoGraphics = (function() {
|
|||||||
// However, PDF needs a bit more state, which we store here.
|
// However, PDF needs a bit more state, which we store here.
|
||||||
var CanvasExtraState = (function() {
|
var CanvasExtraState = (function() {
|
||||||
function constructor() {
|
function constructor() {
|
||||||
// Current text position (in text coordinates)
|
this.fontSize = 0.0;
|
||||||
|
// Current point (in user coordinates)
|
||||||
|
this.curX = 0.0;
|
||||||
|
this.curY = 0.0;
|
||||||
|
// Start of text line (in text coordinates)
|
||||||
this.lineX = 0.0;
|
this.lineX = 0.0;
|
||||||
this.lineY = 0.0;
|
this.lineY = 0.0;
|
||||||
}
|
}
|
||||||
@ -1808,6 +1824,9 @@ var CanvasGraphics = (function() {
|
|||||||
this.stateStack = [ ];
|
this.stateStack = [ ];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var LINE_CAP_STYLES = [ "butt", "round", "square" ];
|
||||||
|
var LINE_JOIN_STYLES = [ "miter", "round", "bevel" ];
|
||||||
|
|
||||||
constructor.prototype = {
|
constructor.prototype = {
|
||||||
beginDrawing: function(mediaBox) {
|
beginDrawing: function(mediaBox) {
|
||||||
var cw = this.ctx.canvas.width, ch = this.ctx.canvas.height;
|
var cw = this.ctx.canvas.width, ch = this.ctx.canvas.height;
|
||||||
@ -1823,6 +1842,12 @@ var CanvasGraphics = (function() {
|
|||||||
setLineWidth: function(width) {
|
setLineWidth: function(width) {
|
||||||
this.ctx.lineWidth = width;
|
this.ctx.lineWidth = width;
|
||||||
},
|
},
|
||||||
|
setLineCap: function(style) {
|
||||||
|
this.ctx.lineCap = LINE_CAP_STYLES[style];
|
||||||
|
},
|
||||||
|
setLineJoin: function(style) {
|
||||||
|
this.ctx.lineJoin = LINE_JOIN_STYLES[style];
|
||||||
|
},
|
||||||
setDash: function(dashArray, dashPhase) {
|
setDash: function(dashArray, dashPhase) {
|
||||||
// TODO
|
// TODO
|
||||||
},
|
},
|
||||||
@ -1882,21 +1907,38 @@ var CanvasGraphics = (function() {
|
|||||||
// TODO
|
// TODO
|
||||||
},
|
},
|
||||||
setFont: function(font, size) {
|
setFont: function(font, size) {
|
||||||
this.ctx.font = size +'px '+ font.BaseFont;
|
this.current.fontSize = size;
|
||||||
|
this.ctx.font = this.current.fontSize +'px '+ font.BaseFont;
|
||||||
},
|
},
|
||||||
moveText: function (x, y) {
|
moveText: function (x, y) {
|
||||||
this.current.lineX = x;
|
this.current.lineX += x;
|
||||||
this.current.lineY = y;
|
this.current.lineY += y;
|
||||||
|
// XXX transform
|
||||||
|
this.current.curX = this.current.lineX;
|
||||||
|
this.current.curY = this.current.lineY;
|
||||||
},
|
},
|
||||||
showText: function(text) {
|
showText: function(text) {
|
||||||
this.ctx.save();
|
this.ctx.save();
|
||||||
this.ctx.translate(0, 2 * this.current.lineY);
|
this.ctx.translate(0, 2 * this.current.curY);
|
||||||
this.ctx.scale(1, -1);
|
this.ctx.scale(1, -1);
|
||||||
|
|
||||||
this.ctx.fillText(text, this.current.lineX, this.current.lineY);
|
this.ctx.fillText(text, this.current.curX, this.current.curY);
|
||||||
|
this.current.curX += this.ctx.measureText(text).width;
|
||||||
|
|
||||||
this.ctx.restore();
|
this.ctx.restore();
|
||||||
},
|
},
|
||||||
|
showSpacedText: function(arr) {
|
||||||
|
for (var i = 0; i < arr.length; ++i) {
|
||||||
|
var e = arr[i];
|
||||||
|
if (IsNum(e)) {
|
||||||
|
this.current.curX -= e * 0.001 * this.current.fontSize;
|
||||||
|
} else if (IsString(e)) {
|
||||||
|
this.showText(e);
|
||||||
|
} else {
|
||||||
|
this.error("Unexpected element in TJ array");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
// Type3 fonts
|
// Type3 fonts
|
||||||
|
|
||||||
@ -2034,6 +2076,83 @@ var tests = [
|
|||||||
eof()
|
eof()
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{ name: "TJ",
|
||||||
|
res: {
|
||||||
|
// XXX not structured correctly
|
||||||
|
Font: {
|
||||||
|
F1: { Type: "Font",
|
||||||
|
Subtype: "Type1",
|
||||||
|
Name: "F1",
|
||||||
|
BaseFont: "Georgia",
|
||||||
|
Encoding: "MacRomanEncoding"
|
||||||
|
},
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mediaBox: [ 0, 0, 612, 792 ],
|
||||||
|
objs: [
|
||||||
|
cmd("BT"),
|
||||||
|
name("F1"), real(17.9328), cmd("Tf"),
|
||||||
|
|
||||||
|
real(80.5159), real(700.6706), cmd("Td"),
|
||||||
|
[ string("Trace-based Just-in-Time") ], cmd("TJ"),
|
||||||
|
|
||||||
|
int(0), int(-18), cmd("Td"),
|
||||||
|
[ string("T"), int(74), string("race-based"), int(-250), string("J"), int(15), string("ust-in-T"), int(18), string("ime") ], cmd("TJ"),
|
||||||
|
cmd("ET"),
|
||||||
|
eof()
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{ name: "Line cap",
|
||||||
|
res: { },
|
||||||
|
mediaBox: [ 0, 0, 612, 792 ],
|
||||||
|
objs: [
|
||||||
|
int(5), cmd("w"),
|
||||||
|
|
||||||
|
int(0), cmd("J"), // butt cap
|
||||||
|
int(100), int(692), cmd("m"),
|
||||||
|
int(200), int(692), cmd("l"),
|
||||||
|
cmd("S"),
|
||||||
|
|
||||||
|
int(1), cmd("J"), // round cap
|
||||||
|
int(100), int(686), cmd("m"),
|
||||||
|
int(200), int(686), cmd("l"),
|
||||||
|
cmd("S"),
|
||||||
|
|
||||||
|
int(2), cmd("J"), // projecting square cap
|
||||||
|
int(100), int(680), cmd("m"),
|
||||||
|
int(200), int(680), cmd("l"),
|
||||||
|
cmd("S"),
|
||||||
|
|
||||||
|
eof()
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{ name: "Line join",
|
||||||
|
res: { },
|
||||||
|
mediaBox: [ 0, 0, 612, 792 ],
|
||||||
|
objs: [
|
||||||
|
int(20), cmd("w"),
|
||||||
|
|
||||||
|
int(0), cmd("j"), // miter join
|
||||||
|
int(100), int(692), cmd("m"),
|
||||||
|
int(150), int(642), cmd("l"),
|
||||||
|
int(200), int(692), cmd("l"),
|
||||||
|
cmd("S"),
|
||||||
|
|
||||||
|
int(1), cmd("j"), // round join
|
||||||
|
int(250), int(692), cmd("m"),
|
||||||
|
int(300), int(642), cmd("l"),
|
||||||
|
int(350), int(692), cmd("l"),
|
||||||
|
cmd("S"),
|
||||||
|
|
||||||
|
int(2), cmd("j"), // bevel join
|
||||||
|
int(400), int(692), cmd("m"),
|
||||||
|
int(450), int(642), cmd("l"),
|
||||||
|
int(500), int(692), cmd("l"),
|
||||||
|
cmd("S"),
|
||||||
|
|
||||||
|
eof()
|
||||||
|
],
|
||||||
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user