array( array( 'name' => = "Xxxxxxxx xxxxxxxxxxxx xxxxxxxxxx xxxxxxx Xxxxxxxx xxxxxxxxxxxx xxxxxxxxxx xxxxxxx"; ), array( 'name' => = "Xxxxxxxx xxxxxxxxxxxx xxxxxxxxxx xxxxxxx Xxxxxxxx xxxxxxxxxxxx xxxxxxxxxx xxxxxxx"; ), array( 'name' => = "Xxxxxxxx xxxxxxxxxxxx xxxxxxxxxx xxxxxxx Xxxxxxxx xxxxxxxxxxxx xxxxxxxxxx xxxxxxx"; ), ); $pdf = XML_SvgToPDF::construct(dirname(__FILE__).'/test.svg',$data); $pdf->output(); expects an svg file (probably made by sodipodi) a block is the group, a) it has a text component with dynamic=address rows=7 cols=3 b) a non-printable rectangle (which is the bounding box) c) some text {xxxx}{yyyy} which is replaced with address[0....][xxxx] = 'somevalue; address[0....][yyyy] = 'somevalue; */ require_once 'XML/Tree/Morph.php'; require_once 'XML/SvgToPdfAlt/Base.php'; // current options for generated file.. $GLOBALS['_XML_SVGTOPDF']['options'] = array( 'debug' => 0, ); class XML_SvgToPDFAlt { var $language; static function debug($s,$e=0) { if (!$GLOBALS['_XML_SVGTOPDF']['options']['debug']) { return; } echo "
".print_R($s,true). "
"; if ($e) { exit; } } static function construct($svg, $data=array()) { $t = new XML_SvgToPDFAlt; $t->language = @$data['language']; if (empty($svg)) { trigger_error(__CLASS__.':construct called without svg', E_USER_ERROR); } $x = new XML_Tree_Morph( $svg, array( 'debug' => 0, 'filter' => array( 'svg' => array($t, 'buildObject'), 'image' => array($t, 'buildObject'), 'text' => array($t, 'buildObject'), 'tspan' => array($t, 'buildObject'), 'rect' => array($t, 'buildObject'), 'g' => array($t, 'buildObject'), 'path' => array($t, 'buildObject'), 'sodipodi:namedview' => array($t, 'buildNull'), 'defs' => array($t, 'buildNull'), 'metadata' => array($t, 'buildNull'), ) ) ); $tree = $x->getTreeFromFile(); ///echo '
'.htmlspecialchars(print_r($tree,true));exit;
        
        $tree = $t->buildobject($tree);
 //echo '
'.htmlspecialchars(print_r($tree,true));
        //echo "
";print_r($tree);exit;
        $orientation =  ($tree->width > $tree->height) ? 'L' : 'P';

        $GLOBALS['_XML_SVGTOPDF']['options']['file'] = $svg;

        if ($data['language'] == 'big5') {
           
            require_once 'FpdfAlt/Chinese.php';

            $pdf=new FpdfAlt_Chinese($orientation ,'mm','A4');
            $pdf->AddGBFont();
            $pdf->AddBig5Font();
            $pdf->AddUniCNShwFont(); 
            $pdf->open();            
        } else {
            require_once 'Fpdf.php'; 

            $pdf=new FPDF($orientation ,'mm','A4');
            $pdf->open();
        }

        $pdf->setAutoPageBreak(false);
        $pdf->AliasNbPages();
        // convert data to array.
        if (is_object($data)) {
            $data = (array) $data;
        }
        // assoc. array of key => no of fields per page.
        $perPage = $tree->calcPerPage();
        
        // no dynamic blocks:
        if (!$perPage || empty($data)) {
            $pdf->addPage();
            $tree->writePDF($pdf,$data);
            $t->debug($tree);
         
            return $pdf;
        }
        
        // build blocks of data for each page.
        $haveData = true;
        $page = 0;
        while (true == $haveData ) {
            $page_data = $data;
            $haveData = false;
            foreach($perPage as $k=>$v) {
                if (!$data[$k]) {
                    $page_data[$k] = array();
                    continue;
                }
                $haveData = true;
                $page_data[$k] = array_splice ( $data[$k], 0,$v);
            }
            $page++;
            if (!$haveData) {
                break;
            }
                
            $t->debug("PAGE $page");
            $pdf->addPage();
           // echo '
'.htmlspecialchars(print_r($page_data,true));
            $tree->writePDF($pdf,$page_data);
        }
        
        $t->debug($tree, true);
        return $pdf;
    }
    
    function buildNull($node) {
        return;
    }
    function buildObject($node) {
        $class = 'XML_SvgToPDFAlt_'.$node->name;
        
        if (!empty($node->content) && strlen(trim($node->content)) && (@$this->language)) {
            $node->language = $this->language;
 
        }
 

        //echo "look for $class?";
        if (!class_exists($class) && !empty($node->name)) {
            // try loading it..
            $file = dirname(__FILE__) . '/SvgToPdfAlt/'.ucfirst(strtolower($node->name)). '.php';
            $this->debug("loading  $file");
            if (file_exists($file)) {
                require_once 'XML/SvgToPdfAlt/'.ucfirst(strtolower($node->name)) . '.php';
            }
        }
        // now if it doesnt exist..
        if (!class_exists($class)) {
            $this->debug("can not find $class");
           $class = 'XML_SvgToPDFAlt_Base';
        }
        //echo '
';print_r($node);
        
        $r = new $class;
        $r->fromNode($node);
        return $r;
    }
    
    


}