<?php
/** * This example exports the DOM tree of any given web site's HTML code to an SVG image. * * Just direct your browser to this file. */
use Utils\Autoload\Autoloader; use ReingoldTilford\Algorithms\ReingoldTilfordAlgorithm; use ReingoldTilford\Models\DomTreeModel; use ReingoldTilford\Plotters\Plotter; use ReingoldTilford\Styles\TreeStyle; use Utils\Graphics2D\DrawingPanes\SvgDrawingPane; use Utils\Geom\Dimension; use Utils\Color\RgbColor;
require_once __DIR__.'/../app/bootstrap.inc';
header("Content-type: image/svg+xml");
$htmlBody = getHtmlBodyElement('http://www.phpclasses.org/');
// get the default style for a tree ... $style = new TreeStyle(); // ... but do a bit of customisation $style->shapeStyle->setWidth(48); $style->shapeStyle->setHeight(30); $style->shapeStyle->setColor(new RgbColor(232, 232, 232)); $style->shapeStyle->border->setWidth(3); $style->shapeStyle->border->setColor(new RgbColor(50, 140, 198)); $style->edgeStyle->setWidth(3);
// get a new instance of the algorithm $algorithm = new ReingoldTilfordAlgorithm();
// get the model for the DOM tree, so that the algorithm can traverse it $model = new DomTreeModel($htmlBody);
// calculate the layout of the tree $layout = $algorithm->getLayout($model, $style->orientation)->normalize();
// pass it to the plotter $plotter = new Plotter($model, $layout, null, null, null);
// create a new SVG document $document = new SvgDrawingPane($layout->getDimension($style));
// plot the tree onto the document $plotter->plot($style, $document);
// print the document echo $document->save();
/** * This helper function gets the body element from a given website * * Obviously, this call can fail, but for mere demonstration purposes, any error handling has been left out for brevity. * * @param type $url * @return type */ function getHtmlBodyElement($url) { error_reporting(0); $domDocument = new DOMDocument();
$domDocument->loadHTML(file_get_contents($url)); error_reporting(E_ALL | E_STRICT);
return $domDocument->getElementsByTagName('body')->item(0); }
|