JAL-1807 includes ?j2sdebug flag and DebugJS._(msg)
[jalviewjs.git] / bin / javajs / export / PDFCreator.js
index 7f5c820..3442530 100644 (file)
-Clazz.declarePackage ("javajs.export");\r
-Clazz.load (null, "javajs.export.PDFCreator", ["java.lang.Double", "java.util.Hashtable", "javajs.export.PDFObject", "javajs.util.Lst", "$.SB"], function () {\r
-c$ = Clazz.decorateAsClass (function () {\r
-this.os = null;\r
-this.indirectObjects = null;\r
-this.root = null;\r
-this.graphics = null;\r
-this.pt = 0;\r
-this.xrefPt = 0;\r
-this.count = 0;\r
-this.height = 0;\r
-this.width = 0;\r
-this.fonts = null;\r
-this.images = null;\r
-Clazz.instantialize (this, arguments);\r
-}, javajs["export"], "PDFCreator");\r
-Clazz.makeConstructor (c$, \r
-function () {\r
-});\r
-Clazz.defineMethod (c$, "setOutputStream", \r
-function (os) {\r
-this.os = os;\r
-}, "java.io.OutputStream");\r
-Clazz.defineMethod (c$, "newDocument", \r
-function (paperWidth, paperHeight, isLandscape) {\r
-this.width = (isLandscape ? paperHeight : paperWidth);\r
-this.height = (isLandscape ? paperWidth : paperHeight);\r
-System.out.println ("Creating PDF with width=" + this.width + " and height=" + this.height);\r
-this.fonts =  new java.util.Hashtable ();\r
-this.indirectObjects =  new javajs.util.Lst ();\r
-this.root = this.newObject ("Catalog");\r
-var pages = this.newObject ("Pages");\r
-var page = this.newObject ("Page");\r
-var pageContents = this.newObject (null);\r
-this.graphics = this.newObject ("XObject");\r
-this.root.addDef ("Pages", pages.getRef ());\r
-pages.addDef ("Count", "1");\r
-pages.addDef ("Kids", "[ " + page.getRef () + " ]");\r
-page.addDef ("Parent", pages.getRef ());\r
-page.addDef ("MediaBox", "[ 0 0 " + paperWidth + " " + paperHeight + " ]");\r
-if (isLandscape) page.addDef ("Rotate", "90");\r
-pageContents.addDef ("Length", "?");\r
-pageContents.append ((isLandscape ? "q 0 1 1 0 0 0 " : "q 1 0 0 -1 0 " + (paperHeight)) + " cm /" + this.graphics.getID () + " Do Q");\r
-page.addDef ("Contents", pageContents.getRef ());\r
-this.addProcSet (page);\r
-this.addProcSet (this.graphics);\r
-this.graphics.addDef ("Subtype", "/Form");\r
-this.graphics.addDef ("FormType", "1");\r
-this.graphics.addDef ("BBox", "[0 0 " + this.width + " " + this.height + "]");\r
-this.graphics.addDef ("Matrix", "[1 0 0 1 0 0]");\r
-this.graphics.addDef ("Length", "?");\r
-page.addResource ("XObject", this.graphics.getID (), this.graphics.getRef ());\r
-this.g ("q 1 w 1 J 1 j 10 M []0 d q ");\r
-this.clip (0, 0, this.width, this.height);\r
-}, "~N,~N,~B");\r
-Clazz.defineMethod (c$, "addProcSet", \r
-($fz = function (o) {\r
-o.addResource (null, "ProcSet", "[/PDF /Text /ImageB /ImageC /ImageI]");\r
-}, $fz.isPrivate = true, $fz), "javajs.export.PDFObject");\r
-Clazz.defineMethod (c$, "clip", \r
-($fz = function (x1, y1, x2, y2) {\r
-this.moveto (x1, y1);\r
-this.lineto (x2, y1);\r
-this.lineto (x2, y2);\r
-this.lineto (x1, y2);\r
-this.g ("h W n");\r
-}, $fz.isPrivate = true, $fz), "~N,~N,~N,~N");\r
-Clazz.defineMethod (c$, "moveto", \r
-function (x, y) {\r
-this.g (x + " " + y + " m");\r
-}, "~N,~N");\r
-Clazz.defineMethod (c$, "lineto", \r
-function (x, y) {\r
-this.g (x + " " + y + " l");\r
-}, "~N,~N");\r
-Clazz.defineMethod (c$, "newObject", \r
-($fz = function (type) {\r
-var o =  new javajs["export"].PDFObject (++this.count);\r
-if (type != null) o.addDef ("Type", "/" + type);\r
-this.indirectObjects.addLast (o);\r
-return o;\r
-}, $fz.isPrivate = true, $fz), "~S");\r
-Clazz.defineMethod (c$, "addInfo", \r
-function (data) {\r
-var info =  new java.util.Hashtable ();\r
-for (var e, $e = data.entrySet ().iterator (); $e.hasNext () && ((e = $e.next ()) || true);) {\r
-var value = "(" + e.getValue ().$replace (')', '_').$replace ('(', '_') + ")";\r
-info.put (e.getKey (), value);\r
-}\r
-this.root.addDef ("Info", info);\r
-}, "java.util.Map");\r
-Clazz.defineMethod (c$, "addFontResource", \r
-($fz = function (fname) {\r
-var f = this.newObject ("Font");\r
-this.fonts.put (fname, f);\r
-f.addDef ("BaseFont", fname);\r
-f.addDef ("Encoding", "/WinAnsiEncoding");\r
-f.addDef ("Subtype", "/Type1");\r
-this.graphics.addResource ("Font", f.getID (), f.getRef ());\r
-return f;\r
-}, $fz.isPrivate = true, $fz), "~S");\r
-Clazz.defineMethod (c$, "addImageResource", \r
-function (newImage, width, height, buffer, isRGB) {\r
-var imageObj = this.newObject ("XObject");\r
-if (this.images == null) this.images =  new java.util.Hashtable ();\r
-this.images.put (newImage, imageObj);\r
-imageObj.addDef ("Subtype", "/Image");\r
-imageObj.addDef ("Length", "?");\r
-imageObj.addDef ("ColorSpace", isRGB ? "/DeviceRGB" : "/DeviceGray");\r
-imageObj.addDef ("BitsPerComponent", "8");\r
-imageObj.addDef ("Width", "" + width);\r
-imageObj.addDef ("Height", "" + height);\r
-this.graphics.addResource ("XObject", imageObj.getID (), imageObj.getRef ());\r
-var n = buffer.length;\r
-var stream =  Clazz.newByteArray (n * (isRGB ? 3 : 1), 0);\r
-if (isRGB) {\r
-for (var i = 0, pt = 0; i < n; i++) {\r
-stream[pt++] = ((buffer[i] >> 16) & 0xFF);\r
-stream[pt++] = ((buffer[i] >> 8) & 0xFF);\r
-stream[pt++] = (buffer[i] & 0xFF);\r
-}\r
-} else {\r
-for (var i = 0; i < n; i++) stream[i] = buffer[i];\r
-\r
-}imageObj.setStream (stream);\r
-this.graphics.addResource ("XObject", imageObj.getID (), imageObj.getRef ());\r
-}, "~O,~N,~N,~A,~B");\r
-Clazz.defineMethod (c$, "g", \r
-function (cmd) {\r
-this.graphics.append (cmd).appendC ('\n');\r
-}, "~S");\r
-Clazz.defineMethod (c$, "output", \r
-($fz = function (s) {\r
-var b = s.getBytes ();\r
-this.os.write (b, 0, b.length);\r
-this.pt += b.length;\r
-}, $fz.isPrivate = true, $fz), "~S");\r
-Clazz.defineMethod (c$, "closeDocument", \r
-function () {\r
-this.g ("Q Q");\r
-this.outputHeader ();\r
-this.writeObjects ();\r
-this.writeXRefTable ();\r
-this.writeTrailer ();\r
-this.os.flush ();\r
-this.os.close ();\r
-});\r
-Clazz.defineMethod (c$, "outputHeader", \r
-($fz = function () {\r
-this.output ("%PDF-1.3\n%");\r
-var b =  Clazz.newByteArray (-1, [-1, -1, -1, -1]);\r
-this.os.write (b, 0, b.length);\r
-this.pt += 4;\r
-this.output ("\n");\r
-}, $fz.isPrivate = true, $fz));\r
-Clazz.defineMethod (c$, "writeTrailer", \r
-($fz = function () {\r
-var trailer =  new javajs["export"].PDFObject (-2);\r
-this.output ("trailer");\r
-trailer.addDef ("Size", "" + this.indirectObjects.size ());\r
-trailer.addDef ("Root", this.root.getRef ());\r
-trailer.output (this.os);\r
-this.output ("startxref\n");\r
-this.output ("" + this.xrefPt + "\n");\r
-this.output ("%%EOF\n");\r
-}, $fz.isPrivate = true, $fz));\r
-Clazz.defineMethod (c$, "writeObjects", \r
-($fz = function () {\r
-var nObj = this.indirectObjects.size ();\r
-for (var i = 0; i < nObj; i++) {\r
-var o = this.indirectObjects.get (i);\r
-if (!o.isFont ()) continue;\r
-o.pt = this.pt;\r
-this.pt += o.output (this.os);\r
-}\r
-for (var i = 0; i < nObj; i++) {\r
-var o = this.indirectObjects.get (i);\r
-if (o.isFont ()) continue;\r
-o.pt = this.pt;\r
-this.pt += o.output (this.os);\r
-}\r
-}, $fz.isPrivate = true, $fz));\r
-Clazz.defineMethod (c$, "writeXRefTable", \r
-($fz = function () {\r
-this.xrefPt = this.pt;\r
-var nObj = this.indirectObjects.size ();\r
-var sb =  new javajs.util.SB ();\r
-sb.append ("xref\n0 " + (nObj + 1) + "\n0000000000 65535 f\r\n");\r
-for (var i = 0; i < nObj; i++) {\r
-var o = this.indirectObjects.get (i);\r
-var s = "0000000000" + o.pt;\r
-sb.append (s.substring (s.length - 10));\r
-sb.append (" 00000 n\r\n");\r
-}\r
-this.output (sb.toString ());\r
-}, $fz.isPrivate = true, $fz));\r
-Clazz.defineMethod (c$, "canDoLineTo", \r
-function () {\r
-return true;\r
-});\r
-Clazz.defineMethod (c$, "fill", \r
-function () {\r
-this.g ("f");\r
-});\r
-Clazz.defineMethod (c$, "stroke", \r
-function () {\r
-this.g ("S");\r
-});\r
-Clazz.defineMethod (c$, "doCircle", \r
-function (x, y, r, doFill) {\r
-var d = r * 4 * (Math.sqrt (2) - 1) / 3;\r
-var dx = x;\r
-var dy = y;\r
-this.g ((dx + r) + " " + dy + " m");\r
-this.g ((dx + r) + " " + (dy + d) + " " + (dx + d) + " " + (dy + r) + " " + (dx) + " " + (dy + r) + " " + " c");\r
-this.g ((dx - d) + " " + (dy + r) + " " + (dx - r) + " " + (dy + d) + " " + (dx - r) + " " + (dy) + " c");\r
-this.g ((dx - r) + " " + (dy - d) + " " + (dx - d) + " " + (dy - r) + " " + (dx) + " " + (dy - r) + " c");\r
-this.g ((dx + d) + " " + (dy - r) + " " + (dx + r) + " " + (dy - d) + " " + (dx + r) + " " + (dy) + " c");\r
-this.g (doFill ? "f" : "s");\r
-}, "~N,~N,~N,~B");\r
-Clazz.defineMethod (c$, "doPolygon", \r
-function (axPoints, ayPoints, nPoints, doFill) {\r
-this.moveto (axPoints[0], ayPoints[0]);\r
-for (var i = 1; i < nPoints; i++) this.lineto (axPoints[i], ayPoints[i]);\r
-\r
-this.g (doFill ? "f" : "s");\r
-}, "~A,~A,~N,~B");\r
-Clazz.defineMethod (c$, "doRect", \r
-function (x, y, width, height, doFill) {\r
-this.g (x + " " + y + " " + width + " " + height + " re " + (doFill ? "f" : "s"));\r
-}, "~N,~N,~N,~N,~B");\r
-Clazz.defineMethod (c$, "drawImage", \r
-function (image, destX0, destY0, destX1, destY1, srcX0, srcY0, srcX1, srcY1) {\r
-var imageObj = this.images.get (image);\r
-if (imageObj == null) return;\r
-this.g ("q");\r
-this.clip (destX0, destY0, destX1, destY1);\r
-var iw = Double.parseDouble (imageObj.getDef ("Width"));\r
-var ih = Double.parseDouble (imageObj.getDef ("Height"));\r
-var dw = (destX1 - destX0 + 1);\r
-var dh = (destY1 - destY0 + 1);\r
-var sw = (srcX1 - srcX0 + 1);\r
-var sh = (srcY1 - srcY0 + 1);\r
-var scaleX = dw / sw;\r
-var scaleY = dh / sh;\r
-var transX = destX0 - srcX0 * scaleX;\r
-var transY = destY0 + (ih - srcY0) * scaleY;\r
-this.g (scaleX * iw + " 0 0 " + -scaleY * ih + " " + transX + " " + transY + " cm");\r
-this.g ("/" + imageObj.getID () + " Do");\r
-this.g ("Q");\r
-}, "~O,~N,~N,~N,~N,~N,~N,~N,~N");\r
-Clazz.defineMethod (c$, "drawStringRotated", \r
-function (s, x, y, angle) {\r
-this.g ("q " + this.getRotation (angle) + " " + x + " " + y + " cm BT(" + s + ")Tj ET Q");\r
-}, "~S,~N,~N,~N");\r
-Clazz.defineMethod (c$, "getRotation", \r
-function (angle) {\r
-var cos = 0;\r
-var sin = 0;\r
-switch (angle) {\r
-case 0:\r
-cos = 1;\r
-break;\r
-case 90:\r
-sin = 1;\r
-break;\r
-case -90:\r
-sin = -1;\r
-break;\r
-case 180:\r
-cos = -1;\r
-break;\r
-default:\r
-var a = (angle / 180.0 * 3.141592653589793);\r
-cos = Math.cos (a);\r
-sin = Math.sin (a);\r
-if (Math.abs (cos) < 0.0001) cos = 0;\r
-if (Math.abs (sin) < 0.0001) sin = 0;\r
-}\r
-return cos + " " + sin + " " + sin + " " + -cos;\r
-}, "~N");\r
-Clazz.defineMethod (c$, "setColor", \r
-function (rgb, isFill) {\r
-this.g (rgb[0] + " " + rgb[1] + " " + rgb[2] + (isFill ? " rg" : " RG"));\r
-}, "~A,~B");\r
-Clazz.defineMethod (c$, "setFont", \r
-function (fname, size) {\r
-var f = this.fonts.get (fname);\r
-if (f == null) f = this.addFontResource (fname);\r
-this.g ("/" + f.getID () + " " + size + " Tf");\r
-}, "~S,~N");\r
-Clazz.defineMethod (c$, "setLineWidth", \r
-function (width) {\r
-this.g (width + " w");\r
-}, "~N");\r
-Clazz.defineMethod (c$, "translateScale", \r
-function (x, y, scale) {\r
-this.g (scale + " 0 0 " + scale + " " + x + " " + y + " cm");\r
-}, "~N,~N,~N");\r
-});\r
+Clazz.declarePackage ("javajs.export");
+Clazz.load (null, "javajs.export.PDFCreator", ["java.lang.Double", "java.util.Hashtable", "javajs.export.PDFObject", "javajs.util.Lst", "$.SB"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.os = null;
+this.indirectObjects = null;
+this.root = null;
+this.graphics = null;
+this.pt = 0;
+this.xrefPt = 0;
+this.count = 0;
+this.height = 0;
+this.width = 0;
+this.fonts = null;
+this.images = null;
+Clazz.instantialize (this, arguments);
+}, javajs["export"], "PDFCreator");
+Clazz.makeConstructor (c$, 
+function () {
+});
+Clazz.defineMethod (c$, "setOutputStream", 
+function (os) {
+this.os = os;
+}, "java.io.OutputStream");
+Clazz.defineMethod (c$, "newDocument", 
+function (paperWidth, paperHeight, isLandscape) {
+this.width = (isLandscape ? paperHeight : paperWidth);
+this.height = (isLandscape ? paperWidth : paperHeight);
+System.out.println ("Creating PDF with width=" + this.width + " and height=" + this.height);
+this.fonts =  new java.util.Hashtable ();
+this.indirectObjects =  new javajs.util.Lst ();
+this.root = this.newObject ("Catalog");
+var pages = this.newObject ("Pages");
+var page = this.newObject ("Page");
+var pageContents = this.newObject (null);
+this.graphics = this.newObject ("XObject");
+this.root.addDef ("Pages", pages.getRef ());
+pages.addDef ("Count", "1");
+pages.addDef ("Kids", "[ " + page.getRef () + " ]");
+page.addDef ("Parent", pages.getRef ());
+page.addDef ("MediaBox", "[ 0 0 " + paperWidth + " " + paperHeight + " ]");
+if (isLandscape) page.addDef ("Rotate", "90");
+pageContents.addDef ("Length", "?");
+pageContents.append ((isLandscape ? "q 0 1 1 0 0 0 " : "q 1 0 0 -1 0 " + (paperHeight)) + " cm /" + this.graphics.getID () + " Do Q");
+page.addDef ("Contents", pageContents.getRef ());
+this.addProcSet (page);
+this.addProcSet (this.graphics);
+this.graphics.addDef ("Subtype", "/Form");
+this.graphics.addDef ("FormType", "1");
+this.graphics.addDef ("BBox", "[0 0 " + this.width + " " + this.height + "]");
+this.graphics.addDef ("Matrix", "[1 0 0 1 0 0]");
+this.graphics.addDef ("Length", "?");
+page.addResource ("XObject", this.graphics.getID (), this.graphics.getRef ());
+this.g ("q 1 w 1 J 1 j 10 M []0 d q ");
+this.clip (0, 0, this.width, this.height);
+}, "~N,~N,~B");
+Clazz.defineMethod (c$, "addProcSet", 
+($fz = function (o) {
+o.addResource (null, "ProcSet", "[/PDF /Text /ImageB /ImageC /ImageI]");
+}, $fz.isPrivate = true, $fz), "javajs.export.PDFObject");
+Clazz.defineMethod (c$, "clip", 
+($fz = function (x1, y1, x2, y2) {
+this.moveto (x1, y1);
+this.lineto (x2, y1);
+this.lineto (x2, y2);
+this.lineto (x1, y2);
+this.g ("h W n");
+}, $fz.isPrivate = true, $fz), "~N,~N,~N,~N");
+Clazz.defineMethod (c$, "moveto", 
+function (x, y) {
+this.g (x + " " + y + " m");
+}, "~N,~N");
+Clazz.defineMethod (c$, "lineto", 
+function (x, y) {
+this.g (x + " " + y + " l");
+}, "~N,~N");
+Clazz.defineMethod (c$, "newObject", 
+($fz = function (type) {
+var o =  new javajs["export"].PDFObject (++this.count);
+if (type != null) o.addDef ("Type", "/" + type);
+this.indirectObjects.addLast (o);
+return o;
+}, $fz.isPrivate = true, $fz), "~S");
+Clazz.defineMethod (c$, "addInfo", 
+function (data) {
+var info =  new java.util.Hashtable ();
+for (var e, $e = data.entrySet ().iterator (); $e.hasNext () && ((e = $e.next ()) || true);) {
+var value = "(" + e.getValue ().$replace (')', '_').$replace ('(', '_') + ")";
+info.put (e.getKey (), value);
+}
+this.root.addDef ("Info", info);
+}, "java.util.Map");
+Clazz.defineMethod (c$, "addFontResource", 
+($fz = function (fname) {
+var f = this.newObject ("Font");
+this.fonts.put (fname, f);
+f.addDef ("BaseFont", fname);
+f.addDef ("Encoding", "/WinAnsiEncoding");
+f.addDef ("Subtype", "/Type1");
+this.graphics.addResource ("Font", f.getID (), f.getRef ());
+return f;
+}, $fz.isPrivate = true, $fz), "~S");
+Clazz.defineMethod (c$, "addImageResource", 
+function (newImage, width, height, buffer, isRGB) {
+var imageObj = this.newObject ("XObject");
+if (this.images == null) this.images =  new java.util.Hashtable ();
+this.images.put (newImage, imageObj);
+imageObj.addDef ("Subtype", "/Image");
+imageObj.addDef ("Length", "?");
+imageObj.addDef ("ColorSpace", isRGB ? "/DeviceRGB" : "/DeviceGray");
+imageObj.addDef ("BitsPerComponent", "8");
+imageObj.addDef ("Width", "" + width);
+imageObj.addDef ("Height", "" + height);
+this.graphics.addResource ("XObject", imageObj.getID (), imageObj.getRef ());
+var n = buffer.length;
+var stream =  Clazz.newByteArray (n * (isRGB ? 3 : 1), 0);
+if (isRGB) {
+for (var i = 0, pt = 0; i < n; i++) {
+stream[pt++] = ((buffer[i] >> 16) & 0xFF);
+stream[pt++] = ((buffer[i] >> 8) & 0xFF);
+stream[pt++] = (buffer[i] & 0xFF);
+}
+} else {
+for (var i = 0; i < n; i++) stream[i] = buffer[i];
+
+}imageObj.setStream (stream);
+this.graphics.addResource ("XObject", imageObj.getID (), imageObj.getRef ());
+}, "~O,~N,~N,~A,~B");
+Clazz.defineMethod (c$, "g", 
+function (cmd) {
+this.graphics.append (cmd).appendC ('\n');
+}, "~S");
+Clazz.defineMethod (c$, "output", 
+($fz = function (s) {
+var b = s.getBytes ();
+this.os.write (b, 0, b.length);
+this.pt += b.length;
+}, $fz.isPrivate = true, $fz), "~S");
+Clazz.defineMethod (c$, "closeDocument", 
+function () {
+this.g ("Q Q");
+this.outputHeader ();
+this.writeObjects ();
+this.writeXRefTable ();
+this.writeTrailer ();
+this.os.flush ();
+this.os.close ();
+});
+Clazz.defineMethod (c$, "outputHeader", 
+($fz = function () {
+this.output ("%PDF-1.3\n%");
+var b =  Clazz.newByteArray (-1, [-1, -1, -1, -1]);
+this.os.write (b, 0, b.length);
+this.pt += 4;
+this.output ("\n");
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "writeTrailer", 
+($fz = function () {
+var trailer =  new javajs["export"].PDFObject (-2);
+this.output ("trailer");
+trailer.addDef ("Size", "" + this.indirectObjects.size ());
+trailer.addDef ("Root", this.root.getRef ());
+trailer.output (this.os);
+this.output ("startxref\n");
+this.output ("" + this.xrefPt + "\n");
+this.output ("%%EOF\n");
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "writeObjects", 
+($fz = function () {
+var nObj = this.indirectObjects.size ();
+for (var i = 0; i < nObj; i++) {
+var o = this.indirectObjects.get (i);
+if (!o.isFont ()) continue;
+o.pt = this.pt;
+this.pt += o.output (this.os);
+}
+for (var i = 0; i < nObj; i++) {
+var o = this.indirectObjects.get (i);
+if (o.isFont ()) continue;
+o.pt = this.pt;
+this.pt += o.output (this.os);
+}
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "writeXRefTable", 
+($fz = function () {
+this.xrefPt = this.pt;
+var nObj = this.indirectObjects.size ();
+var sb =  new javajs.util.SB ();
+sb.append ("xref\n0 " + (nObj + 1) + "\n0000000000 65535 f\r\n");
+for (var i = 0; i < nObj; i++) {
+var o = this.indirectObjects.get (i);
+var s = "0000000000" + o.pt;
+sb.append (s.substring (s.length - 10));
+sb.append (" 00000 n\r\n");
+}
+this.output (sb.toString ());
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "canDoLineTo", 
+function () {
+return true;
+});
+Clazz.defineMethod (c$, "fill", 
+function () {
+this.g ("f");
+});
+Clazz.defineMethod (c$, "stroke", 
+function () {
+this.g ("S");
+});
+Clazz.defineMethod (c$, "doCircle", 
+function (x, y, r, doFill) {
+var d = r * 4 * (Math.sqrt (2) - 1) / 3;
+var dx = x;
+var dy = y;
+this.g ((dx + r) + " " + dy + " m");
+this.g ((dx + r) + " " + (dy + d) + " " + (dx + d) + " " + (dy + r) + " " + (dx) + " " + (dy + r) + " " + " c");
+this.g ((dx - d) + " " + (dy + r) + " " + (dx - r) + " " + (dy + d) + " " + (dx - r) + " " + (dy) + " c");
+this.g ((dx - r) + " " + (dy - d) + " " + (dx - d) + " " + (dy - r) + " " + (dx) + " " + (dy - r) + " c");
+this.g ((dx + d) + " " + (dy - r) + " " + (dx + r) + " " + (dy - d) + " " + (dx + r) + " " + (dy) + " c");
+this.g (doFill ? "f" : "s");
+}, "~N,~N,~N,~B");
+Clazz.defineMethod (c$, "doPolygon", 
+function (axPoints, ayPoints, nPoints, doFill) {
+this.moveto (axPoints[0], ayPoints[0]);
+for (var i = 1; i < nPoints; i++) this.lineto (axPoints[i], ayPoints[i]);
+
+this.g (doFill ? "f" : "s");
+}, "~A,~A,~N,~B");
+Clazz.defineMethod (c$, "doRect", 
+function (x, y, width, height, doFill) {
+this.g (x + " " + y + " " + width + " " + height + " re " + (doFill ? "f" : "s"));
+}, "~N,~N,~N,~N,~B");
+Clazz.defineMethod (c$, "drawImage", 
+function (image, destX0, destY0, destX1, destY1, srcX0, srcY0, srcX1, srcY1) {
+var imageObj = this.images.get (image);
+if (imageObj == null) return;
+this.g ("q");
+this.clip (destX0, destY0, destX1, destY1);
+var iw = Double.parseDouble (imageObj.getDef ("Width"));
+var ih = Double.parseDouble (imageObj.getDef ("Height"));
+var dw = (destX1 - destX0 + 1);
+var dh = (destY1 - destY0 + 1);
+var sw = (srcX1 - srcX0 + 1);
+var sh = (srcY1 - srcY0 + 1);
+var scaleX = dw / sw;
+var scaleY = dh / sh;
+var transX = destX0 - srcX0 * scaleX;
+var transY = destY0 + (ih - srcY0) * scaleY;
+this.g (scaleX * iw + " 0 0 " + -scaleY * ih + " " + transX + " " + transY + " cm");
+this.g ("/" + imageObj.getID () + " Do");
+this.g ("Q");
+}, "~O,~N,~N,~N,~N,~N,~N,~N,~N");
+Clazz.defineMethod (c$, "drawStringRotated", 
+function (s, x, y, angle) {
+this.g ("q " + this.getRotation (angle) + " " + x + " " + y + " cm BT(" + s + ")Tj ET Q");
+}, "~S,~N,~N,~N");
+Clazz.defineMethod (c$, "getRotation", 
+function (angle) {
+var cos = 0;
+var sin = 0;
+switch (angle) {
+case 0:
+cos = 1;
+break;
+case 90:
+sin = 1;
+break;
+case -90:
+sin = -1;
+break;
+case 180:
+cos = -1;
+break;
+default:
+var a = (angle / 180.0 * 3.141592653589793);
+cos = Math.cos (a);
+sin = Math.sin (a);
+if (Math.abs (cos) < 0.0001) cos = 0;
+if (Math.abs (sin) < 0.0001) sin = 0;
+}
+return cos + " " + sin + " " + sin + " " + -cos;
+}, "~N");
+Clazz.defineMethod (c$, "setColor", 
+function (rgb, isFill) {
+this.g (rgb[0] + " " + rgb[1] + " " + rgb[2] + (isFill ? " rg" : " RG"));
+}, "~A,~B");
+Clazz.defineMethod (c$, "setFont", 
+function (fname, size) {
+var f = this.fonts.get (fname);
+if (f == null) f = this.addFontResource (fname);
+this.g ("/" + f.getID () + " " + size + " Tf");
+}, "~S,~N");
+Clazz.defineMethod (c$, "setLineWidth", 
+function (width) {
+this.g (width + " w");
+}, "~N");
+Clazz.defineMethod (c$, "translateScale", 
+function (x, y, scale) {
+this.g (scale + " 0 0 " + scale + " " + x + " " + y + " cm");
+}, "~N,~N,~N");
+});