loadXML($xmlString); # Get a list of maps $input = $document->getElementsByTagName('input')->item(0); $extent = split(' ',$input->getAttribute('mapext')); $imagesize = array($input->getAttribute('width'), $input->getAttribute('height')); $UniqueHandle = 'print_output_'.time(); # Takes in the XML document and writes the appropriate image to the disk print ""; print "Available Printing Formats:
"; # These can be used to diagnose function availability #checkFunction('Render Image', 'renderImage'); #checkFunction('Render HTML', 'renderHTML'); #checkFunction('Render PDF', 'renderPDF'); # This gets used by both pure image output and the HTML output $ImageHandle = $UniqueHandle.'.jpg'; $TempImage = $TEMP_DIRECTORY.$ImageHandle; if(!function_exists('renderImage')) { appError('The "renderImage" function is undefined. No other printing options will function without it!'); } else { # Basic Printing Option renderImage($document, $TempImage, $imagesize[0], $imagesize[1], $extent[0], $extent[1], $extent[2], $extent[3]); if($PRINT_SHOW_IMAGE_LINK) { print "Open Printable Image in New Window"; } } if(function_exists('printHTML')) { $HTMLHandle = $UniqueHandle.'.html'; printHTML($document, $TEMP_DIRECTORY.$HTMLHandle, $TEMP_WEB.$ImageHandle); print "

Open Printable HTML Page in New Window"; } if(function_exists('printPDF')) { $PDFHandle = $UniqueHandle; printPDF($document, $TEMP_DIRECTORY.$PDFHandle); print "

