PDF converter
* distributed under the OSL-3.0 License
*
* @package Html2pdf
* @author Laurent MINGUET
* @copyright 2017 Laurent MINGUET
*/
namespace Spipu\Html2Pdf\Tag;
use Spipu\Html2Pdf\Exception\HtmlParsingException;
use Spipu\Html2Pdf\SvgDrawer;
/**
* Abstract Default Tag
* used by all the svg tags
*/
abstract class AbstractSvgTag extends AbstractTag
{
/**
* @var SvgDrawer
*/
protected $svgDrawer;
/**
* AbstractSvgTag constructor.
*
* @param SvgDrawer $svgDrawer
*/
public function __construct(SvgDrawer $svgDrawer)
{
parent::__construct();
$this->svgDrawer = $svgDrawer;
}
/**
* @inheritdoc
*/
public function open($properties)
{
$this->openSvg($properties);
$this->drawSvg($properties);
$this->closeSvg();
return true;
}
/**
* @inheritdoc
*/
public function close($properties)
{
return true;
}
/**
* Open the SVG tag
*
* @param array $properties
* @throws HtmlParsingException
*/
protected function openSvg($properties)
{
if (!$this->svgDrawer->isDrawing()) {
$e = new HtmlParsingException('The asked ['.$this->getName().'] tag is not in a [DRAW] tag');
$e->setInvalidTag($this->getName());
throw $e;
}
$transform = null;
if (array_key_exists('transform', $properties)) {
$transform = $this->svgDrawer->prepareTransform($properties['transform']);
}
$this->pdf->doTransform($transform);
$this->parsingCss->save();
}
/**
* Close the SVG tag
*/
protected function closeSvg()
{
$this->pdf->undoTransform();
$this->parsingCss->load();
}
/**
* Draw the SVG tag
*
* @param array $properties
*
* @return void
*/
abstract protected function drawSvg($properties);
}