From c79cb83d52eb9d9d8466a973519eb0baaa7c6e0a Mon Sep 17 00:00:00 2001 From: Chris Jones Date: Mon, 23 May 2011 21:22:56 +1200 Subject: [PATCH 1/2] reset current point on text state changes and remove redundant "cur" prefix --- pdf.js | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/pdf.js b/pdf.js index c3e110bd0..1755c7490 100644 --- a/pdf.js +++ b/pdf.js @@ -2032,8 +2032,8 @@ var CanvasExtraState = (function() { this.fontSize = 0.0; this.textMatrix = IDENTITY_MATRIX; // Current point (in user coordinates) - this.curX = 0.0; - this.curY = 0.0; + this.x = 0.0; + this.y = 0.0; // Start of text line (in text coordinates) this.lineX = 0.0; this.lineY = 0.0; @@ -2251,6 +2251,8 @@ var CanvasGraphics = (function() { // Text beginText: function() { this.current.textMatrix = IDENTITY_MATRIX; + this.current.x = this.current.lineX = 0; + this.current.y = this.current.lineY = 0; }, endText: function() { }, @@ -2262,23 +2264,30 @@ var CanvasGraphics = (function() { this.ctx.font = this.current.fontSize +'px '+ font.BaseFont; }, moveText: function (x, y) { - this.current.lineX += x; - this.current.lineY += y; - // TODO transform - this.current.curX = this.current.lineX; - this.current.curY = this.current.lineY; + this.current.x = this.current.lineX += x; + this.current.y = this.current.lineY += y; }, setTextMatrix: function(a, b, c, d, e, f) { this.current.textMatrix = [ a, b, c, d, e, f ]; + this.current.x = this.current.lineX = 0; + this.current.y = this.current.lineY = 0; }, showText: function(text) { + + + if (text == "Figur") { + console.log(" Tm: "+ this.current.textMatrix); + console.log(" cx/cy: "+ this.current.x +"/"+ this.current.y); + } + + this.ctx.save(); - this.ctx.translate(0, 2 * this.current.curY); + this.ctx.translate(0, 2 * this.current.y); this.ctx.scale(1, -1); this.ctx.transform.apply(this.ctx, this.current.textMatrix); - this.ctx.fillText(text, this.current.curX, this.current.curY); - this.current.curX += this.ctx.measureText(text).width; + this.ctx.fillText(text, this.current.x, this.current.y); + this.current.x += this.ctx.measureText(text).width; this.ctx.restore(); }, @@ -2286,7 +2295,7 @@ var CanvasGraphics = (function() { for (var i = 0; i < arr.length; ++i) { var e = arr[i]; if (IsNum(e)) { - this.current.curX -= e * 0.001 * this.current.fontSize; + this.current.x -= e * 0.001 * this.current.fontSize; } else if (IsString(e)) { this.showText(e); } else { From 53018c8e4c7c8f6672306ebe30cd90b8748b531e Mon Sep 17 00:00:00 2001 From: Chris Jones Date: Wed, 25 May 2011 21:09:06 +1200 Subject: [PATCH 2/2] fix next/prev/next bug, fiddle with UI, remove debugging code --- pdf.js | 13 +++---------- test.html | 30 ++++++++++++++++++++++++------ 2 files changed, 27 insertions(+), 16 deletions(-) diff --git a/pdf.js b/pdf.js index 1755c7490..0628cfe32 100644 --- a/pdf.js +++ b/pdf.js @@ -1777,7 +1777,7 @@ var XRef = (function() { if (e) { // The stream might be in use elsewhere, so clone it. if (IsStream(e)) - e = e.makeSubStream(0); + e = e.makeSubStream(e.start, e.length, e.dict); return e; } e = this.getEntry(num); @@ -2261,7 +2261,8 @@ var CanvasGraphics = (function() { if (!font) return; this.current.fontSize = size; - this.ctx.font = this.current.fontSize +'px '+ font.BaseFont; + TODO("using hard-coded font for testing"); + this.ctx.font = this.current.fontSize +'px "Nimbus Roman No9 L"'; }, moveText: function (x, y) { this.current.x = this.current.lineX += x; @@ -2273,14 +2274,6 @@ var CanvasGraphics = (function() { this.current.y = this.current.lineY = 0; }, showText: function(text) { - - - if (text == "Figur") { - console.log(" Tm: "+ this.current.textMatrix); - console.log(" cx/cy: "+ this.current.x +"/"+ this.current.y); - } - - this.ctx.save(); this.ctx.translate(0, 2 * this.current.y); this.ctx.scale(1, -1); diff --git a/test.html b/test.html index 9d5c0bf18..10a35e163 100644 --- a/test.html +++ b/test.html @@ -9,6 +9,19 @@ body { padding: 0px; background-color: #c0bdb7; } +#controls { + border-bottom: 1px solid black; + position:fixed; + left: 0px; top: 0px; + width: 100%; + padding: 7px; + background-color: rgb(242, 240, 238); +} +span#info { + float: right; + font: 14px sans-serif; + margin-right: 10px; +} #viewer { margin: auto; border: 1px solid black; @@ -26,10 +39,14 @@ function load() { canvas = document.getElementById("canvas"); canvas.mozOpaque = true; pageDisplay = document.getElementById("pageNumber"); - timeDisplay = document.getElementById("time"); + infoDisplay = document.getElementById("info"); + open("uncompressed.tracemonkey-pldi-09.pdf"); +} +function open(url) { + document.title = url; req = new XMLHttpRequest(); - req.open("GET", "uncompressed.tracemonkey-pldi-09.pdf"); + req.open("GET", url); req.mozResponseType = req.responseType = "arraybuffer"; req.expected = (document.URL.indexOf("file:") == 0) ? 0 : 200; req.onreadystatechange = xhrstate; @@ -68,7 +85,7 @@ function displayPage(num) { var t2 = Date.now(); - timeDisplay.innerHTML = (t1 - t0) + "/" + (t2 - t1) + " ms"; + infoDisplay.innerHTML = "Time to render: "+ (t1 - t0) + "/" + (t2 - t1) + " ms"; } function nextPage() { @@ -91,12 +108,13 @@ function gotoPage(num) { -
+
- Time to render: + value="1" size="4"> + +