Respect media box
This commit is contained in:
		
							parent
							
								
									68f1ca51ce
								
							
						
					
					
						commit
						7827e91566
					
				
							
								
								
									
										32
									
								
								pdf.js
									
									
									
									
									
								
							
							
						
						
									
										32
									
								
								pdf.js
									
									
									
									
									
								
							@ -760,8 +760,10 @@ var Interpreter = (function() {
 | 
			
		||||
        interpret: function(obj) {
 | 
			
		||||
            return this.interpretHelper(new Parser(new Lexer(obj), true));
 | 
			
		||||
        },
 | 
			
		||||
        interpretHelper: function(parser) {
 | 
			
		||||
            this.gfx.beginDrawing();
 | 
			
		||||
        interpretHelper: function(mediaBox, parser) {
 | 
			
		||||
            this.gfx.beginDrawing({ x: mediaBox[0], y: mediaBox[1],
 | 
			
		||||
                                    width: mediaBox[2] - mediaBox[0],
 | 
			
		||||
                                    height: mediaBox[3] - mediaBox[1] });
 | 
			
		||||
 | 
			
		||||
            var args = [ ];
 | 
			
		||||
            var obj;
 | 
			
		||||
@ -810,9 +812,12 @@ var EchoGraphics = (function() {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    constructor.prototype = {
 | 
			
		||||
        beginDrawing: function () {
 | 
			
		||||
        beginDrawing: function(mediaBox) {
 | 
			
		||||
            this.printdentln("/MediaBox ["+
 | 
			
		||||
                             mediaBox.x +" "+ mediaBox.y +" "+
 | 
			
		||||
                             mediaBox.width +" "+ mediaBox.height +" ]");
 | 
			
		||||
        },
 | 
			
		||||
        endDrawing: function () {
 | 
			
		||||
        endDrawing: function() {
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        // Graphics state
 | 
			
		||||
@ -950,10 +955,11 @@ var CanvasGraphics = (function() {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    constructor.prototype = {
 | 
			
		||||
        beginDrawing: function () {
 | 
			
		||||
        beginDrawing: function(mediaBox) {
 | 
			
		||||
            var cw = this.ctx.canvas.width, ch = this.ctx.canvas.height;
 | 
			
		||||
            this.ctx.save();
 | 
			
		||||
            this.ctx.scale(1, -1);
 | 
			
		||||
            this.ctx.translate(0, -this.ctx.canvas.height);
 | 
			
		||||
            this.ctx.scale(cw / mediaBox.width, -ch / mediaBox.height);
 | 
			
		||||
            this.ctx.translate(0, -mediaBox.height);
 | 
			
		||||
        },
 | 
			
		||||
        endDrawing: function () {
 | 
			
		||||
            this.ctx.restore();
 | 
			
		||||
@ -1103,11 +1109,12 @@ var tests = [
 | 
			
		||||
              F1: { Type: "Font",
 | 
			
		||||
                    Subtype: "Type1",
 | 
			
		||||
                    Name: "F1",
 | 
			
		||||
                    BaseFont: "Georgia",
 | 
			
		||||
                    BaseFont: "Helvetica",
 | 
			
		||||
                    Encoding: "MacRomanEncoding"
 | 
			
		||||
              },
 | 
			
		||||
          }
 | 
			
		||||
      },
 | 
			
		||||
      mediaBox: [ 0, 0, 612, 792 ],
 | 
			
		||||
      objs: [
 | 
			
		||||
          cmd("BT"),
 | 
			
		||||
          name("F1"), int(24), cmd("Tf"),
 | 
			
		||||
@ -1115,10 +1122,11 @@ var tests = [
 | 
			
		||||
          string("Hello World"), cmd("Tj"),
 | 
			
		||||
          cmd("ET"),
 | 
			
		||||
          eof()
 | 
			
		||||
          ]
 | 
			
		||||
      ]
 | 
			
		||||
    },
 | 
			
		||||
    { name: "Simple graphics",
 | 
			
		||||
      res: { },
 | 
			
		||||
      mediaBox: [ 0, 0, 612, 792 ],
 | 
			
		||||
      objs: [
 | 
			
		||||
          int(150), int(250), cmd("m"),
 | 
			
		||||
          int(150), int(350), cmd("l"),
 | 
			
		||||
@ -1147,6 +1155,7 @@ var tests = [
 | 
			
		||||
    },
 | 
			
		||||
    { name: "Heart",
 | 
			
		||||
      res: { },
 | 
			
		||||
      mediaBox: [ 0, 0, 612, 792 ],
 | 
			
		||||
      objs: [
 | 
			
		||||
          cmd("q"),
 | 
			
		||||
          real(0.9), real(0.0), real(0.0), cmd("rg"),
 | 
			
		||||
@ -1164,6 +1173,7 @@ var tests = [
 | 
			
		||||
    },
 | 
			
		||||
    { name: "Rectangle",
 | 
			
		||||
      res: { },
 | 
			
		||||
      mediaBox: [ 0, 0, 612, 792 ],
 | 
			
		||||
      objs: [
 | 
			
		||||
          int(1), int(0), int(0), int(1), int(80), int(80), cmd("cm"),
 | 
			
		||||
          int(0), int(72), cmd("m"),
 | 
			
		||||
@ -1173,7 +1183,7 @@ var tests = [
 | 
			
		||||
          int(4), cmd("w"),
 | 
			
		||||
          cmd("h"), cmd("S"),
 | 
			
		||||
          eof()
 | 
			
		||||
     ]
 | 
			
		||||
      ]
 | 
			
		||||
    },
 | 
			
		||||
];
 | 
			
		||||
 | 
			
		||||
@ -1185,7 +1195,7 @@ function runEchoTests() {
 | 
			
		||||
        var output = "";
 | 
			
		||||
        var gfx = new EchoGraphics(output);
 | 
			
		||||
        var i = new Interpreter(null, test.res, null, gfx);
 | 
			
		||||
        i.interpretHelper(new MockParser(test.objs));
 | 
			
		||||
        i.interpretHelper(test.mediaBox, new MockParser(test.objs));
 | 
			
		||||
 | 
			
		||||
        print("done.  Output:");
 | 
			
		||||
        print(gfx.out);
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										22
									
								
								test.html
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								test.html
									
									
									
									
									
								
							@ -4,11 +4,19 @@
 | 
			
		||||
  <script type="application/javascript;version=1.8"
 | 
			
		||||
          src="pdf.js"></script>
 | 
			
		||||
  <style type"text/css">
 | 
			
		||||
body {
 | 
			
		||||
  margin: 6px;
 | 
			
		||||
  padding: 0px;
 | 
			
		||||
  background-color: #c0bdb7;
 | 
			
		||||
}
 | 
			
		||||
#viewer {
 | 
			
		||||
  padding: 5px;
 | 
			
		||||
  border: 5px solid black;
 | 
			
		||||
  margin: auto;
 | 
			
		||||
  border: 1px solid black;
 | 
			
		||||
  width: 8.5in;
 | 
			
		||||
  height: 11in;
 | 
			
		||||
}
 | 
			
		||||
#pageNumber {
 | 
			
		||||
  text-align: right;
 | 
			
		||||
}
 | 
			
		||||
  </style>
 | 
			
		||||
 | 
			
		||||
@ -26,10 +34,14 @@ function displayPage(number) {
 | 
			
		||||
    pageDisplay.value = number;
 | 
			
		||||
 | 
			
		||||
    var ctx = canvas.getContext("2d");
 | 
			
		||||
    ctx.clearRect(0, 0, canvas.width, canvas.height);
 | 
			
		||||
    ctx.save();
 | 
			
		||||
    ctx.fillStyle = "rgb(255, 255, 255)";
 | 
			
		||||
    ctx.fillRect(0, 0, canvas.width, canvas.height);
 | 
			
		||||
    ctx.restore();
 | 
			
		||||
 | 
			
		||||
    var gfx = new CanvasGraphics(ctx);
 | 
			
		||||
    var interp = new Interpreter(null, page.res, null, gfx);
 | 
			
		||||
    interp.interpretHelper(new MockParser(page.objs));
 | 
			
		||||
    interp.interpretHelper(page.mediaBox, new MockParser(page.objs));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function nextPage() {
 | 
			
		||||
@ -60,8 +72,8 @@ function profile() {
 | 
			
		||||
<body onload="load();">
 | 
			
		||||
  <div>
 | 
			
		||||
    <button onclick="prevPage();">Previous</button>
 | 
			
		||||
    <input type="text" id="pageNumber" value="0"></input>
 | 
			
		||||
    <button onclick="nextPage();">Next</button>
 | 
			
		||||
    <input type="text" id="pageNumber" value="0" size="5"></input>
 | 
			
		||||
    <button onclick="profile();">Profile</button>
 | 
			
		||||
  <div id="viewer">
 | 
			
		||||
    <!-- Canvas dimensions must be specified in CSS pixels.  CSS pixels
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user