function PS_GRenderer($format = null, $orientation = 'landscape') { // Null size does not create a graphic. $this->styles = array(); $this->font = null; if (!is_null($format)) { $size = $this->_getFormat($format, $orientation); $this->width = $size[0]; $this->height = $size[1]; $this->ps = ps_new(); ps_open_file($this->ps, ''); ps_begin_page($this->ps, $this->width, $this->height); $this->font = ps_findfont($this->ps, 'Helvetica', '', 0); } }
function frame($psdoc) { ps_setlinewidth($psdoc, 60); ps_moveto($psdoc, 150, 50); ps_lineto($psdoc, 750, 50); ps_arc($psdoc, 750, 150, 100, 270, 360); ps_lineto($psdoc, 850, 750); ps_arc($psdoc, 750, 750, 100, 0, 90); ps_lineto($psdoc, 150, 850); ps_arc($psdoc, 150, 750, 100, 90, 180); ps_lineto($psdoc, 50, 150); ps_arc($psdoc, 150, 150, 100, 180, 270); ps_stroke($psdoc); } $psdoc = ps_new(); if (!ps_open_file($psdoc, "fontcreate.ps")) { print "Cannot open PostScript file\n"; exit; } ps_set_info($psdoc, "Creator", __FILE__); ps_set_info($psdoc, "Author", "Uwe Steinmann"); ps_set_info($psdoc, "Title", "Boxed Text"); ps_set_info($psdoc, "Keywords", "Boxes, Text Rendering"); ps_set_info($psdoc, "BoundingBox", "0 0 596 842"); $myfont = ps_begin_font($psdoc, "test", 0.001, 0.0, 0.0, 0.001, 0.0, 0.0); ps_begin_glyph($psdoc, "a", 800.0, 0.0, 0.0, 800.0, 800.0); ps_rect($psdoc, 10, 10, 300, 300); ps_stroke($psdoc); ps_end_glyph($psdoc); ps_begin_glyph($psdoc, "b", 800.0, 0.0, 0.0, 800.0, 800.0); ps_rect($psdoc, 10, 10, 300, 300);
<?php $ps = ps_new(); if (!ps_open_file($ps, "-")) { print "Cannot open PostScript file\n"; exit; } ps_set_info($ps, "Creator", "draw.php"); ps_set_info($ps, "Author", "Uwe Steinmann"); ps_set_info($ps, "Title", "Creating document in memory"); ps_begin_page($ps, 596, 842); ps_end_page($ps); ps_close($ps); echo ps_get_buffer($ps); ps_delete($ps);
<?php define("LEFT_BORDER", 50); function footer($ps, $text) { $psfont = ps_findfont($ps, "Helvetica", "", 0); ps_setfont($ps, $psfont, 8.0); $buffer = "This file has been created with pslib " . ps_get_parameter($ps, "dottedversion", 0.0); ps_show_xy($ps, $buffer, LEFT_BORDER, 25); } $ps = ps_new(); if (!ps_open_file($ps, "overprint.ps")) { print "Cannot open PostScript file\n"; exit; } ps_set_info($ps, "Creator", "draw.php"); ps_set_info($ps, "Author", "Uwe Steinmann"); ps_set_info($ps, "Title", "Overprint"); ps_begin_page($ps, 596, 842); footer($ps, ""); ps_setcolor($ps, "fill", "cmyk", 1.0, 0.0, 0.0, 0.0); ps_rect($ps, 100, 100, 200, 200); ps_fill($ps); ps_setoverprintmode($ps, 1); ps_rect($ps, 120, 120, 100, 100); ps_fill($ps); ps_end_page($ps); ps_close($ps); ps_delete($ps);
ps_setfont($p, $font, 12.0); ps_show_xy($p, $title, 10, EXAMPLE_BOX_HEIGHT - EXAMPLE_BOX_TITLE_HEIGHT + 5); ps_setlinewidth($p, 1.0); ps_setcolor($p, "stroke", "gray", 0.0, 0.0, 0.0, 0.0); ps_rect($p, 0, 0, EXAMPLE_BOX_WIDTH, EXAMPLE_BOX_HEIGHT); ps_stroke($p); ps_moveto($p, 0, EXAMPLE_BOX_HEIGHT - EXAMPLE_BOX_TITLE_HEIGHT); ps_lineto($p, EXAMPLE_BOX_WIDTH, EXAMPLE_BOX_HEIGHT - EXAMPLE_BOX_TITLE_HEIGHT); ps_stroke($p); } function end_example_box($p) { ps_restore($p); } $ps = ps_new(); if (!ps_open_file($ps, $newpsdoc)) { print "Cannot open PostScript file\n"; exit; } ps_set_parameter($ps, "warning", "true"); ps_set_info($ps, "Creator", "draw.php"); ps_set_info($ps, "Author", "Uwe Steinmann"); ps_set_info($ps, "Title", "Many examples"); $pstemplate = ps_begin_template($ps, 30.0, 30.0); ps_moveto($ps, 0, 0); ps_lineto($ps, 30, 30); ps_moveto($ps, 0, 30); ps_lineto($ps, 30, 0); ps_stroke($ps); ps_end_template($ps); $pspattern1 = ps_begin_pattern($ps, 10.0, 10.0, 10.0, 10.0, 1);
/** * Create the PostScript canvas. * * Parameters available: * * 'page' Specify the page/paper format for the graph's page, available * formats are: A0, A1, A2, A3, A4, A5, A6, B5, letter, legal, ledger, * 11x17, cd_front, inlay, inlay_nosides * * 'align' Alignment of the graph on the page, available options are: * topleft, topcenter, topright, leftcenter, center, rightcenter, * leftbottom, centerbottom, rightbottom * * 'orientation' Specifies the paper orientation, default is 'portrait' and * 'landscape' is also supported. * * 'creator' The creator tag of the PostScript/graph * * 'author' The author tag of the PostScript/graph * * 'title' The title tag of the PostScript/graph * * 'width' The width of the graph on the page * * 'height' The height of the graph on the page * * 'left' The left offset of the graph on the page * * 'top' The top offset of the graph on the page * * 'filename' The PostScript file to open/add page to, using 'filename' requires * 'ps' An existing pslib PostScript document to add the page to * * 'add_page' (true/false) Used together with 'ps', to specify whether the * canvas should add a new graph page (true) or create the graph on the * current page (false), default is 'true' * * The 'page' and 'width' & 'height' can be mutually omitted, if 'page' is * omitted the page is created using dimensions of width x height, and if * width and height are omitted the page dimensions are used for the graph. * * If 'ps' is specified, 'filename', 'creator', 'author' and 'title' has no * effect. * * 'left' and 'top' are overridden by 'align' * * It is required either to specify 'width' & 'height' or 'page'. * * The PostScript format/pslib has some limitations on the capabilities, * which means some functionality available using other canvass (fx. alpha * blending and gradient fills) are not supported with PostScript * (see Canvas.txt in the docs/ folder for further details) * * @param array $param Parameter array */ function Image_Canvas_PS($param) { if (isset($param['page'])) { switch (strtoupper($param['page'])) { case 'A0': $this->_pageWidth = 2380; $this->_pageHeight = 3368; break; case 'A1': $this->_pageWidth = 1684; $this->_pageHeight = 2380; break; case 'A2': $this->_pageWidth = 1190; $this->_pageHeight = 1684; break; case 'A3': $this->_pageWidth = 842; $this->_pageHeight = 1190; break; case 'A4': $this->_pageWidth = 595; $this->_pageHeight = 842; break; case 'A5': $this->_pageWidth = 421; $this->_pageHeight = 595; break; case 'A6': $this->_pageWidth = 297; $this->_pageHeight = 421; break; case 'B5': $this->_pageWidth = 501; $this->_pageHeight = 709; break; case 'LETTER': $this->_pageWidth = 612; $this->_pageHeight = 792; break; case 'LEGAL': $this->_pageWidth = 612; $this->_pageHeight = 1008; break; case 'LEDGER': $this->_pageWidth = 1224; $this->_pageHeight = 792; break; case '11X17': $this->_pageWidth = 792; $this->_pageHeight = 1224; break; case 'CD_FRONT': $this->_pageWidth = 337; $this->_pageHeight = 337; break; case 'INLAY': $this->_pageWidth = 425; $this->_pageHeight = 332; break; case 'INLAY_NOSIDES': $this->_pageWidth = 390; $this->_pageHeight = 332; break; } } $this->setDefaultFont(array('name' => 'Helvetica', 'color' => 'black', 'size' => 9)); if (isset($param['orientation']) && strtoupper($param['orientation']) == 'LANDSCAPE') { $w = $this->_pageWidth; $this->_pageWidth = $this->_pageHeight; $this->_pageHeight = $w; } parent::Image_Canvas($param); if (!$this->_pageWidth) { $this->_pageWidth = $this->_width; } elseif (!$this->_width) { $this->_width = $this->_pageWidth; } if (!$this->_pageHeight) { $this->_pageHeight = $this->_height; } elseif (!$this->_height) { $this->_height = $this->_pageHeight; } $this->_width = min($this->_width, $this->_pageWidth); $this->_height = min($this->_height, $this->_pageHeight); if (isset($param['align']) && ($this->_width != $this->_pageWidth || $this->_height != $this->_pageHeight)) { switch (strtoupper($param['align'])) { case 'TOPLEFT': $this->_top = 0; $this->_left = 0; break; case 'TOPCENTER': $this->_top = 0; $this->_left = ($this->_pageWidth - $this->_width) / 2; break; case 'TOPRIGHT': $this->_top = 0; $this->_left = $this->_pageWidth - $this->_width; break; case 'LEFTCENTER': $this->_top = ($this->_pageHeight - $this->_height) / 2; $this->_left = 0; break; case 'CENTER': $this->_top = ($this->_pageHeight - $this->_height) / 2; $this->_left = ($this->_pageWidth - $this->_width) / 2; break; case 'RIGHTCENTER': $this->_top = ($this->_pageHeight - $this->_height) / 2; $this->_left = $this->_pageWidth - $this->_width; break; case 'LEFTBOTTOM': $this->_top = $this->_pageHeight - $this->_height; $this->_left = 0; break; case 'CENTERBOTTOM': $this->_top = $this->_pageHeight - $this->_height; $this->_left = ($this->_pageWidth - $this->_width) / 2; break; case 'RIGHTBOTTOM': $this->_top = $this->_pageHeight - $this->_height; $this->_left = $this->_pageWidth - $this->_width; break; } } $addPage = true; if (isset($param['ps']) && is_resource($param['ps'])) { $this->_ps =& $param['ps']; if (isset($param['add_page']) && $param['add_page'] === false) { $addPage = false; } } else { $this->_ps = ps_new(); if (isset($param['filename'])) { ps_open_file($this->_ps, $param['filename']); } else { ps_open_file($this->_ps); } ps_set_parameter($this->_ps, 'warning', 'true'); ps_set_info($this->_ps, 'Creator', isset($param['creator']) ? $param['creator'] : 'PEAR::Image_Canvas'); ps_set_info($this->_ps, 'Author', isset($param['author']) ? $param['author'] : 'Jesper Veggerby'); ps_set_info($this->_ps, 'Title', isset($param['title']) ? $param['title'] : 'Image_Canvas'); } if ($addPage) { ps_begin_page($this->_ps, $this->_pageWidth, $this->_pageHeight); } $this->_reset(); $this->_pslib = $this->_version(); }
<?php function usage() { printf("Usage: fontsample <list of fontnames>\n\n"); } $ps = ps_new(); if (!ps_open_file($ps, "fontsample.ps")) { print "Cannot open PostScript file\n"; exit; } ps_set_parameter($ps, "warning", "true"); ps_set_info($ps, "Creator", "fontsample.php"); ps_set_info($ps, "Author", "Uwe Steinmann"); ps_set_info($ps, "Title", "Font sample"); ps_set_info($ps, "BoundingBox", "0 0 596 842"); $colwidth = 25; $rowheight = 25; $leftmargin = 100; $bottommargin = 270; $fontsize = 10.0; $fontsamplesize = 12.0; if ($_SERVER["argc"] < 2) { usage(); exit(1); } ps_set_parameter($ps, "hyphenation", "true"); ps_set_parameter($ps, "hyphendict", "hyph_en.dic"); $psfont = ps_findfont($ps, "Helvetica", "", 0); printf("Creating %d pages\n", $_SERVER["argc"] - 1); for ($k = 1; $k < $_SERVER["argc"]; $k++) {
ps_setfont($p, $font, 12.0); ps_show_xy($p, $title, 10, EXAMPLE_BOX_HEIGHT - EXAMPLE_BOX_TITLE_HEIGHT + 5); ps_setlinewidth($p, 1.0); ps_setcolor($p, "stroke", "gray", 0.0, 0.0, 0.0, 0.0); ps_rect($p, 0, 0, EXAMPLE_BOX_WIDTH, EXAMPLE_BOX_HEIGHT); ps_stroke($p); ps_moveto($p, 0, EXAMPLE_BOX_HEIGHT - EXAMPLE_BOX_TITLE_HEIGHT); ps_lineto($p, EXAMPLE_BOX_WIDTH, EXAMPLE_BOX_HEIGHT - EXAMPLE_BOX_TITLE_HEIGHT); ps_stroke($p); } function end_example_box($p) { ps_restore($p); } $ps = ps_new(); if (!ps_open_file($ps, "D:/xampp/htdocs/xampp/external/ps/image.ps")) { print "Cannot open PostScript file\n"; exit; } ps_set_parameter($ps, "warning", "true"); ps_set_info($ps, "Creator", "image.php"); ps_set_info($ps, "Author", "Uwe Steinmann"); ps_set_info($ps, "Title", "Image examples"); ps_begin_page($ps, 596, 842); $psfont = ps_findfont($ps, "D:/xampp/htdocs/xampp/external/ps/Helvetica", "", 0); ps_setfont($ps, $psfont, 12.0); $x = 0; $y = 625; begin_example_box($ps, LEFT_BORDER + (EXAMPLE_BOX_WIDTH + 30) * $x++, $y, "Indexed image without alpha channel", $psfont); $psimage = ps_open_image_file($ps, "png", "indexed.png", NULL, 0); ps_place_image($ps, $psimage, 10, 30, 1.0);
<?php function usage() { printf("Usage: glyphlist <list of fontnames>\n\n"); } $ps = ps_new(); if (!ps_open_file($ps, "glyphlist.ps")) { print "Cannot open PostScript file\n"; exit; } ps_set_info($ps, "Creator", "glyphlist.php"); ps_set_info($ps, "Author", "Uwe Steinmann"); ps_set_info($ps, "Title", "List of glyphs"); ps_set_info($ps, "Keywords", "glyph, font"); ps_set_info($ps, "BoundingBox", "0 0 596 842"); $colwidth = 30; $rowheight = 30; $leftmargin = 70; $bottommargin = 270; $fontsize = 10.0; $fontsamplesize = 14.0; if ($_SERVER["argc"] < 2) { usage(); exit(1); } $psfont = ps_findfont($ps, "Helvetica", "", 0); printf("Creating %d pages\n", $_SERVER["argc"] - 1); for ($k = 1; $k < $_SERVER["argc"]; $k++) { printf("Creating page for %s\n", $_SERVER["argv"][$k]); $samplefont = ps_findfont($ps, $_SERVER["argv"][$k], "", 1);
ps_setfont($p, $font, 12.0); ps_show_xy($p, $title, 10, EXAMPLE_BOX_HEIGHT - EXAMPLE_BOX_TITLE_HEIGHT + 5); ps_setlinewidth($p, 1.0); ps_setcolor($p, "stroke", "gray", 0.0, 0.0, 0.0, 0.0); ps_rect($p, 0, 0, EXAMPLE_BOX_WIDTH, EXAMPLE_BOX_HEIGHT); ps_stroke($p); ps_moveto($p, 0, EXAMPLE_BOX_HEIGHT - EXAMPLE_BOX_TITLE_HEIGHT); ps_lineto($p, EXAMPLE_BOX_WIDTH, EXAMPLE_BOX_HEIGHT - EXAMPLE_BOX_TITLE_HEIGHT); ps_stroke($p); } function end_example_box($p) { ps_restore($p); } $ps = ps_new(); if (!ps_open_file($ps, "htdocs/xampp/external/ps/draw.ps")) { print "Cannot open PostScript file\n"; exit; } ps_set_parameter($ps, "warning", "true"); ps_set_info($ps, "Creator", "draw.php"); ps_set_info($ps, "Author", "Uwe Steinmann"); ps_set_info($ps, "Title", "Many examples"); $pstemplate = ps_begin_template($ps, 30.0, 30.0); ps_moveto($ps, 0, 0); ps_lineto($ps, 30, 30); ps_moveto($ps, 0, 30); ps_lineto($ps, 30, 0); ps_stroke($ps); ps_end_template($ps); $pspattern1 = ps_begin_pattern($ps, 10.0, 10.0, 10.0, 10.0, 1);
<?php $ps = ps_new(); if (!ps_open_file($ps, "hyperlinks.ps")) { print "Cannot open PostScript file\n"; exit; } ps_set_parameter($ps, "warning", "true"); ps_set_info($ps, "Creator", "hyperlinks.php"); ps_set_info($ps, "Author", "Uwe Steinmann"); ps_set_info($ps, "Title", "Creating Hyperlinks with pdfmarks"); $fontsize = 20.0; ps_begin_page($ps, 596, 842); $b1 = ps_add_bookmark($ps, "Content", 0, 0); ps_add_bookmark($ps, "First Page", $b1, 0); $psfont = ps_findfont($ps, "Helvetica", "", 0); ps_setfont($ps, $psfont, $fontsize); ps_set_value($ps, "leading", 14.0); ps_show_xy($ps, "This is a web link", 100, 100); $len = ps_stringwidth($ps, "This is a web link", $psfont, $fontsize); ps_add_weblink($ps, 100, 100, 100 + $len, 130, "http://www.mmk-hagen.de"); ps_show_xy($ps, "This is a pdf link to an external document", 100, 150); $len = ps_stringwidth($ps, "This is a pdf link to an external document", $psfont, $fontsize); ps_add_pdflink($ps, 100, 150, 100 + $len, 180, "test.pdf", 1, "fitpage"); ps_show_xy($ps, "This is a launch link", 100, 200); $len = ps_stringwidth($ps, "This is a launch link", $psfont, $fontsize); ps_add_launchlink($ps, 100, 200, 100 + $len, 230, "/usr/bin/gedit"); ps_show_xy($ps, "This is a pdf link within the document", 100, 250); $len = ps_stringwidth($ps, "This is a pdf link within the document", $psfont, $fontsize); ps_add_locallink($ps, 100, 250, 100 + $len, 280, 2, "fitpage"); ps_end_page($ps);
<?php $radius = 200; $margin = 20; $pagecount = 300; $ps = ps_new(); if (!ps_open_file($ps, "psclock.ps")) { print "Cannot open PostScript file\n"; exit; } ps_set_parameter($ps, "warning", "true"); ps_set_info($ps, "Creator", "psclock.php"); ps_set_info($ps, "Author", "Uwe Steinmann"); ps_set_info($ps, "Title", "Analog Clock"); while ($pagecount-- > 0) { ps_begin_page($ps, 2 * ($radius + $margin), 2 * ($radius + $margin)); ps_set_parameter($ps, "transition", "wipe"); ps_set_value($ps, "duration", 0.5); ps_translate($ps, $radius + $margin, $radius + $margin); ps_save($ps); ps_setcolor($ps, "both", "rgb", 0.0, 0.0, 1.0, 0.0); /* minute strokes */ ps_setlinewidth($ps, 2.0); for ($alpha = 0; $alpha < 360; $alpha += 6) { ps_rotate($ps, 6.0); ps_moveto($ps, $radius, 0.0); ps_lineto($ps, $radius - $margin / 3, 0.0); ps_stroke($ps); } ps_restore($ps); ps_save($ps);