Open Printable PDF Page in New Window"; } print ""; function checkFunction($title, $fname) { print $title.": "; if(function_exists($fname)) { print "ON"; } else { print "OFF"; } print "
"; } # # Generates an image based on an XML post request and writes it to the # the file specified in outputFileName # function renderImage($xml, $outputFileName, $width, $height, $minx, $miny, $maxx, $maxy, $quality=1, $preserveScale=false) { global $TEMP_DIRECTORY; # This creates a temporary image for building and output. $printImage = imagecreatetruecolor($width, $height); $colorWhite = imagecolorallocate($printImage, 255, 255, 255); imagefill($printImage, 0, 0, $colorWhite); $maps = $xml->getElementsByTagName('map'); $minx = (float)($minx); $maxx = (float)($maxx); $miny = (float)($miny); $maxy = (float)($maxy); if($preserveScale) { # Step Uno: Calculate the scales, choose the "densist" $scale = ($maxx - $minx) / $width; $scaleY = ($maxy - $miny) / $height; if($scaleY < $scale) { $scale = $scaleY; } # Step Zwei: Recalculate the extent $centerX = ($maxx + $minx) / 2.0; $centerY = ($maxy + $miny) / 2; $minx = $centerX - $scale * $width; $maxx = $centerX + $scale * $width; $miny = $centerY - $scale * $height; $maxy = $centerY + $scale * $height; } $majorKeys = array(); $majorKeys['WIDTH'] = $width; $majorKeys['HEIGHT'] = $height; $majorKeys['MINX'] = $minx; $majorKeys['MINY'] = $miny; $majorKeys['MAXX'] = $maxx; $majorKeys['MAXY'] = $maxy; $majorKeys['EXTENT'] = $minx.'+'.$miny.'+'.$maxx.'+'.$maxy; $majorKeys['EXTENTS'] = $majorKeys['EXTENT']; $majorKeys['SIZE'] = $width.'+'.$height; for($i = $maps->length - 1; $i >= 0; $i--) { $map = $maps->item($i); # If it doesn't have a title, don't bother printing it if($map->hasAttribute('title')) { $file = $map->getElementsByTagName('file')->item(0)->nodeValue; # This accounts for the random different possible settings # Relative URL if(!(strpos($file, 'relative://') === false)) { # Absolute URL } elseif (!(strpos($file, 'http://') === false)) { $urlInfo = parse_url($file); if(!(strpos($urlInfo['query'], "WMS") === false)) { $params = array(); $urlSplit = split('\?', $file); parse_str($urlSplit[1], $params); $mapfile = ms_newMapObj('resources/printWMS.map'); $mapfile->selectOutputFormat("JPEG"); $mapfile->web->set("imagepath", $TEMP_DIRECTORY); $mapfile->setSize($width,$height); $mapfile->setExtent($minx, $miny, $maxx, $maxy); $wmsLayer = $mapfile->getLayerByName('wms_temp'); $wmsLayer->set("connection", $urlSplit[0].'?'); $wmsLayer->setMetaData('wms_srs', $params['SRS']); $wmsLayer->setMetaData('wms_name', $params['LAYERS']); $wmsLayer->setMetaData('wms_server_version', $params['VERSION']); $image = $mapfile->prepareImage(); $image = $mapfile->draw(); $image->saveImage($outputFileName); $image = imagecreatefromjpeg($outputFileName); ImageCopyResized($printImage, $image, 0,0,0,0, $width, $height, ImageSX($image), ImageSY($image)); } else { $dlFileName = $outputFileName.'2'; foreach($majorKeys as $key=>$value) { $file = str_replace('%'.$key.'%', $value, $file); } $file = str_replace(' ','+',$file); $ch = curl_init($file); $outfile = fopen($dlFileName, "w"); curl_setopt($ch, CURLOPT_FILE, $outfile); curl_setopt($ch, CURLOPT_HEADER, 0); curl_exec($ch); $mimetype = curl_getinfo($ch,CURLINFO_CONTENT_TYPE); curl_close($ch); fclose($outfile); if(!(strpos($mimetype,'png') === false)) { $image = imagecreatefrompng($dlFileName); } elseif(!(strpos($mimetype,'gif') === false)) { $image = imagecreatefromgif($dlFileName); } elseif (!(strpos($mimetype,'jpeg') === false)) { $image = imagecreatefromjpeg($dlFileName); } ImageCopyResized($printImage, $image, 0,0,0,0, $width, $height, ImageSX($image), ImageSY($image)); } # This *should* be a reference to a mapfile } else { $mapfile = ms_newMapObj(getPath($file)); $mapfile->setSize($width, $height); $mapfile->setExtent($minx, $miny, $maxx, $maxy); # G'head and figure out any of the "special" parameters $params = $map->getElementsByTagName('param'); $drawQueryMap = false; $queryShape = false; $itemQueryName = false; $itemQueryValue = false; $itemQueryLayer = false; foreach($params as $param) { $pName = $param->getAttribute('name'); if($pName == 'mapshape') { # Create the shape and query the image. $points = rtrim($param->getAttribute('value')); $points = split(' ', $points); $shapeLine = ms_newLineObj(); for($p = 0; $p < count($points); $p+=2) { $point = ms_newPointObj(); $point->setXY($points[$p], $points[$p+1]); $shapeLine->add($point); } $shape = ms_newShapeObj(MS_SHAPE_POLYGON); $shape->add($shapeLine); $queryShape = $shape; } # These are the three mapserver directives for enabling layers if($pName == 'layer' or $pName == 'qlayer' or $pName == 'layers') { $layerNames = split(' ', $param->getAttribute('value')); # Occasionally "layers=" will be set to null # this checks to make sure that the value is an actual list. if(count($layerNames) > 0 and $layerNames[0] != "") { for($l = 0; $l < $mapfile->numlayers; $l++) { $layer = $mapfile->getLayer($l); $layerName = $layer->name; $layerOn = false; foreach($layerNames as $testName) { if($testName == $layerName or $layer->group == $layerName) { $layerOn = true; } } if($layerOn) { $layer->set("status", MS_DEFAULT); } else { $layer->set("status", MS_OFF); } } } } if($pName == 'qitem') { $itemQueryName = $param->getAttribute('value'); } if($pName == 'qstring') { $itemQueryValue = $param->getAttribute('value'); } if($pName == 'qlayer') { $itemQueryLayer = $param->getAttribute('value'); } } if($quality > 1) { for($l = 0; $l < $mapfile->numlayers; $l++) { $layer = $mapfile->getLayer($l); for($c = 0; $c < $layer->numclasses; $c++) { $class = $layer->getClass($c); if($class->label->size > MS_GIANT) { $class->label->set("maxsize", $class->label->maxsize * $quality); $class->label->set("size", $class->label->size * $quality); } elseif($class->label->size > 0) { $class->label->set("size", $class->label->size + $quality); } for($s = 0; $s < $class->numstyles; $s++) { $style = $class->getStyle($s); if($style->size > 0) { # $style->set("maxsize", $style->maxsize * $quality); # $style->set("size", $style->size * $quality); } } } } } $image = $mapfile->prepareImage(); # Draw the query map as required. if($queryShape) { $mapfile->queryByShape($queryShape); $image = $mapfile->drawQuery(); } else if($itemQueryName && $itemQueryValue && $itemQueryLayer) { $layer = $mapfile->getLayerByName($itemQueryLayer); $layer->queryByAttributes($itemQueryName, $itemQueryValue, MS_SINGLE); $layer->open(); $layer->close(); $image = $mapfile->drawQuery(); } else { $image = $mapfile->draw(); } $mimetype = $mapfile->outputformat->mimetype; $image->saveImage($outputFileName); if(!(strpos($mimetype,'png') === false)) { $image = imagecreatefrompng($outputFileName); } elseif(!(strpos($mimetype,'gif') === false)) { $image = imagecreatefromgif($outputFileName); } elseif (!(strpos($mimetype,'jpeg') === false)) { $image = imagecreatefromjpeg($outputFileName); } else { # Generate an error } $opacity = 100; if($map->hasAttribute('opacity')) { $opacity = $map->getAttribute('opacity'); } imagecopymerge($printImage, $image, 0, 0, 0, 0, ImageSX($image), ImageSY($image), $opacity); } } } imagejpeg($printImage, $outputFileName); } ?>