/** * @param ZendPage $page * @param Viewport $viewport * @param float $x * @param float $y * @param float $width * @param float $height * @param bool $keepRatio */ private function translateAndClipToViewport(ZendPage $page, Viewport $viewport, $x, $y, $width, $height, $keepRatio = true) { $scaleX = $width / $viewport->getWidth(); $scaleY = $height / $viewport->getHeight(); $mx = -$viewport->getX(); $my = -$viewport->getY(); if ($keepRatio) { if ($scaleX < $scaleY) { $scaleY = $scaleX; // center viewport $my += ($height / $scaleY - $viewport->getHeight()) / 2; } else { $scaleX = $scaleY; // center viewport $mx += ($width / $scaleX - $viewport->getWidth()) / 2; } } // translate origin to $x/$y $page->translate($x, $y); // scale to viewport $page->scale($scaleX, $scaleY); // translate origin to (centered) $viewport origin $page->translate($mx, $my); // clip viewport $page->clipRectangle($viewport->getX(), $viewport->getY(), $viewport->getX() + $viewport->getHeight(), $viewport->getY() + $viewport->getWidth()); }
/** * @param float $width * @param float $height * @param Viewport $viewport * @param bool $keepRation * * @return SimpleXMLElement * @internal param Graphic $graphic * */ private function createSVG($width, $height, Viewport $viewport, $keepRation) { $svg = new SimpleXMLElement("<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\"></svg>"); $svg->addAttribute("width", $width . "cm"); $svg->addAttribute("height", $height . "cm"); $svg->addAttribute("viewBox", sprintf("%f %f %f %f", $viewport->getX(), $viewport->getY(), $viewport->getWidth(), $viewport->getHeight())); if (!$keepRation) { $svg->addAttribute("preserveAspectRatio", "none"); } return $svg; }