millimeter in 72 dpi function px2mm($px) { return $px * 25.4/72; } function txtentities($html) { $trans = get_html_translation_table(HTML_ENTITIES); $trans = array_flip($trans); return strtr($html, $trans); } //////////////////////////////////// class PDF extends PDF_Chinese { //variables of html parser var $B; var $I; var $U; var $HREF; var $inCell; var $fontList; var $issetfont; var $issetcolor; function Header() { global $mosConfig_sitename; //Logo //$this->Image('acroread.jpg',10,8,0,0); //$this->SetFont('Big5-hw','B',15); //Move to the right //$this->Cell(80); //Title //$this->Cell(30,10,$mosConfig_sitename,0,0,'C'); //Line break //$this->Line(2,20,208,20); //$this->Ln(20); } function Footer() { global $mosConfig_live_site; $this->Line(2,280,208,280); //Position at 1.5 cm from bottom $this->SetY(-15); //Arial italic 8 $this->SetFont('Arial','I',8); //Page number //$this->Cell(0,10,'Power by Mambo Open Source Page '.$this->PageNo().'/{nb} '.$mosConfig_live_site,0,0,'C'); //$this->Cell(0,10,'Power by Mambo Open Source',0,0,'L'); $this->Cell(0,10,'Page '.$this->PageNo().'/{nb}',0,0,'C'); $this->Cell(0,10,$mosConfig_live_site,0,0,'R'); } function PDF($orientation = 'P', $unit = 'mm', $format = 'A4') { //Call parent constructor $this->PDF_Chinese($orientation, $unit, $format); //Initialization $this->B = 0; $this->I = 0; $this->U = 0; $this->HREF = ''; $this->inCell = 0; $this->inTable = 0; $this->fontlist = array("arial", "times", "courier", "helvetica", "symbol"); $this->issetfont = false; $this->issetcolor = false; } ////////////////////////////////////// //html parser function WriteHTML($html) { //Messey but needed global $_LANG; $html = str_replace("
  • ", "
    -", $html); $html = str_replace("
  • ", "
    -", $html); $html = str_replace("
  • ", "
    ", $html); $html = str_replace("", "
    ", $html); $html = str_replace("", "
    ", $html); $html = str_replace("", "
    ", $html); $html=str_replace(" ", " ", $html); //$html = addslashes($html); //hardcode to chage big5 magic words...==" //$html = big5_messy_str_replace($html); //$html = str_replace("\\\"","\"",$html); $html = str_replace("Close Window", "
    ", $html); $html = strip_tags($html, "


    "); //remove all unsupported tags $html = str_replace("\n", '', $html); $a = preg_split('/<(.*)>/U', $html, -1, PREG_SPLIT_DELIM_CAPTURE); //explodes the string foreach($a as $i => $e) { if ($i%2 == 0) { //Text if ($this->inTable) { if ($this->inCell) { //$this->Cell(40, 6, txtentities($e), 5); $this->Cell(40, 6, txtentities($e),1); //$this->Cell(40, 6, $e,1); } } else { if ($this->HREF) { $this->PutLink($this->HREF, $e); } else { //$this->Write(5, addslashes(txtentities($e)))); //$this->Write(5, txtentities($e)); $this->Write(5, $e); } } } else { //Tag if ($e { 0 } == '/') $this->CloseTag(strtoupper(substr($e, 1))); else { //Extract attributes $a2 = explode(' ', $e); $tag = strtoupper(array_shift($a2)); $attr = array(); foreach($a2 as $v) if (ereg('^([^=]*)=["\']?([^"\']*)["\']?$', $v, $a3)) $attr[strtoupper($a3[1])] = $a3[2]; $this->OpenTag($tag, $attr); } } } } function OpenTag($tag, $attr) { // print_r ($tag); //Opening tag switch($tag) { case 'STRONG': $this->SetStyle('B', true); break; case 'EM': $this->SetStyle('I', true); break; case 'B': case 'I': case 'U': $this->SetStyle($tag, true); break; case 'A': $this->HREF = $attr['HREF']; break; case 'IMG': if (isset($attr['SRC']) and (isset($attr['WIDTH']) or isset($attr['HEIGHT']))) { if (!isset($attr['WIDTH'])) $attr['WIDTH'] = 0; if (!isset($attr['HEIGHT'])) $attr['HEIGHT'] = 0; $this->ln(2); $this->Image($attr['SRC'], $this->GetX(), $this->GetY(), px2mm($attr['WIDTH']), px2mm($attr['HEIGHT'])); $xy = (getImageSize ($attr['SRC'])); $height = explode ("=", $xy[3]); $moveY = str_replace("\"", "", $height[2]); $this->ln(px2mm($moveY)+1); // Cant work out how to wrap - so just put text under } break; case 'TABLE': $this->inTable = 1; break; case 'TR': $this->Ln(6); break; case 'TD': $this->inCell = 1; break; case 'BLOCKQUOTE': case 'BR': $this->Ln(5); break; case 'P': $this->Ln(10); break; case 'FONT': if (isset($attr['COLOR']) and $attr['COLOR'] != '') { $coul = hex2dec($attr['COLOR']); $this->SetTextColor($coul['R'], $coul['G'], $coul['B']); $this->issetcolor = true; } if (isset($attr['FACE']) and in_array(strtolower($attr['FACE']), $this->fontlist)) { $this->SetFont(strtolower($attr['FACE'])); $this->issetfont = true; } break; } } function CloseTag($tag) { //Closing tag if ($tag == 'STRONG') $tag = 'B'; if ($tag == 'EM') $tag = 'I'; if ($tag == 'B' or $tag == 'I' or $tag == 'U') $this->SetStyle($tag, false); if ($tag == 'A') $this->HREF = ''; if ($tag == 'FONT') { if ($this->issetcolor == true) { $this->SetTextColor(0); } if ($this->issetfont) { $this->SetFont('arial'); $this->issetfont = false; } } switch ($tag) { case 'TABLE': $this->inTable = 0; $this->Ln(6); break; case 'TD': $this->inCell = 0; break; } } function SetStyle($tag, $enable) { //Modify style and select corresponding font $this->$tag += ($enable ? 1 : -1); $style = ''; foreach(array('B', 'I', 'U') as $s) if ($this->$s > 0) $style .= $s; $this->SetFont('', $style); } function PutLink($URL, $txt) { //Put a hyperlink $this->SetTextColor(0, 0, 255); $this->SetStyle('U', true); $this->Write(5, $txt, $URL); $this->SetStyle('U', false); $this->SetTextColor(0); } } //end of class ?>