From e2a22b2b29af1ef9c846fed97e8ec5aabd19ffe9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Fri, 30 Mar 2007 11:27:13 +0000 Subject: [PATCH] =?UTF-8?q?FAS:=20-=20Erstellung=20von=20Lehrauftr=C3=A4ge?= =?UTF-8?q?n=20-=20xslfo2pdf?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- content/lvplanung/lehrauftrag.php | 267 +++ .../lvplanung/lehrveranstaltungoverlay.js.php | 2 +- include/xslfo2pdf/examples/basic/border.fo | 188 ++ include/xslfo2pdf/examples/basic/link.fo | 145 ++ include/xslfo2pdf/examples/basic/normal.fo | 149 ++ include/xslfo2pdf/examples/basic/readme.fo | 1341 ++++++++++++++ include/xslfo2pdf/examples/basic/simple.fo | 99 + include/xslfo2pdf/examples/basic/table.fo | 504 +++++ include/xslfo2pdf/examples/svg/basic.xml | 33 + include/xslfo2pdf/examples/svg/circle.xml | 21 + include/xslfo2pdf/examples/svg/path.xml | 58 + include/xslfo2pdf/examples/svg/transform.xml | 52 + .../xslfo2pdf/examples/xslfo2pdf_example.xml | 70 + include/xslfo2pdf/fo_block.php | 194 ++ include/xslfo2pdf/fo_core.php | 364 ++++ include/xslfo2pdf/fo_instream.php | 44 + include/xslfo2pdf/fo_layout.php | 597 ++++++ include/xslfo2pdf/fo_svg.php | 153 ++ include/xslfo2pdf/fo_table.php | 275 +++ include/xslfo2pdf/fpdf/font/courier.php | 7 + include/xslfo2pdf/fpdf/font/helvetica.php | 15 + include/xslfo2pdf/fpdf/font/helveticab.php | 15 + include/xslfo2pdf/fpdf/font/helveticabi.php | 15 + include/xslfo2pdf/fpdf/font/helveticai.php | 15 + .../xslfo2pdf/fpdf/font/makefont/cp1250.map | 251 +++ .../xslfo2pdf/fpdf/font/makefont/cp1251.map | 255 +++ .../xslfo2pdf/fpdf/font/makefont/cp1252.map | 251 +++ .../xslfo2pdf/fpdf/font/makefont/cp1253.map | 239 +++ .../xslfo2pdf/fpdf/font/makefont/cp1254.map | 249 +++ .../xslfo2pdf/fpdf/font/makefont/cp1255.map | 233 +++ .../xslfo2pdf/fpdf/font/makefont/cp1257.map | 244 +++ .../xslfo2pdf/fpdf/font/makefont/cp1258.map | 247 +++ .../xslfo2pdf/fpdf/font/makefont/cp874.map | 225 +++ .../fpdf/font/makefont/iso-8859-1.map | 256 +++ .../fpdf/font/makefont/iso-8859-11.map | 248 +++ .../fpdf/font/makefont/iso-8859-15.map | 256 +++ .../fpdf/font/makefont/iso-8859-16.map | 256 +++ .../fpdf/font/makefont/iso-8859-2.map | 256 +++ .../fpdf/font/makefont/iso-8859-4.map | 256 +++ .../fpdf/font/makefont/iso-8859-5.map | 256 +++ .../fpdf/font/makefont/iso-8859-7.map | 250 +++ .../fpdf/font/makefont/iso-8859-9.map | 256 +++ .../xslfo2pdf/fpdf/font/makefont/koi8-r.map | 256 +++ .../xslfo2pdf/fpdf/font/makefont/koi8-u.map | 256 +++ .../xslfo2pdf/fpdf/font/makefont/makefont.php | 416 +++++ include/xslfo2pdf/fpdf/font/symbol.php | 15 + include/xslfo2pdf/fpdf/font/times.php | 15 + include/xslfo2pdf/fpdf/font/timesb.php | 15 + include/xslfo2pdf/fpdf/font/timesbi.php | 15 + include/xslfo2pdf/fpdf/font/timesi.php | 15 + include/xslfo2pdf/fpdf/font/zapfdingbats.php | 15 + include/xslfo2pdf/fpdf/fpdf.php | 1649 +++++++++++++++++ include/xslfo2pdf/fpdf/myfpdf.php | 591 ++++++ include/xslfo2pdf/index.php | 93 + include/xslfo2pdf/svg_circle.php | 39 + include/xslfo2pdf/svg_ellipse.php | 41 + include/xslfo2pdf/svg_g.php | 80 + include/xslfo2pdf/svg_line.php | 39 + include/xslfo2pdf/svg_path.php | 362 ++++ include/xslfo2pdf/svg_polygon.php | 43 + include/xslfo2pdf/svg_rect.php | 40 + include/xslfo2pdf/svg_text.php | 60 + include/xslfo2pdf/xslfo2pdf.php | 132 ++ include/xslfo2pdf/xslfo2pdf_example.php | 61 + 64 files changed, 13354 insertions(+), 1 deletion(-) create mode 100644 content/lvplanung/lehrauftrag.php create mode 100644 include/xslfo2pdf/examples/basic/border.fo create mode 100644 include/xslfo2pdf/examples/basic/link.fo create mode 100644 include/xslfo2pdf/examples/basic/normal.fo create mode 100644 include/xslfo2pdf/examples/basic/readme.fo create mode 100644 include/xslfo2pdf/examples/basic/simple.fo create mode 100644 include/xslfo2pdf/examples/basic/table.fo create mode 100644 include/xslfo2pdf/examples/svg/basic.xml create mode 100644 include/xslfo2pdf/examples/svg/circle.xml create mode 100644 include/xslfo2pdf/examples/svg/path.xml create mode 100644 include/xslfo2pdf/examples/svg/transform.xml create mode 100644 include/xslfo2pdf/examples/xslfo2pdf_example.xml create mode 100644 include/xslfo2pdf/fo_block.php create mode 100644 include/xslfo2pdf/fo_core.php create mode 100644 include/xslfo2pdf/fo_instream.php create mode 100644 include/xslfo2pdf/fo_layout.php create mode 100644 include/xslfo2pdf/fo_svg.php create mode 100644 include/xslfo2pdf/fo_table.php create mode 100644 include/xslfo2pdf/fpdf/font/courier.php create mode 100644 include/xslfo2pdf/fpdf/font/helvetica.php create mode 100644 include/xslfo2pdf/fpdf/font/helveticab.php create mode 100644 include/xslfo2pdf/fpdf/font/helveticabi.php create mode 100644 include/xslfo2pdf/fpdf/font/helveticai.php create mode 100644 include/xslfo2pdf/fpdf/font/makefont/cp1250.map create mode 100644 include/xslfo2pdf/fpdf/font/makefont/cp1251.map create mode 100644 include/xslfo2pdf/fpdf/font/makefont/cp1252.map create mode 100644 include/xslfo2pdf/fpdf/font/makefont/cp1253.map create mode 100644 include/xslfo2pdf/fpdf/font/makefont/cp1254.map create mode 100644 include/xslfo2pdf/fpdf/font/makefont/cp1255.map create mode 100644 include/xslfo2pdf/fpdf/font/makefont/cp1257.map create mode 100644 include/xslfo2pdf/fpdf/font/makefont/cp1258.map create mode 100644 include/xslfo2pdf/fpdf/font/makefont/cp874.map create mode 100644 include/xslfo2pdf/fpdf/font/makefont/iso-8859-1.map create mode 100644 include/xslfo2pdf/fpdf/font/makefont/iso-8859-11.map create mode 100644 include/xslfo2pdf/fpdf/font/makefont/iso-8859-15.map create mode 100644 include/xslfo2pdf/fpdf/font/makefont/iso-8859-16.map create mode 100644 include/xslfo2pdf/fpdf/font/makefont/iso-8859-2.map create mode 100644 include/xslfo2pdf/fpdf/font/makefont/iso-8859-4.map create mode 100644 include/xslfo2pdf/fpdf/font/makefont/iso-8859-5.map create mode 100644 include/xslfo2pdf/fpdf/font/makefont/iso-8859-7.map create mode 100644 include/xslfo2pdf/fpdf/font/makefont/iso-8859-9.map create mode 100644 include/xslfo2pdf/fpdf/font/makefont/koi8-r.map create mode 100644 include/xslfo2pdf/fpdf/font/makefont/koi8-u.map create mode 100644 include/xslfo2pdf/fpdf/font/makefont/makefont.php create mode 100644 include/xslfo2pdf/fpdf/font/symbol.php create mode 100644 include/xslfo2pdf/fpdf/font/times.php create mode 100644 include/xslfo2pdf/fpdf/font/timesb.php create mode 100644 include/xslfo2pdf/fpdf/font/timesbi.php create mode 100644 include/xslfo2pdf/fpdf/font/timesi.php create mode 100644 include/xslfo2pdf/fpdf/font/zapfdingbats.php create mode 100644 include/xslfo2pdf/fpdf/fpdf.php create mode 100644 include/xslfo2pdf/fpdf/myfpdf.php create mode 100644 include/xslfo2pdf/index.php create mode 100644 include/xslfo2pdf/svg_circle.php create mode 100644 include/xslfo2pdf/svg_ellipse.php create mode 100644 include/xslfo2pdf/svg_g.php create mode 100644 include/xslfo2pdf/svg_line.php create mode 100644 include/xslfo2pdf/svg_path.php create mode 100644 include/xslfo2pdf/svg_polygon.php create mode 100644 include/xslfo2pdf/svg_rect.php create mode 100644 include/xslfo2pdf/svg_text.php create mode 100644 include/xslfo2pdf/xslfo2pdf.php create mode 100644 include/xslfo2pdf/xslfo2pdf_example.php diff --git a/content/lvplanung/lehrauftrag.php b/content/lvplanung/lehrauftrag.php new file mode 100644 index 000000000..02dc6e9bd --- /dev/null +++ b/content/lvplanung/lehrauftrag.php @@ -0,0 +1,267 @@ +, + * Andreas Oesterreicher and + * Rudolf Hangl . + */ +require_once('../../vilesci/config.inc.php'); +require_once('../../include/functions.inc.php'); +require_once('../../include/benutzerberechtigung.class.php'); +require_once('../../include/xslfo2pdf/xslfo2pdf.php'); +require_once('../../include/studiengang.class.php'); +require_once('../../include/lehreinheit.class.php'); +require_once('../../include/fachbereich.class.php'); + +function CutString($strVal, $limit) +{ + if(strlen($strVal) > $limit+3) + { + return substr($strVal, 0, $limit) . "..."; + } + else + { + return $strVal; + } +} + +ini_set('display_errors','0'); +//error_reporting(E_ALL); + +// Datenbank Verbindung +if (!$conn = @pg_pconnect(CONN_STRING)) + $error_msg='Es konnte keine Verbindung zum Server aufgebaut werden!'; + +$user = get_uid(); +loadVariables($conn, $user); +//Parameter holen +if(isset($_GET['uid'])) + $uid = $_GET['uid']; +else + die('Fehlerhafte Parameteruebergabe'); +if(isset($_GET['stg_kz'])) + $studiengang_kz = $_GET['stg_kz']; +else + die('Fehlerhafte Parameteruebergabe'); + +if(isset($_GET['output'])) + $output = $_GET['output']; +else + $output = 'pdf'; + +//Berechtigung pruefen +$rechte = new benutzerberechtigung($conn); +$rechte->getBerechtigungen($user); + +if(!$rechte->isBerechtigt('admin',$studiengang_kz)) + die("Keine Berechtigung"); + +// GENERATE XML + +$xml = ' + + FH-'; +//Studiengang +$studiengang = new studiengang($conn, $studiengang_kz); + +if($studiengang->typ=='d') + $xml.= 'Diplom-'; +elseif($studiengang->typ=='m') + $xml.= 'Master-'; +elseif($studiengang->typ=='b') + $xml.= 'Bachelor-'; + +$xml.= 'Studiengang '.$studiengang->bezeichnung.''; + +//Studiensemester +if(substr($semester_aktuell,0,2)=='WS') + $studiensemester = 'Wintersemester '.substr($semester_aktuell,2); +else + $studiensemester = 'Sommersemester '.substr($semester_aktuell,2); +$xml.=" + $studiensemester"; + +//Lektor +$qry = "SELECT * FROM campus.vw_mitarbeiter LEFT JOIN public.tbl_adresse USING(person_id) WHERE uid='".addslashes($uid)."' ORDER BY zustelladresse LIMIT 1"; + +if($result = pg_query($conn, $qry)) +{ + if($row = pg_fetch_object($result)) + { + $xml.=' + + '.$row->titelpre.' + '.$row->vorname.' + '.$row->nachname.' + '.$row->titelpost.' + '.$row->strasse.' + '.$row->plz.' + '.$row->ort.' + '.$row->svnr.' + '.$row->personalnummer.' + '; + } +} + +//Lehreinheiten +$fb_arr = array(); +$fachbereich_obj = new fachbereich($conn); +$fachbereich_obj->getAll(); +foreach ($fachbereich_obj->result as $fb) + $fb_arr[$fb->fachbereich_kurzbz] = $fb->bezeichnung; + +$lehreinheit = new lehreinheit($conn); +$qry = "SELECT * FROM campus.vw_lehreinheit WHERE lv_studiengang_kz='".addslashes($studiengang_kz)."' AND mitarbeiter_uid='".addslashes($uid)."' AND studiensemester_kurzbz='$semester_aktuell'"; + +if($result = pg_query($conn, $qry)) +{ + $last_le=''; + $gesamtkosten = 0; + $gesamtstunden = 0; + $gruppen = array(); + $grp=''; + while($row = pg_fetch_object($result)) + { + if($last_le!=$row->lehreinheit_id && $last_le!='') + { + array_unique($gruppen); + foreach ($gruppen as $gruppe) + $grp.=$gruppe.' '; +$xml.=' + + '.$lehreinheit_id.' + '.$lehrveranstaltung.' + '.$fb_arr[$fachbereich].' + '.trim($grp).' + '.$stunden.' + '.$satz.' + '.$faktor.' + '.number_format($brutto,2,',','.').' + '; + + $gesamtkosten = $gesamtkosten + $brutto; + $gesamtstunden = $gesamtstunden + $stunden; + + $lehreinheit_id=''; + $lehrveranstaltung = ''; + $fachbereich = ''; + $gruppen= array(); + $stunden = ''; + $satz = ''; + $faktor = ''; + $brutto = ''; + $grp=''; + } + + $lehreinheit_id=$row->lehreinheit_id; + $lehrveranstaltung = CutString($row->lv_bezeichnung,30).' '.$row->lehrform_kurzbz.' '.$row->semester.'. Semester'; + $fachbereich = $row->fachbereich_kurzbz; + + if($row->gruppe_kurzbz!='') + $gruppen[] = $row->gruppe_kurzbz; + else + $gruppen[] = $row->semester.$row->verband.$row->gruppe.' '; + + $stunden = $row->semesterstunden; + $satz = $row->stundensatz; + $faktor = $row->faktor; + $brutto = $row->semesterstunden*$row->stundensatz*$row->faktor; + $last_le=$row->lehreinheit_id; + } + array_unique($gruppen); + foreach ($gruppen as $gruppe) + $grp.=$gruppe.' '; +$xml.=' + + '.$lehreinheit_id.' + '.$lehrveranstaltung.' + '.$fb_arr[$fachbereich].' + '.trim($grp).' + '.$stunden.' + '.$satz.' + '.$faktor.' + '.number_format($brutto,2,',','.').' + '; + + $gesamtkosten = $gesamtkosten + $brutto; + $gesamtstunden = $gesamtstunden + $stunden; +} + +// Gesamtstunden und Gesamtkosten +$xml.=" + $gesamtstunden + ".number_format($gesamtkosten,2,',','.').""; + +//Studiengangsleiter +$qry = "SELECT titelpre, vorname, nachname, titelpost FROM public.tbl_benutzerfunktion, public.tbl_person, public.tbl_benutzer WHERE + funktion_kurzbz='stgl' AND studiengang_kz='".addslashes($studiengang_kz)."' + AND tbl_benutzerfunktion.uid=tbl_benutzer.uid AND tbl_benutzer.person_id=tbl_person.person_id"; +if($result = pg_query($conn, $qry)) +{ + if($row = pg_fetch_object($result)) + { + $stgl = trim($row->titelpost.' '.$row->vorname.' '.$row->nachname.' '.$row->titelpost); +$xml.=" + $stgl"; + } +} + +$xml.= ' + '.date('d.m.Y').' + +'; + +// END GENERATE XML +//echo $xml; + +// Load the XML source +$xml_doc = new DOMDocument; +if(!$xml_doc->loadXML($xml)) + die('unable to load xml'); + +//XSL aus der DB holen +$qry = "SELECT text FROM public.tbl_vorlagestudiengang WHERE (studiengang_kz=0 OR studiengang_kz='".addslashes($studiengang_kz)."') AND vorlage_kurzbz='Lehrauftrag' ORDER BY studiengang_kz DESC, version DESC LIMIT 1"; + +if(!$result = pg_query($conn, $qry)) + die('Fehler beim laden der Vorlage'.pg_errormessage($conn)); +if(!$row = pg_fetch_object($result)) + die('Vorlage wurde nicht gefunden'.$qry); + +// Load the XSL source +$xsl = new DOMDocument; +//if(!$xsl->load('../../../../xsl/collection.xsl')) +if(!$xsl->loadXML($row->text)) + die('unable to load xsl'); + +// Configure the transformer +$proc = new XSLTProcessor; +$proc->importStyleSheet($xsl); // attach the xsl rules + +$buffer = $proc->transformToXml($xml_doc); +//in $buffer steht nun das xsl-fo file mit den daten +$buffer = ''.substr($buffer, strpos($buffer,"\n"),strlen($buffer)); +$buffer = html_entity_decode($buffer); +//echo "buffer: $buffer"; + +//Pdf erstellen +$fo2pdf = new XslFo2Pdf(); +if (!$fo2pdf->generatePdf($buffer, 'filename', "D")) +{ + echo "Failed parsing file:".'filename'."
"; +} + +?> \ No newline at end of file diff --git a/content/lvplanung/lehrveranstaltungoverlay.js.php b/content/lvplanung/lehrveranstaltungoverlay.js.php index 11b211d27..92fee9285 100644 --- a/content/lvplanung/lehrveranstaltungoverlay.js.php +++ b/content/lvplanung/lehrveranstaltungoverlay.js.php @@ -178,7 +178,7 @@ function LvCreateLehrauftrag() { stg = document.getElementById('LehrveranstaltungEditor').getAttribute('stg_kz'); uid = document.getElementById('LehrveranstaltungEditor').getAttribute('uid'); - alert('stg:'+stg+' uid:'+uid); + window.location.href = 'content/lvplanung/lehrauftrag.php?stg_kz='+stg+'&uid='+uid+'&'+gettimestamp(); } // ****************** FUNKTIONEN ************************** // diff --git a/include/xslfo2pdf/examples/basic/border.fo b/include/xslfo2pdf/examples/basic/border.fo new file mode 100644 index 000000000..5ce9969a2 --- /dev/null +++ b/include/xslfo2pdf/examples/basic/border.fo @@ -0,0 +1,188 @@ + + + + + + + + + + + + + + + + + + + + + + + PX7.net + + + 44 Liberty St + + + Newburyport, MA 01950 + + + 978-462-1152 + + + + + Sales Receipt + + + + + + DATE + + + + + 01/01/2000 + + + + + SALE # + + + + + 1 + + + + + + SOLD TO + + + + + + + + + SHIP TO + + + + + + + + + + + PMT METHOD + + + + + Check + + + + + CHECK # + + + + + 1234 + + + + + + + + + + + + + + QUANTITY + + + DESCRIPTION + + + RATE + + + AMOUNT + + + + + + 1 + + + Wide Widget + + + $22.23 + + + 22.31 + + + + + 1 + + + Widget + + + $22.23 + + + 22.31 + + + + + 3 + + + Nuts + + + $12.00 + + + 36.00 + + + + + + + Please remit to the above address + + + Total + + + $3.00 + + + + diff --git a/include/xslfo2pdf/examples/basic/link.fo b/include/xslfo2pdf/examples/basic/link.fo new file mode 100644 index 000000000..5a37d927a --- /dev/null +++ b/include/xslfo2pdf/examples/basic/link.fo @@ -0,0 +1,145 @@ + + + + + + + + + + + + + + + + + + + + + + 0. Normal text without link + + + + + 1. normal.pdf + + + + --- + + + + 2. A one line example (text-align='start'): normal.pdf + + + + --- + + + + 3. A multiline text (text-align='start'). The Extensible Markup Language (XML) is a subset of SGML that is completely described in this document. Its goal is to + enable generic SGML to be served, received, and processed on the Web in the way that is now possible with HTML. XML + has been designed for ease of implementation and for interoperability with both SGML and HTML. For further information + go to normal.pdf + + + + --- + + + + 4. A multiline text (text-align='centered'). The Extensible Markup Language (XML) is a subset of SGML that is completely described in this document. Its goal is to + enable generic SGML to be served, received, and processed on the Web in the way that is now possible with HTML. XML + has been designed for ease of implementation and for interoperability with both SGML and HTML. For further information + go to normal.pdf + + + + --- + + + + 5. A multiline text (text-align='end'). The Extensible Markup Language (XML) is a subset of SGML that is completely described in this document. Its goal is to + enable generic SGML to be served, received, and processed on the Web in the way that is now possible with HTML. XML + has been designed for ease of implementation and for interoperability with both SGML and HTML. For further information + go to normal.pdf + + + + --- + + + + 6. A multiline text (text-align='justify'). The Extensible Markup Language (XML) is a subset of SGML that is completely described in this document. Its goal is to + enable generic SGML to be served, received, and processed on the Web in the way that is now possible with HTML. XML + has been designed for ease of implementation and for interoperability with both SGML and HTML. For further information + go to normal.pdf + + + + --- + + + + 7. A multiline text (text-align='start', space-before.optimum=6pt, font-family=serif padding-top="3pt"). The Extensible Markup Language (XML) is a subset of SGML that is completely described in this document. Its goal is to + enable generic SGML to be served, received, and processed on the Web in the way that is now possible with HTML. XML + has been designed for ease of implementation and for interoperability with both SGML and HTML. For further information + go to normal.pdf + + + + + 8. A multiline text (text-align='start', space-before.optimum=6pt, font-family=serif, padding-top="3pt"). The Extensible Markup Language (XML) is a subset of SGML that is completely described in this document. Its goal is to + enable generic SGML to be served, received, and processed on the Web in the way that is now possible with HTML. XML + has been designed for ease of implementation and for interoperability with both SGML and HTML. For further information + go to normal.pdf + + + + + + + + 9. Linking to a specific page of an external: + extensive.pdf, Page 2. + + + + + + diff --git a/include/xslfo2pdf/examples/basic/normal.fo b/include/xslfo2pdf/examples/basic/normal.fo new file mode 100644 index 000000000..b8eedf68a --- /dev/null +++ b/include/xslfo2pdf/examples/basic/normal.fo @@ -0,0 +1,149 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + XML Recommendation - p. + + + + + + + + Extensible Markup Language (XML) 1.0 + + + + + Abstract + + + + + The Extensible Markup Language (XML) is a subset of SGML that is completely described in this document. Its goal is to + enable generic SGML to be served, received, and processed on the Web in the way that is now possible with HTML. XML + has been designed for ease of implementation and for interoperability with both SGML and HTML. + + + + + Status of this document + + + + + This document has been reviewed by W3C Members and other interested parties and has been endorsed by the Director as a + W3C Recommendation. It is a stable document and may be used as reference material or cited as a normative reference from + another document. W3C's role in making the Recommendation is to draw attention to the specification and to promote its + widespread deployment. This enhances the functionality and interoperability of the Web. + + + + + This document specifies a syntax created by subsetting an existing, widely used international text processing standard + (Standard Generalized Markup Language, ISO 8879:1986(E) as amended and corrected) for use on the World Wide Web. It + is a product of the W3C XML Activity, details of which can be found at http://www.w3.org/XML. A list of current W3C + Recommendations and other technical documents can be found at http://www.w3.org/TR. + + + + diff --git a/include/xslfo2pdf/examples/basic/readme.fo b/include/xslfo2pdf/examples/basic/readme.fo new file mode 100644 index 000000000..0b290de9a --- /dev/null +++ b/include/xslfo2pdf/examples/basic/readme.fo @@ -0,0 +1,1341 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +This is not the latest Fop documentation, but just an fo example. FOP - p. + + + + + +FOP: An Open-Source XSL Formatter and Renderer +A) + What is FOP? + FOP is the world's first print formatter driven by XSL formatting + objects. It is a Java 1.1 application that reads a formatting object + tree and then turns it into a PDF document. The formatting object + tree, can be in the form of an XML document (output by an XSLT engine + like XT or Xalan) or can be passed in memory as a DOM Document or (in + the case of XT) SAX events. + + + FOP is part of Apache's XML project. The homepage of FOP is + http://xml.apache.org/fop + + + + + B) + Downloading FOP + The latest release version is FOP +0.14 + () + . + NOTE: you do not have to unjar or unzip this jar file. + Documentation can be downloaded here as HMTL file + + () + or + as PDF file + + () + . + To run FOP from the command line, see Running FOP. If you are interested in + embedding FOP in a Java application of your own, see Embedding FOP. + + You can also download the source code v. 0.14 + + () + as jar file + + + + + + C) + Running FOP + + 1) Prerequisites + Following software must be installed: + a) Java 1.1.x or later + For the fo-file viewer mode of FOP (see below) you must have the swing classes installed. + From Java 1.2 on (aka Java 2) they are part of the standard java distribution. + If you use Java 1.1.x you must seperately include the swing classes, which can + be found at the + Sun website + + (http://java.sun.com/products/jfc/#download-swing) + . + + b) An XML parser which supports SAX and DOM like + Xerces-J + + (http://xml.apache.org/xerces-j/index.html) + . + c) If you have to produce the flow objects files, which are the input for FOP, + you need a transformation utility to create this files from your xml files. + Normally this is an XSLT stylesheet processor like + XT + + (http://www.jclark.com/xml/xt.html) + + or XALAN + + (http://xml.apache.org/xalan/index.html) + . + + + + 2) Starting FOP as an standalone application + There are three ways to run FOP from the command line. + a) Batch processing formatting objects (fo) files: + java org.apache.fop.apps.CommandLine fo-file pdf-file + b) Batch processing xml files (includes production of the fo-files): + java org.apache.fop.apps.CommandLine xml-file xsl-file pdf-file + c) Previewing the fo-file: + java org.apache.fop.apps.AWTCommandLine fo-file + Each method uses next to the fop classes other packages. The following describes + each method in detail. + + a) Method One + One is to first use an XSLT engine to produce the formatting object tree as an + XML document and then running the class org.apache.fop.apps.CommandLine with the + formatting object file name and PDF filename as arguments. You will need to include + FOP and your XML Parser in your classpath and so you might invoke + + java -cp fop_x_xx_x.jar;xerces.jar + org.apache.fop.apps.CommandLine fo-file pdf-file + If your SAX Parser is other than Xerces, you will need to set the property + org.xml.sax.parser to the SAX Parser class to use. The following example shows + the command line, if you use XP, the XML parser from James Clark: + + java -Dorg.xml.sax.parser=com.jclark.xml.sax.Driver + -cp fop_x_xx_x.jar;sax.jar;xt.jar;xp.jar;xerces.jar + org.apache.fop.apps.AWTCommandLine formatting-tree-file pdf-file + (You have to include xerces.jar or another xml parser which supports DOM in your classpath.) + + + b) Method Two + Rather than performing transformation with an XSLT before invoking FOP, it is + possible, if you use XT as your XSLT engine, to just call FOP and have it call + XT for you. To do this, run the class org.apache.fop.apps.CommandLine with the + source XML file name, XSL file name and PDF file name as arguments. You will + need to include FOP, SAX, your SAX Parser and XT in your classpath and so you might + invoke + + java -Dorg.xml.sax.parser=com.jclark.xml.sax.Driver + -cp fop_x_xx_x.jar;xt.jar;xerces.jar + org.apache.fop.apps.CommandLine xml-file xsl-file pdf-file + Again, if your SAX Parser is other than Xerces, you will need to set the property + org.xml.sax.parser to the SAX Parser class to use. + + + + c) Method Three + If you already produced the FO file, you can preview the results of your + transformation without using any pdf viewer by invoking FOP with the viewer + application. You will need to include FOP and your XML Parser in your classpath + + java -cp fop_x_xx_x.jar;xerces.jar + org.apache.fop.apps.AWTCommandLine fo-file + The viewer uses the swing classes. + Note: If you are using java 2 or later (i.e. jdk 1.2. or later) you can put all + needed jar files into the subdirectory jdk1.2.x\jre\lib\ext (windows example). Then + FOP can be started without classpath: + + java org.apache.fop.apps.CommandLine fo-file pdf-file + + + + 3) Running FOP on MacOS + + Ensure that you have a recent MRJ, and that you have downloaded and + unpacked the XP and SAX distributions. The xp.jar and sax.jar files work + as is on MacOS. + + Drag the FOP jarfile onto the JBindery icon. When the first dialog + appears, type "org.apache.fop.apps.CommandLine" in the "Class name" field. + Using UNIX syntax, type the names of the input formatting-object file and + the output PDF in the "Optional parameters" field. + + Click on the Classpath icon. To add the xp.jar and sax.jar files, click + the "Add .zip file" button, navigate to the file in question, and click + Open. + + Once both are added (the FOP jarfile will already be in the list), click + Run. A "stdout" window will appear and display FOP runtime messages. + + + + 4) Problems + If you have problems running FOP, please have a look at the + FOP FAQ + + (faq.html) + . If you don't find a solution there, + you can ask for help on the list fop-dev@xml.apache.org. Maybe it's bug and + maybe somebody is already working on it. + + + + + + D) + Embedding FOP + Instantiate org.apache.fop.apps.Driver. Once this class is + instantiated, methods are called to set the + Renderer to use, the (possibly multiple) ElementMapping(s) to + use and the PrintWriter to use to output the results of the + rendering (where applicable). In the case of the Renderer and + ElementMapping(s), the Driver may be supplied either with the + object itself, or the name of the class, in which case Driver will + instantiate the class itself. The advantage of the latter is it + enables runtime determination of Renderer and ElementMapping(s). + + Once the Driver is set up, the buildFOTree method + is called. Depending on whether DOM or SAX is being used, the + invocation of the method is either buildFOTree(Document) or + buildFOTree(Parser, InputSource) respectively. + + A third possibility may be used to build the FO Tree, namely + calling getDocumentHandler() and firing the SAX events yourself. + + Once the FO Tree is built, the format() and render() methods may be + called in that order. + + Here is an example use of Driver from CommandLine.java: + Driver driver = new Driver(); + driver.setRenderer("org.apache.fop.render.pdf.PDFRenderer", version); + driver.addElementMapping("org.apache.fop.fo.StandardElementMapping"); + driver.addElementMapping("org.apache.fop.svg.SVGElementMapping"); + driver.setWriter(new PrintWriter(new FileWriter(args[1]))); + driver.buildFOTree(parser, fileInputSource(args[0])); + driver.format(); + driver.render(); + + + + + + + E) + What's Implemented? + Also see STATUS for what is being worked on. + + 1) Formatting Objects + + + + + + +root + + + + + + + +layout-master-set + + + + + + + +simple-page-master + + + + + + + +region-body + + + + + + + +region-before + + + + + + + +region-after + + + + + + + +page-sequence + + + + + + + +sequence-specification + + + + + + + +sequence-specifier-single + + + + + + + +sequence-specifier-repeating + + + + + + + +sequence-specifier-alternating + + + + + + + +flow + + + + + + + +static-content + + + + + + + +block + + + + + + + +list-block + + + + + + + +list-item + + + + + + + +list-item-label + + + + + + + +list-item-body + + + + + + + +page-number + + + + + + + +display-sequence + + + + + + + +inline + + + + + + + +display-rule + + + + + + + +display-graphic + + + + + + + +table (minimal support) + + + + + + + +table-column (minimal support) + + + + + + + +table-body (minimal support) + + + + + + + +table-row (minimal support) + + + + + + + +table-cell (minimal support) + + + + + + + 2) Properties + + + + + + +end-indent + + + + + + + +page-master-name + + + + + + + +page-master-first + + + + + + + +page-master-repeating + + + + + + + +page-master-odd + + + + + + + +page-master-even + + + + + + + +margin-top (only on pages and regions) + + + + + + + +margin-bottom (only on pages and regions) + + + + + + + +margin-left (only on pages and regions) + + + + + + + +margin-right (only on pages and regions) + + + + + + + +extent + + + + + + + +page-width + + + + + + + +page-height + + + + + + + +flow-name + + + + + + + +font-family + + + + + + + +font-style + + + + + + + +font-weight + + + + + + + +font-size + + + + + + + +line-height + + + + + + + +text-align + + + + + + + +text-align-last + + + + + + + +space-before.optimum + + + + + + + +space-after.optimum + + + + + + + +start-indent + + + + + + + +end-indent + + + + + + + +provisional-distance-between-starts + + + + + + + +provisional-label-separation + + + + + + + +rule-thickness + + + + + + + +color + + + + + + + +wrap-option + + + + + + + +white-space-treatment + + + + + + + +break-before + + + + + + + +break-after + + + + + + + +text-indent + + + + + + + +href + + + + + + + +column-width + + + + + + + +background-color + + + + + + + +padding-top (only in conjunction with background color) + + + + + + + +padding-left (only in conjunction with background color) + + + + + + + +padding-bottom (only in conjunction with background color) + + + + + + + +padding-right (only in conjunction with background color) + + + + + + + + + + F) + Limitations + Although FOP implements the above listed fo objects and properties, sometimes it does so + only in a limited way. + + + list-block + The fo working draft allows describes two ways to markup lists.The list-block must have as + children either: 1) pairs of fo:list-item-label and fo:list-item-body formatting objects, or + 2) fo:list-item formatting objects. + At the moment FOP only implements the second way. Therefore a list has a basic structure like this: + <fo:list-block> + <fo:list-item> + <fo:list-item-label><fo:block></fo:block></fo:list-item-label> + <fo:list-item-body><fo:block></fo:block></fo:list-item-body> + </fo:list-item> + </fo:list-block> + + + Padding + Padding works in conjunction with indents and spaces. It is only implemented + for blocks. At the moment padding can't be used to make extra space (indents+spaces + must be used), but only to control how much the background-color extends beyond + the content rectangle. + + + + Tables + There two limitations for tables: 1) FOP needs you to explicitly specify column widths + 2) Cells have to contain block-level FOs. They can't contain straight character data. + + A working basic example of a table looks like this: + <fo:table> + <fo:table-column column-width="150pt"/> + <fo:table-column column-width="150pt"/> + <fo:table-body font-size="10pt" font-family="sans-serif"> + <fo:table-row> + <fo:table-cell> + <fo:block>text</fo:block> + </fo:table-cell> + <fo:table-cell> + <fo:block>text</fo:block> + </fo:table-cell> + </fo:table-row> + <fo:table-row> + <fo:table-cell> + <fo:block>text</fo:block> + </fo:table-cell> + <fo:table-cell> + <fo:block>text</fo:block> + </fo:table-cell> + </fo:table-row> + <fo:table-row> + <fo:table-cell> + <fo:block>text</fo:block> + </fo:table-cell> + <fo:table-cell> + <fo:block>text</fo:block> + </fo:table-cell> + </fo:table-row> + </fo:table-body> + </fo:table> + + + + + + + + + + + + G) + Bugs + see STATUS file + + + + + + + H) + Compiling FOP + + 1. Prerequisites + + a) Java 1.1.x or later + If you use Java 1.1.x you must also seperately include the swing classes, which can + be found at the + Sun website + + (http://java.sun.com/products/jfc/#download-swing) + . From Java 1.2 on (aka Java 2) they are part of the standard + distribution. + + + + b) An XML parser + An XML parser which supports DOM like + Xerces-J + + (http://xml.apache.org/xerces-j/index.html) + . + + + c) XT from James Clark + Some of the Java source code in FOP is generated from XML using + XSLT. XT must be used to generate this code. + XT is an XSL stylesheet processor written in java. At the moment you + can't use any other processor, because the make file makes use of some + proprietary features of Clark's xt which allow to write output in more + then one document. You can find XT at + James Clark's website + + (http://www.jclark.com/xml/xt.html) + . You have to use XT version 19991105 or later. + (Under windows you shouldn't use the prepackaged xt.exe but also the + generic jar file, otherwise make won't work) + + XT relies on an sax parser like XP (also J. Clark), which can be + downloaded at James + Clark's Website + + (http://www.jclark.com/xml/xp/index.html) + + + + + d) make + Under windows it has been reported that the use of the cygnus solutions port + of the GNU utilities works. You can find it at + Cygnus Solutions + + (http://sourceware.cygnus.com/cygwin/) + + + + + + Compiling FOP on MacOS + + We strongly recommend the use of Codewarrior Java. This Readme will + contain a link to more information in the near future. + + + + + + + + + I) + Getting involved + 1. Subscribe to fop-dev@xml.apache.org by sending an email + to fop-dev-subscribe@xml.apache.org + 2. Read the archives to fop-dev to get an idea of the issues being + discussed. + 3. Subscribe to fop-cvs@xml.apache.org by sending an email to + fop-cvs-subscribe@xml.apache.org (it is important + that you follow changes being made). + 4. Try :-) to wrap your head around the XSL working draft. + 5. Get CVS working on your system. + 6. Ask, on fop-dev, any questions you have at all about the code, design, etc. + 7. When you feel comfortable modifying the code, send diffs to + fop-dev with your contributions. + 8. Have fun! + + + + + + + J) + FOP Relevant Specifications + + + + + + + +XML Recommendation + + (http://www.w3.org/TR/REC-xml) + + + + + + + + + + +XSL-FO Working Draft + + (http://www.w3.org/TR/WD-xsl/) + + + + + + + + + + +XSLT Recommendation + + (http://www.w3.org/TR/xslt) + + + + + + + + + + +PDF Documentation + + (http://partners.adobe.com/asn/developer/acrosdk/DOCS/pdfspec.pdf) + + + + + + + + + + +Simple API for XML (SAX) + + (http://www.megginson.com/SAX/) + + + + + + + + + + +Document Object Model (DOM) + + (http://www.w3.org/TR/REC-DOM-Level-1) + + + + + + + + + + +Namespaces in XML Recommendation + + (http://www.w3.org/TR/REC-xml-names/) + + + + + + + + + + +Java JDK 1.1 Documentation + + (http://java.sun.com/products/jdk/1.1/docs/index.html) + + + + + + + + + + + + K) + Licence + ================================================================== + The Apache Software License, Version 1.1 + ================================================================== + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber <jtauber@jtauber.com>. For more information on the Apache + Software Foundation, please see http://www.apache.org/ + + (http://www.apache.org/) + . + + + + Content + + + + + + + + +A) + + + +What is FOP? + + + + + + + +B) + + + +Downloading FOP + + + + + + + +C) + + + +Running FOP + + + + + + + +D) + + + +Embedding FOP + + + + + + + +E) + + + +What's Implemented? + + + + + + + +F) + + + +Limitations + + + + + + + +G) + + + +Bugs + + + + + + + +H) + + + +Compiling FOP + + + + + + + +I) + + + +Getting involved + + + + + + + +J) + + + +FOP Relevant Specifications + + + + + + + +K) + + + +Licence + + + + + + + + + + + + + diff --git a/include/xslfo2pdf/examples/basic/simple.fo b/include/xslfo2pdf/examples/basic/simple.fo new file mode 100644 index 000000000..a9c06ce9f --- /dev/null +++ b/include/xslfo2pdf/examples/basic/simple.fo @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Extensible Markup Language (XML) 1.0 + + + + + + The Extensible Markup Language (XML) is a subset of SGML that is completely described in this document. Its goal is to + enable generic SGML to be served, received, and processed on the Web in the way that is now possible with HTML. XML + has been designed for ease of implementation and for interoperability with both SGML and HTML. + + + + + The Extensible Markup Language (XML) is a subset of SGML that is completely described in this document. Its goal is to + enable generic SGML to be served, received, and processed on the Web in the way that is now possible with HTML. XML + has been designed for ease of implementation and for interoperability with both SGML and HTML. + + + + + diff --git a/include/xslfo2pdf/examples/basic/table.fo b/include/xslfo2pdf/examples/basic/table.fo new file mode 100644 index 000000000..99a7f1d27 --- /dev/null +++ b/include/xslfo2pdf/examples/basic/table.fo @@ -0,0 +1,504 @@ + + + + + + + + + + + + + + + + + + + + + + How to use table elements + + + + + A simple table, 3 columns, 4 rows + + + + this is normal text. this is normal text. this is normal text. + this is normal text. this is normal text. this is normal text. + + + + + + + + + + good + bad + ugly + + + nice + dice + vice + + + literature + music + art + + + java + perl + python + + + + + + + this is normal text. this is normal text. this is normal text. + this is normal text. this is normal text. this is normal text. + + + + + + + A table with borders + + + + + this is normal text. this is normal text. this is normal text. + this is normal text. this is normal text. this is normal text. + + + + + + + + + + + good + bad + ugly + + + nice + dice + vice + + + literature + music + art + + + java + perl + python + + + + + + + this is normal text. this is normal text. this is normal text. + this is normal text. this is normal text. this is normal text. + + + + + + + + A table with thick borders + + + + + this is normal text. this is normal text. this is normal text. + this is normal text. this is normal text. this is normal text. + + + + + + + + + + + good + bad + ugly + + + nice + dice + vice + + + literature + music + art + + + java + perl + python + + + + + + + this is normal text. this is normal text. this is normal text. + this is normal text. this is normal text. this is normal text. + + + + + + + + A table with borders around the cells + + + + + this is normal text. this is normal text. this is normal text. + this is normal text. this is normal text. this is normal text. + + + + + + + + + + + good + bad + ugly + + + nice + dice + vice + + + literature + music + art + + + java + perl + python + + + + + + + this is normal text. this is normal text. this is normal text. + this is normal text. this is normal text. this is normal text. + + + + + + + 2 tables with thick borders around the cells + + + + + this is normal text. this is normal text. this is normal text. + this is normal text. this is normal text. this is normal text. + + + + + + + + + + + good + bad + ugly + + + nice + dice + vice + + + literature + music + art + + + java + perl + python + + + + + + + this is normal text. this is normal text. this is normal text. + this is normal text. this is normal text. this is normal text. + + + + + + + + + + good + bad + ugly + + + nice + dice + vice + + + literature + music + art + + + java + perl + python + + + + + + + this is normal text. this is normal text. this is normal text. + this is normal text. this is normal text. this is normal text. + + + + + + + 5 tables with borders + + + + + this is normal text. this is normal text. this is normal text. + this is normal text. this is normal text. this is normal text. + + + + + + + + bad + + + + + + + + + + bad + + + + + + + + + + bad + + + + + + + + + bad + + + + + + this is normal text. this is normal text. this is normal text. + this is normal text. this is normal text. this is normal text. + + + + + + A Contents table + + + + + + + + + + A) + + + What is FOP? + + + + + B) + + + Downloading FOP + + + + + C) + + + Running FOP + + + + + D) + + + Embedding FOP + + + + + E) + + + What's Implemented? + + + + + F) + + + Limitations + + + + + G) + + + Bugs + + + + + H) + + + Compiling FOP + + + + + I) + + + Getting involved + + + + + J) + + + FOP Relevant Specifications + + + + + K) + + + Licence + + + + + + + diff --git a/include/xslfo2pdf/examples/svg/basic.xml b/include/xslfo2pdf/examples/svg/basic.xml new file mode 100644 index 000000000..09ad3106b --- /dev/null +++ b/include/xslfo2pdf/examples/svg/basic.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/include/xslfo2pdf/examples/svg/circle.xml b/include/xslfo2pdf/examples/svg/circle.xml new file mode 100644 index 000000000..e0e73084d --- /dev/null +++ b/include/xslfo2pdf/examples/svg/circle.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/include/xslfo2pdf/examples/svg/path.xml b/include/xslfo2pdf/examples/svg/path.xml new file mode 100644 index 000000000..48b3806fc --- /dev/null +++ b/include/xslfo2pdf/examples/svg/path.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/include/xslfo2pdf/examples/svg/transform.xml b/include/xslfo2pdf/examples/svg/transform.xml new file mode 100644 index 000000000..837823e35 --- /dev/null +++ b/include/xslfo2pdf/examples/svg/transform.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + ....Translate(1) + + + + + + + + + ....Rotate(2) + + + + + + + + + ....Translate(3) + + + + + + + + + + \ No newline at end of file diff --git a/include/xslfo2pdf/examples/xslfo2pdf_example.xml b/include/xslfo2pdf/examples/xslfo2pdf_example.xml new file mode 100644 index 000000000..fd69f4ea4 --- /dev/null +++ b/include/xslfo2pdf/examples/xslfo2pdf_example.xml @@ -0,0 +1,70 @@ + + + + + + dasdsad dfsfsdfsf fdsfdsfs fsd fsd f sdfsd fsdfsdf sdfsdf dsafsdfs dfsdf sdfsd fsdfsdf sdfs dfsdfsd fsdfs dfsed + + +xxxxxxxx + + + + + + + + + + Car + + + + Price + + + + + + + + + Volvo + + + $50000 + + + + + + SAAB + + + $48000 + + + + + + + + + + + + 444 + + + + \ No newline at end of file diff --git a/include/xslfo2pdf/fo_block.php b/include/xslfo2pdf/fo_block.php new file mode 100644 index 000000000..ddd88edc0 --- /dev/null +++ b/include/xslfo2pdf/fo_block.php @@ -0,0 +1,194 @@ + +initAttribute($node, "text-align"); + $this->initAttribute($node, "content-width"); + } + + protected function processContent($text) { + $talign = $this->getContext("text-align"); + //oesi - add attribute content-width + $colwidth = $this->getContext("content-width"); + switch ($talign) { + case "center": + $align = "C"; + break; + case "right": + $align = "R"; + break; + case "left": + $align = "L"; + default: + } + + $text = $this->escape($text); + + $x = $this->getContext("x"); + $x2 = $this->getContext("startx"); + if (!$x2) { + $x2 = $x; + } + $y = $this->getContext("y"); + // echo "Draw at:$x:$x2:$y
"; + $pdf = $this->getPdf(); + $lineHeight = $this->getContext("line-height"); + + list($width, $height, $nb, $sx, $sy, $lx, $ly) = + $pdf->Text2($x2, $y, $text, $align, $lineHeight, $x, $colwidth); +//echo "Wrote block:$x:$y:$height:$lineHeight:".$pdf->FontSize.":".$pdf->FontSizePt."
"; + $this->setLocalContext("content_height", $height); + $this->setLocalContext("content_width", $width); + $this->setLocalContext("lx", $lx); + $this->setLocalContext("ly", $ly); + $this->setLocalContext("sx", $sx); + $this->setLocalContext("sy", $sy); + } + + protected function postParseContent($content) { + $this->setContext("startx", $this->getContext("lx")); + $this->setContext("y", $this->getContext("ly")); + $pdf = $this->getPdf(); + $this->setLocalContext("width", $pdf->GetPageWidth()); + $h1 = $this->getContext("height"); + $h2 = $this->getContext("content_height"); + if ($h2 > $h1) { + $this->setLocalContext("height", $h2); + } + } + + protected function postParse(FO_Object $obj) { + if (!$obj instanceof FO_Inline) { + return parent::postParse($obj); + } + $this->setContext("startx", $obj->getContext("lx")); + $this->setContext("y", $obj->getContext("ly")); + $this->setContext("x", $obj->getContext("x")); + $h1 = $this->getContext("height"); + $h2 = $obj->getContext("height"); + if ($h2 > $h1) { + $this->setLocalContext("height", $h2); + } + } + + private function escape($text) { + return str_replace('\t', '', preg_replace('/\s+/', ' ', $text)); + } +} + +class FO_Inline extends FO_Block { + + protected function processContent($text) { + // echo "show inline content:$text
"; + return parent::processContent($text); + } + +} + +class FO_BasicLink extends FO_Block { + protected function initAttributes($node) { + $this->initLocalAttribute($node, "internal-destination"); + $this->initLocalAttribute($node, "external-destination"); + } + + protected function processContent($text) { + parent::processContent($text); + $width = $this->getContext("content_width"); + $height = $this->getContext("content_height"); + $lx = $this->getContext("lx"); + $ly = $this->getContext("ly"); + $sx = $this->getContext("sx"); + $sy = $this->getContext("sy"); + //echo "Link at:$x:$y:$width:$height
"; + $pdf = $this->getPdf(); + $internal = $this->getContext("internal-destination"); + $external = $this->getContext("external-destination"); + if ($internal) { + $lnk = $pdf->AddLink(); + $ref = $this->getReference($internal); + if ($ref) { + //TODO: add all references from id's as well as the page-number + $pdf->SetLink($lnk, $ref->getContext("y"), $ref->getContext("page-number")); + $pdf->Link($x, $y, $width, $height, $lnk); + } + } + else if ($external) { + $pdf->Link($x, $y, $width, $height, $external); + } + } +} + +//oesi - add ExternalGraphics +class FO_ExternalGraphic extends FO_Block +{ + protected function initAttributes($node) + { + $this->initLocalAttribute($node, "src"); + $this->initLocalAttribute($node, "width"); + $this->initLocalAttribute($node, "height"); + $this->initLocalAttribute($node, "posx"); + $this->initLocalAttribute($node, "posy"); + } + + protected function processContent($text) + { + parent::processContent($text); + + $pdf = $this->getPdf(); + + $src = $this->getContext("src"); + $width = $this->getContext("width"); + $height = $this->getContext("height"); + $x = $this->getContext("posx"); + $y = $this->getContext("posy"); + + $pdf->Image($src, $x, $y, $width, $height, "jpg",""); + } +} + + +?> \ No newline at end of file diff --git a/include/xslfo2pdf/fo_core.php b/include/xslfo2pdf/fo_core.php new file mode 100644 index 000000000..b4a07c6a7 --- /dev/null +++ b/include/xslfo2pdf/fo_core.php @@ -0,0 +1,364 @@ + +_context = array(); + } + + public function get($key) { + return $this->_context[$key]; + } + + public function set($key, $val) { + $this->_context[$key] = $val; + } +} + +abstract class FO_Object { + private $_children; + private $_container; + private $_context; + private $_localContext; + private $_pdf; + private $_parent; + + const NODE_TYPE_ELEMENT = 1; + const NODE_TYPE_TEXT = 3; + + function __construct(FO_Container $container, FPDF $pdf, + FO_Context $context) { + //echo "New:$this:$context
"; + $this->_container = $container; + $this->_pdf = $pdf; + $this->_context = $context; + $this->_localContext = new FO_Context(); + } + + /** + * Check unit of value and scale to internal value, if needed + * Internal values are stored in mm + **/ + protected function calcInternalValue($value, $to = "mm", $from="mm") { + sscanf($value, "%f%s", $value, $unit); + if (!$unit) { + $unit = $from; + } + //calculate to default value in mm + switch ($to) { + case "mm": + switch ($unit) { + case "mm": + return $value; + case "cm": + return $value*10; + case "in": + return $value/25.4; + case "pt": + return $value*25.4/72; + default: + $this->NotYetSupported("Unit:$unit"); + } + break; + case "cm": + switch ($unit) { + case "mm": + return $value/10; + case "cm": + return $value; + case "in": + return $value/2.54; + case "pt": + return $value*2.54/72; + default: + $this->NotYetSupported("Unit:$unit"); + } + break; + case "in": + switch ($unit) { + case "mm": + return $value*25.4; + case "cm": + return $value*2.54; + case "in": + return $value; + case "pt": + return $value*72; + default: + $this->NotYetSupported("Unit:$unit"); + } + break; + case "pt": + switch ($unit) { + case "mm": + return $value*72/25.4; + case "cm": + return $value*72/2.54; + case "in": + return $value/72; + case "pt": + return $value; + default: + $this->NotYetSupported("Unit:$unit"); + } + break; + default: + $this->NotYetSupported("Default Unit:$default"); + } + } + + public function addReference($category, $name) { + if ($category && $name) { + $this->_container->addReference($category, $name, $this); + } + } + + public function resolveReference($category, $name) { + return $this->_container->resolveReference($category, $name); + } + + protected function setParent($parent) { + $this->_parent = $parent; + } + + protected function handleEvent($event) { + if ($event == "sync-position") { + $pdf = $this->getPdf(); + $this->setContext("y", $pdf->GetY()); + $this->setContext("x", $pdf->GetX()); + } + if ($this->_parent) { + $this->_parent->handleEvent($event); + } + } + + /** + * Get from current context informations + */ + protected function getContext($key) { + $val = $this->_localContext->get($key); + if (!$val) { + $val = $this->_context->get($key); + } + return $val; + } + + /** + * Set a context information for child nodes and current node as well + */ + protected function setContext($key, $value) { + $this->_context->set($key, $value); + } + + protected function setLocalContext($key, $value) { + $this->_localContext->set($key, $value); + } + + protected function getAttribute(DOMNode $node, $key) { + return $node->attributes->getNamedItem($key)->nodeValue; + } + + protected function getSizeAttribute(DOMNode $node, $key, $to="mm", $from="mm") { + $val = $node->attributes->getNamedItem($key)->nodeValue; + return $this->calcInternalValue($val, $to, $from); + } + + protected function initSizeAttribute(DOMNode $node, $key, $to="mm", $from="mm") { + $val = $this->getSizeAttribute($node, $key, $to, $from); + if ($val) { + $this->setContext($key, $val); + } + } + + protected function initAttribute(DOMNode $node, $key) { + $val = $this->getAttribute($node, $key); + if ($val) { + $this->setContext($key, $val); + } + } + + protected function initLocalSizeAttribute(DOMNode $node, $key, $to="mm", $from="mm"){ + $val = $this->getSizeAttribute($node, $key, $to, $from); + if ($val) { + $this->_localContext->set($key, $val); + } + } + + protected function initLocalAttribute(DOMNode $node, $key) { + $val = $this->getAttribute($node, $key); + if ($val) { + $this->_localContext->set($key, $val); + } + } + + protected function processChildNodes(DOMNode $node, $filter) { + foreach($node->childNodes as $child) { + $this->processChildNode($child, $filter); + } + } + + protected function processChildNode(DOMNode $node, $filter) { + $subcontext = clone $this->_context; + $next = + FO_Factory::createFOObject($node, $this->_container, + $this->_pdf, $subcontext, $filter); + if ($next != null) { + $next->setParent($this); + $this->initFOObject($next); + $this->_children[$node->nodeName] = $next; + $this->preParse($next); + $next->parse($node); + $this->postParse($next); + } + } + + protected function initFOObject(FO_Object $obj) { + } + + protected function preParse(FO_Object $obj) { + } + + protected function postParse(FO_Object $obj) { + } + + protected function processContents(DOMNode $node) { + foreach($node->childNodes as $child) { + if ($child->nodeType == self::NODE_TYPE_TEXT) { + $this->processContent($child->textContent); + } + } + } + + protected function processContent($content) { + //do nothing per default + } + + protected function getPdf() { + return $this->_pdf; + } + + protected function NotYetSupported($msg=0) { + echo "Not Yet Supported[".get_class($this)."]:$msg
"; + } + + protected function children() { + return $this->_children; + } + + /** + * Parse the color from either xml attribute value or FPDF + * internal representation + **/ + protected function parseColor($color) { + if (sscanf($color, "#%2x%2x%2x", $r, $g, $b) == 3) { + //parse RGB color + $r = sprintf("%d", $r); + $g = sprintf("%d", $g); + $b = sprintf("%d", $b); + } + else if(sscanf($color, "rgb(%d,%d,%d)", $r, $g, $b) == 3) { + } + else if (sscanf($color, "%f %f %f RG", $r, $g, $b) == 3) { + } + else if (sscanf($color, "%f G", $g) == 1) { + } + else { + //get color from word + switch ($color) { + case "white": + $r=255; $g=255; $b=255; + break; + case "red": + $r=255; $g=0; $b=0; + break; + case "green": + $r=0; $g=255; $b=0; + break; + case "blue": + $r=0; $g=0; $b=255; + break; + case "yellow": + $r=255; $g=255; $b=0; + break; + case "magenta": + $r=0; $g=255; $b=255; + break; + case "cyan": + $r=255; $g=0; $b=255; + break; + case "black": + default: + $r=0; $g=0; $b=0; + break; + } + } + return array($r, $g, $b); + } + + public abstract function parse(DOMNode $node); +} + +/** + * + * + * + */ +class FO_Root extends FO_Object{ + + function __construct(FPDF $pdf) { + $container = new FO_Context(); + parent::__construct(new FO_Container(), $pdf, $container); + $this->setContext("acceptPageBreak", true); + } + + private static $CHILDNODES = array ( + FO_LayoutMasterSet, + FO_PageSequence + ); + + public function parse(DOMNode $node) { + //no attrbutes which concerns us + $_children[$node->nodeName] = + $this->processChildNodes($node, self::$CHILDNODES); + } + + public function setContext($key, $value) { + parent::setContext($key, $value); + } +} + +?> diff --git a/include/xslfo2pdf/fo_instream.php b/include/xslfo2pdf/fo_instream.php new file mode 100644 index 000000000..ba7923a02 --- /dev/null +++ b/include/xslfo2pdf/fo_instream.php @@ -0,0 +1,44 @@ + +processChildNodes($node, self::$CHILDNODES); + } + + protected function postParse(FO_Object $obj) { + $this->setLocalContext("width", $obj->getContext("width")); + $this->setLocalContext("height", $this->getContext("height")+ + $obj->getContext("height")); + $this->setContext("y", $this->getContext("y") + + $obj->getContext("height")); + //echo "Post:".$this->getContext("y")."
"; + } +} +?> \ No newline at end of file diff --git a/include/xslfo2pdf/fo_layout.php b/include/xslfo2pdf/fo_layout.php new file mode 100644 index 000000000..d17e0a12b --- /dev/null +++ b/include/xslfo2pdf/fo_layout.php @@ -0,0 +1,597 @@ + +initLocalAttribute($node, "border-top-style"); + $this->initLocalAttribute($node, "border-right-style"); + $this->initLocalAttribute($node, "border-bottom-style"); + $this->initLocalAttribute($node, "border-left-style"); + $this->initLocalAttribute($node, "border-style"); + $this->initLocalAttribute($node, "border-top-color"); + $this->initLocalAttribute($node, "border-right-color"); + $this->initLocalAttribute($node, "border-bottom-color"); + $this->initLocalAttribute($node, "border-left-color"); + $this->initLocalAttribute($node, "border-color"); + $this->initLocalSizeAttribute($node, "border-top-width"); + $this->initLocalSizeAttribute($node, "border-right-width"); + $this->initLocalSizeAttribute($node, "border-bottom-width"); + $this->initLocalSizeAttribute($node, "border-left-width"); + $this->initLocalSizeAttribute($node, "border-width"); + $this->initAttribute($node, "font-style"); + $this->initAttribute($node, "font-weight"); + $this->initSizeAttribute($node, "font-size", "pt"); + $this->initAttribute($node, "font-family"); + $this->initAttribute($node, "color"); + $this->initLocalSizeAttribute($node, "width"); + $this->initLocalSizeAttribute($node, "height"); + $this->initLocalAttribute($node, "background-color"); + $this->initLocalAttribute($node, "background-image"); + $this->initLocalSizeAttribute($node, "space-before.optimum"); + $this->initLocalSizeAttribute($node, "space-after.optimum"); + $this->initLocalAttribute($node, "break-before"); + $this->initLocalAttribute($node, "break-after"); + $this->initSizeAttribute($node, "line-height"); + $this->initLocalSizeAttribute($node, "padding-top"); + //$this->initLocalSizeAttribute($node, "padding-bottom"); + $this->initLocalSizeAttribute($node, "padding-left"); + //$this->initLocalSizeAttribute($node, "padding-right"); + } + + public function convert($str) + { + //echo str_replace('EURO',chr(128),utf8_decode($str)); + return str_replace('EURO',chr(128),utf8_decode($str)); + } + + public function parse(DOMNode $node) { + //set default attributes + $this->initDefaultAttributes($node); + $this->initAttributes($node); + $this->initialize(); + $acceptPageBreak = $this->getContext("acceptPageBreak"); + + $pos = $this->getPosition(); + list($x, $y, $width, $height) = $pos[0]; + list($xOrig, $yOrig, $width, $height) = $pos[1]; + + //automatic page break if component exceeds page limits + $pdf = $this->getPdf(); + if ($yOrig > $pdf->PageBreakTrigger && + $pdf->AcceptPageBreak() && + $acceptPageBreak) { + $pdf->AddPage(); + $this->handleEvent("sync-position"); + $this->parse($node); + return; + } + + //update to inner position + $this->setContext("x", $x); + $this->setContext("y", $y); + + //draw us + $this->setColor(); + $this->setFont(); + + $this->startCapture(); + foreach($node->childNodes as $child) { + if ($child->nodeType == self::NODE_TYPE_TEXT) { + $this->preParseContent($child->textContent); + //oesi - add function utf8_decode for special chars (umlaut) + $this->processContent($this->convert($child->nodeValue)); + $this->postParseContent($child->textContent); + } + else { + $this->processChildNode($child, $this->getChildNodes()); + } + } + + //oesi - hack for ExternalGraphic Tag to show without content + if($this instanceof FO_ExternalGraphic) + $this->processContent($child->textContent); + //endhack + + $contentBuffer = $this->endCapture(); + + //update to outer position + $this->setContext("x", $xOrig); + $this->setContext("y", $yOrig); + + //recalc positions + $pos2 = $this->getPosition(); + //merge with X and y values of the original psoition + $pos2[0][0] = $pos[0][0]; + $pos2[0][1] = $pos[0][1]; + $pos2[1][0] = $pos[1][0]; + $pos2[1][1] = $pos[1][1]; + + //automatic page break if component exceeds page limits + $pdf = $this->getPdf(); + if ($pos2[1][3] < $pdf->PageBreakTrigger && + $pos2[1][3]+$this->getContext("y") > $pdf->PageBreakTrigger && + $pdf->AcceptPageBreak() && $acceptPageBreak) { + $pdf->AddPage(); + $this->handleEvent("sync-position"); + $this->parse($node); + return; + } + + $this->drawBordersAndBackground($pos2); + + //update to outer positions + $this->setLocalContext("width", $pos2[1][2]); + $this->setLocalContext("height", $pos2[1][3]); + + //append child buffer + $this->appendBuffer($contentBuffer); + + $this->closeDown(); + } + + /** + * Initialize additional attributes + **/ + protected function initAttributes(DOMNode $node) { + //do nothing + } + + protected function preParseContent($content) { + } + + protected function postParseContent($textcontent) { + } + + /** + * Draw borders and backgrounds according to the positions + * May be overwritten to specify behaviour + */ + protected function drawBordersAndBackground($pos) { + list($x, $y, $width, $height) = $pos[1]; + $this->drawBackground($x, $y, $width, $height); + $this->drawBorders($x, $y, $width, $height); + } + + protected function getChildNodes() { + //no child nodes per default + return array(); + } + + protected function initialize() { + $break_before = $this->getContext("break-before"); + $this->handleBreak($break_before); + } + + protected function closeDown() { + $pdf = $this->getPdf(); + if ($this->_oldFont) { + $pdf->SetFont($this->_oldFont, $this->_oldFontStyle, + $this->_oldFontSize); + } + else if ($this->_oldFontSize) { + $pdf->SetFontSize($this->oldFontSize); + } + + if ($this->_oldColor) { + $this->setTextColor($this->_oldColor, $pdf); + } + + $space_after = $this->getContext("space-after.optimum"); +// echo "Space-after:".$space_after.":".get_class($this).":".$this->getContext("height")."
"; + if ($space_after) { + $this->setLocalContext("height", $this->getContext("height") + + $space_after); + } + $break_after = $this->getContext("break-after"); + $this->handleBreak($break_after); + } + + protected function startCapture() { + if ($this->_buffer) { + echo "Already captureing
"; + return; + } + $this->_buffer = $this->getPdf()->startCapture(); + } + + protected function endCapture() { + if (!$this->_buffer) { + return; + } + $partBuffer = $this->getPdf()->endCapture($this->_buffer); + $this->_buffer = NULL; + return $partBuffer; + } + + protected function appendBuffer($buffer) { + if (!$buffer) { + //echo "Nothing to append
"; + return; + } + $this->getPdf()->appendBuffer($buffer); + } + + protected function getPosition() { + $space_before = $this->getContext("space-before.optimum"); + $height = $this->getContext("line-height"); + $pdf = $this->getPdf(); + + $bw_top = $this->getContext("border-top-width"); + $bw_left = $this->getContext("border-left-width"); + $bw_right = $this->getContext("border-right-width"); + $bw_bottom = $this->getContext("border-bottom-width"); + $padding_left = $this->getContext("padding-left"); + $padding_top = $this->getContext("padding-top"); + + $bw = $this->getContext("border-width"); + $xx = $this->getContext("x"); + $yy = $this->getContext("y"); + + $height2 = $this->getContext("height"); + if (!$height || $height < $height2) { + $height = $height2; + } + $width = $this->getContext("width"); + if (!$bw_top) {$bw_top = $bw;} + if (!$bw_bottom) {$bw_bottom = $bw;} + if (!$bw_right) {$bw_right = $bw;} + if (!$bw_left) {$bw_left = $bw;} + + sscanf($bw_top, "%f%s", $wt, $unit); + sscanf($bw_left, "%f%s", $wl, $unit); + sscanf($bw_right, "%f%s", $wr, $unit); + sscanf($bw_bottom, "%f%s", $wb, $unit); + $xx += $wl; + $yy += $wt; + $height += $wt+$wb; + $width += $wl+$wr; + + if ($space_before) { + //echo "Spacebefore:$space_before
"; + $yy += $space_before; + $height += $space_before; + } + if ($padding_left) { + $xx += $padding_left; + } + if ($padding_top) { + $yy += $padding_top; + } + + return + array( + //inner coordinates + array($xx, $yy, $width-$wl-$wr, $height-$wt-$wb), + //outer coordinates + array($xx-$wl, $yy-$wr, $width, $height)); + } + + protected function setColor() { + $pdf = $this->getPdf(); + $this->_oldColor = $pdf->GetTextColor(); + $color = $this->getContext("color"); + if ($color) { + $this->setTextColor($color, $pdf); + } + } + + protected function setFont() { + $pdf = $this->getPdf(); + $this->_oldFont = $pdf->GetFontFamily(); + $this->_oldFontStyle = $pdf->GetFontStyle(); + $this->_oldFontSize = $pdf->GetFontSizePt(); + $weight = $this->getContext("font-weight"); + $style = $this->getContext("font-style"); + $family = $this->getContext("font-family"); + $size = $this->getContext("font-size"); + if ($family) { + $f = $family; + } + else { + $f = $this->_oldFont; + } + if ($weight || $style) { + if ($weight) { + $st = "B"; + } + if ($style) { + //TODO: check which styles are supported + } + } + else { + $st = $this->_oldFontStyle; + } + if ($size) { + $sz = $size; + } + else { + $sz = $this->_oldFontSize; + } + if ($pdf->FontExists($f, $st)) { + $pdf->SetFont($f, $st, $sz); + } + else if ($pdf->FontExists($this->_oldFont, $st)) { + $pdf->SetFont($this->_oldFont, $st, $sz); + } + else { + //adjust only size + $pdf->SetFontSize($sz); + } + } + + protected function drawBorders($x, $y, $width, $height) { + $bs_top = $this->getContext("border-top-style"); + $bs_left = $this->getContext("border-left-style"); + $bs_right = $this->getContext("border-right-style"); + $bs_bottom = $this->getContext("border-bottom-style"); + $bs = $this->getContext("border-style"); + $bc_top = $this->getContext("border-top-color"); + $bc_left = $this->getContext("border-left-color"); + $bc_right = $this->getContext("border-right-color"); + $bc_bottom = $this->getContext("border-bottom-color"); + $bc = $this->getContext("border-color"); + $bw_top = $this->getContext("border-top-width"); + $bw_left = $this->getContext("border-left-width"); + $bw_right = $this->getContext("border-right-width"); + $bw_bottom = $this->getContext("border-bottom-width"); + $bw = $this->getContext("border-width"); + + $pdf = $this->getPdf(); + if (!$bs_top) {$bs_top = $bs;} + if (!$bs_bottom) {$bs_bottom = $bs;} + if (!$bs_right) {$bs_right = $bs;} + if (!$bs_left) {$bs_left = $bs;} + if (!$bc_top) {$bc_top = $bc;} + if (!$bc_bottom) {$bc_bottom = $bc;} + if (!$bc_right) {$bc_right = $bc;} + if (!$bc_left) {$bc_left = $bc;} + if (!$bw_top) {$bw_top = $bw;} + if (!$bw_bottom) {$bw_bottom = $bw;} + if (!$bw_right) {$bw_right = $bw;} + if (!$bw_left) {$bw_left = $bw;} + + sscanf($bw_top, "%f%s", $wt, $unit); + sscanf($bw_left, "%f%s", $wl, $unit); + sscanf($bw_right, "%f%s", $wr, $unit); + sscanf($bw_bottom, "%f%s", $wb, $unit); + $wt /= 2; + $wl /= 2; + $wr /= 2; + $wb /= 2; + + $width -= $wl+$wr; + $height -= $wt+$wb; + $x += $wl; + $y += $wt; + $this->drawLine($x, $y, $x+$width, $y, $bs_top, $bc_top, + $bw_top, $pdf); + $this->drawLine($x, $y, $x, $y+$height, $bs_left, + $bc_left, $bw_left,$pdf); + $this->drawLine($x, $y+$height, $x+$width, $y+$height, + $bs_bottom, $bc_bottom, $bw_bottom, $pdf); + $this->drawLine($x+$width, $y, $x+$width, $y+$height, + $bs_right, $bc_right,$bw_right, $pdf); + } + + protected function drawBackground($x, $y, $width, $height) { + $pdf = $this->GetPdf(); + $bg_c = $this->getContext("background-color"); + $bg_img = $this->getContext("background-image"); + if ($bg_c) { + $oldColor = $pdf->GetFillColor(); + list($r, $g, $b) = $this->parseColor($bg_c); + $pdf->SetFillColor($r, $g, $b); + $pdf->Rect($x, $y, $width, $height, "F"); + list($r, $g, $b) = $this->parseColor($oldColor); + $pdf->SetFillColor($r, $g, $b); + } + else if ($bg_img) { + $this->NotYetSupported("background-image"); + } + } + + private function drawLine($x, $y, $x2, $y2, $style, $color, $width, &$pdf) { + $oldColor = $pdf->GetDrawColor(); + $oldLineWidth = $pdf->GetLineWidth(); + if ($width) { + $pdf->SetLineWidth($width); + } + $this->setDrawColor($color, $pdf); + switch ($style) { + case "dotted": + $pdf->SetDash(0.5, 0.5); //1mm on, 1mm off + $pdf->Line($x, $y, $x2, $y2); + $pdf->SetDash(); //restore no dash + return; + case "dashed": + $pdf->SetDash(2,2); //2mm on, 2mm off + $pdf->Line($x, $y, $x2, $y2); + $pdf->SetDash(); //restore no dash + return; + case "solid": + $pdf->Line($x, $y, $x2, $y2); + return; + case "double": + case "groove": + case "ridge": + case "inset": + case "outset": + //TODO:implement + echo "border style '$style' not yet supported
"; + case "none": + case "hidden": + default: + //do nothing + return; + } + $this->setDrawColor($oldColor, $pdf); + $this->setLineWidth($oldLineWidth); + } + + private function setDrawColor($color, &$pdf) { + if ($color == '') { + return; + } + list($r, $g, $b) = $this->parseColor($color); + $pdf->SetDrawColor($r, $g, $b); + } + + private function setTextColor($color, &$pdf) { + if ($color == '') { + return; + } + list($r, $g, $b) = $this->parseColor($color); + $pdf->SetTextColor($r, $g, $b); + } + + protected function handleBreak($break) { + if (!$break) { + return; + } + $pdf = $this->getPdf(); + switch($break) { + case "page": + $pdf->AddPage(); + $this->handleEvent("sync-position"); + return; + default: + $this->NotYetSupported("Break:$break"); + } + } +} + +class FO_LayoutMasterSet extends FO_Object { + private $name; + + public function parse(DOMNode $node) { + $this->name = $node->attributes->getNamedItem("master-name"); + $this->addReference($this, $this->name); + } +} + +class FO_PageSequence extends FO_Object { + private static $CHILDNODES = array( + FO_Flow + ); + + public function parse(DOMNode $node) { + $masterRef = $node->attributes->getNamedItem("master-reference"); + if ($masterRef) { + $master = $this->resolveReference(FO_LayoutMasterSet, $masterRef); + //TODO: do something with this master + } + $pdf = $this->getPdf(); + $pdf->AddPage(); + $this->handleEvent("sync-position"); + $this->processChildNodes($node, self::$CHILDNODES); + } +} + +abstract class FO_FlowContainer extends FO_Object { + + protected function postParse(FO_Object $obj) { + $acceptPageBreak = $this->getContext("acceptPageBreak"); + $this->setLocalContext("width", $obj->getContext("width")); + $height = $this->getContext("height")+$obj->getContext("height"); + $this->setLocalContext("height", $height); + $y = $this->getContext("y")+$obj->getContext("height"); + $pdf = $this->getPdf(); + if ($height < $pdf->PageBreakTrigger && + $y > $pdf->PageBreakTrigger && + $pdf->AcceptPageBreak() && + $acceptPageBreak) { + + $pdf->AddPage(); + $this->handleEvent("sync-position"); + //echo "Page break on .".get_class($obj)."
"; + } + else { + $this->setContext("y", $y); + //echo "Move :".get_class($obj).":".$y.":".$obj->getContext("height")."
;"; + } + } +} + +class FO_Flow extends FO_FlowContainer { + private static $CHILDNODES = array( + FO_Block, + FO_Table, + FO_BlockContainer, + FO_TableAndCaption, + FO_ListBlock + ); + + public function parse(DOMNode $node) { + //TODO: use attributes + $this->processChildNodes($node, self::$CHILDNODES); + } +} + +class FO_BlockContainer extends FO_LayoutObject { + private static $CHILDNODES = array( + FO_Block, + FO_BlockContainer, + FO_TableAndCaption, + FO_Table, + FO_ListBlock); + + protected function initAttributes(DOMNode $node) { + $this->initLocalSizeAttribute($node, "position"); + $this->initLocalSizeAttribute($node, "top"); + $this->initLocalSizeAttribute($node, "left"); + $this->initLocalSizeAttribute($node, "height"); + $this->initLocalSizeAttribute($node, "width"); + } + + protected function getChildNodes() { + return self::$CHILDNODES; + } + + public function parse(DOMNode $node) { + $this->initAttributes($node); + $position = $this->getContext("position"); + if ($position == "absolute"){ + //init absolute positions + $top = $this->getContext("top"); + $left = $this->getContext("left"); + $this->setContext("x", $left); + $this->setContext("y", $top); + $this->setContext("acceptPageBreak", false); + } + parent::parse($node); + } + +} + +class FO_ListBlock extends FO_LayoutObject { + +} + +?> diff --git a/include/xslfo2pdf/fo_svg.php b/include/xslfo2pdf/fo_svg.php new file mode 100644 index 000000000..ed77f8414 --- /dev/null +++ b/include/xslfo2pdf/fo_svg.php @@ -0,0 +1,153 @@ + +getAttribute($node, "style"); + + $styles = explode(";", $st); + foreach ($styles as $style) { + $params = explode(":", $style); + $this->setLocalContext($params[0], $params[1]); + } + } + + protected function initStyleAttribute(DOMNode $node) { + $st = $this->getAttribute($node, "style"); + + $styles = explode(";", $st); + foreach ($styles as $style) { + $params = explode(":", $style); + $this->setContext($params[0], $params[1]); + } + } +} + +abstract class SVG_StyleObject extends SVG_Object { + + protected function initLocalSizeAttribute(DOMNode $node, $key, $to="mm", $from="pt"){ + parent::initLocalSizeAttribute($node, $key, $to, $from); + } + + protected function initSizeAttribute(DOMNode $node, $key, $to="mm", $from="pt"){ + parent::initSizeAttribute($node, $key, $to, $from); + } + + protected function getLocalSizeAttribute(DOMNode $node, $key, $to="mm", $from="pt"){ + return parent::getLocalSizeAttribute($node, $key, $to, $from); + } + + protected function getSizeAttribute(DOMNode $node, $key, $to="mm", $from="pt"){ + return parent::getSizeAttribute($node, $key, $to, $from); + } + + protected function calcInternalValue($value, $to = "mm", $from="pt") { + return parent::calcInternalValue($value, $to, $from); + } + + public function parse(DOMNode $node) { + $pdf = $this->getPdf(); + $buf = $pdf->startCapture(); + $this->initStyleAttribute($node); + $this->initSizeAttribute($node, "x"); + $this->initSizeAttribute($node, "y"); + $this->initLocalSizeAttribute($node, "width"); + $this->initLocalSizeAttribute($node, "height"); + $this->initAttribute($node, "fill"); + $this->initAttribute($node, "stroke"); + $this->initSizeAttribute($node, "stroke-width"); + + $fill = $this->getContext("fill"); + $stroke = $this->getContext("stroke"); + $strokeWidth = $this->getContext("stroke-width"); + $sargs = ""; + $oldFillColor = $pdf->GetFillColor(); + $oldDrawColor = $pdf->GetDrawColor(); + $oldLineWidth = $pdf->GetLineWidth(); + if ($fill == "none") { + $fill = NULL; + } + if ($stroke == "none") { + $stroke = NULL; + } + if ($fill) { + list($r, $g, $b) = $this->parseColor($fill); + $pdf->setFillColor($r, $g, $b); + $sargs .= "F"; + } + if ($stroke) { + list($r, $g, $b) = $this->parseColor($stroke); + $pdf->setDrawColor($r, $g, $b); + $sargs .= "D"; + } + if ($strokeWidth) { + $pdf->SetLineWidth($strokeWidth); + } + + $this->process($node, $sargs); + + if ($fill) { + list($r, $g, $b) = $this->parseColor($oldFillColor); + $pdf->setFillColor($r, $g, $b); + } + if ($stroke) { + list($r, $g, $b) = $this->parseColor($oldStrokeColor); + $pdf->setDrawColor($r, $g, $b); + } + if ($strokeWidth) { + $pdf->SetLineWidth($oldLineWidth); + } + $buf = $pdf->endCapture($buf); + //echo get_class($this).":$buf
"; + $pdf->appendBuffer($buf); + } + protected abstract function process(DOMNode $node, $sargs=""); +} + +class FO_SVG extends SVG_Object { + + public static $CHILDNODES = array( + SVG_Circle, + SVG_Rect, + SVG_Ellipse, + SVG_Line, + SVG_Polygon, + SVG_G, + SVG_Text, + SVG_Path + ); + + public function parse(DOMNode $node) { + $this->initLocalSizeAttribute($node, "width", "mm", "pt"); + $this->initLocalSizeAttribute($node, "height", "mm", "pt"); + $this->setContext("xOrig", $this->getContext("x")); + $this->setContext("yOrig", $this->getContext("y")); + $this->setContext("x", 0); + $this->setContext("y", 0); + $pdf = $this->getPdf(); + $this->processChildNodes($node, self::$CHILDNODES); + $this->setContext("y", $this->getContext("yOrig")+$this->getContext("height")); + $this->setContext("x", $this->getContext("xOrig")); + } +} +?> \ No newline at end of file diff --git a/include/xslfo2pdf/fo_table.php b/include/xslfo2pdf/fo_table.php new file mode 100644 index 000000000..8dd5eb5f8 --- /dev/null +++ b/include/xslfo2pdf/fo_table.php @@ -0,0 +1,275 @@ + + + + + + + + + + + Car + + + Price + + + + + + + Volvo + + + $50000 + + + + + SAAB + + + $48000 + + + + + + + + */ +?> +processChildNodes($node, self::$CHILDNODES); + } +} + +class FO_Table extends FO_LayoutObject { + private $colCount = 0; + + private static $CHILDNODES = array( + FO_TableColumn, + FO_TableHeader, + FO_TableFooter, + FO_TableBody + ); + + protected function getChildNodes() { + return self::$CHILDNODES; + } + + protected function initFOObject(FO_Object $col) { + if (!$col instanceof FO_TableColumn) { + return; + } + $col->setContext("column", $this->colCount++); + } + + protected function postParse(FO_Object $obj) { + if ($obj instanceof FO_TableHeader) { + $this->setLocalContext("width", $obj->getContext("width")); + $this->setLocalContext("height", $this->getContext("height")+ + $obj->getContext("height")); + $this->setContext("y", $this->getContext("y") + + $obj->getContext("height")); + } + else if($obj instanceof FO_TableBody) { + $this->setLocalContext("width", $obj->getContext("width")); + $this->setLocalContext("height", $this->getContext("height")+ + $obj->getContext("height")); + $this->setContext("y", $this->getContext("y") + + $obj->getContext("height")); + } + else if($obj instanceof FO_TableColumn) { + $col = $obj->getContext("column"); + $this->setContext("column-$col-width", $obj->getContext("width")); + } + } +} + +class FO_TableCaption extends FO_Object { + + private static $CHILDNODES = array( + FO_Block, + FO_BlockContainer, + FO_ListBlock + ); + + public function parse(DOMNode $node) { + $this->processChildNodes($node, self::$CHILDNODES); + } +} + +class FO_TableColumn extends FO_Object { + + private static $CHILDNODES = array(); + + public function parse(DOMNode $node) { + $width = $this->getSizeAttribute($node, "column-width"); + //calc internal width + $this->setContext("width", $width); + $this->processChildNodes($node, self::$CHILDNODES); + } +} + +class FO_TableRow extends FO_LayoutObject { + + private $colIndex = 0; + + private static $CHILDNODES = array( + FO_TableCell + ); + + protected function getChildNodes() { + return self::$CHILDNODES; + } + + protected function initFOObject(FO_Object $col) { + if (!$col instanceof FO_TableCell) { + return; + } + $col->setContext("column", $this->colIndex++); + } + + protected function postParse(FO_Object $obj) { + if ($obj instanceof FO_TableCell) { + $this->setContext("x", $this->getContext("x")+ + $obj->getContext("width")); + $this->setLocalContext("width", $this->getContext("width")+ + $obj->getContext("width")); + if ($this->getContext("height") < $obj->getContext("height")) { + $this->setLocalContext("height", $obj->getContext("height")); + } + } + else if ($obj instanceof FO_TableRow) { + $this->setLocalContext("width", $obj->getContext("width")); + $this->setLocalContext("height", $this->getContext("height")+ + $obj->getContext("height")); + $this->setContext("y", $this->getContext("y") + + $obj->getContext("height")); + } + } +} + +class FO_TableHeader extends FO_TableRow { + + private static $CHILDNODES = array( + FO_TableCell, + FO_TableRow + ); + + protected function getChildNodes() { + return self::$CHILDNODES; + } +} + +class FO_TableFooter extends FO_LayoutObject { + + private static $CHILDNODES = array( + FO_TableCell, + FO_TableRow + ); + + protected function getChildNodes() { + return self::$CHILDNODES; + } +} + +class FO_TableBody extends FO_LayoutObject { + + private static $CHILDNODES = array( + FO_TableCell, + FO_TableRow + ); + + protected function getChildNodes() { + return self::$CHILDNODES; + } + + protected function postParse(FO_Object $obj) { + if ($obj instanceof FO_TableRow) { + $this->setLocalContext("width", $obj->getContext("width")); + $this->setLocalContext("height", $this->getContext("height")+ + $obj->getContext("height")); + $this->setContext("y", $this->getContext("y") + + $obj->getContext("height")); + } + } +} + +class FO_TableCell extends FO_LayoutObject { + + private static $CHILDNODES = array( + FO_Block, + FO_BlockContainer, + FO_ListBlock, + FO_Table, + FO_TableAndCaption + ); + + + protected function getChildNodes() { + return self::$CHILDNODES; + } + + public function parse(DOMNode $node) { + $col = $this->getContext("column"); + $width = $this->getContext("column-$col-width"); + $this->setLocalContext("width", $width); + + parent::parse($node); + } + + /** + * Overlap borders that the total width isn't larger than the + * specified + */ + protected function drawBordersAndBackground($pos) { + list($x1, $y1, $width1, $height1) = $pos[0]; + list($x2, $y2, $width2, $height2) = $pos[1]; + $xd = ($x1-$x2)/2; + $yd = ($y1-$y2)/2; + $wd = ($width2-$width1)/2; + $hd = ($height2-$height1)/2; + $this->drawBackground($x2, $y2, $width2+$wd, $height2+$hd); + $this->drawBorders($x2, $y2, $width2+$wd, $height2+$hd); + } + + protected function postParse(FO_Object $obj) { + $this->setLocalContext("height", $this->getContext("height")+ + $obj->getContext("height")+0.5); // oesi - add +0.5 for tablespace + } +} +?> diff --git a/include/xslfo2pdf/fpdf/font/courier.php b/include/xslfo2pdf/fpdf/font/courier.php new file mode 100644 index 000000000..913f9a453 --- /dev/null +++ b/include/xslfo2pdf/fpdf/font/courier.php @@ -0,0 +1,7 @@ + diff --git a/include/xslfo2pdf/fpdf/font/helvetica.php b/include/xslfo2pdf/fpdf/font/helvetica.php new file mode 100644 index 000000000..ca94cdf21 --- /dev/null +++ b/include/xslfo2pdf/fpdf/font/helvetica.php @@ -0,0 +1,15 @@ +278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278, + chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>278,'"'=>355,'#'=>556,'$'=>556,'%'=>889,'&'=>667,'\''=>191,'('=>333,')'=>333,'*'=>389,'+'=>584, + ','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>278,';'=>278,'<'=>584,'='=>584,'>'=>584,'?'=>556,'@'=>1015,'A'=>667, + 'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>500,'K'=>667,'L'=>556,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944, + 'X'=>667,'Y'=>667,'Z'=>611,'['=>278,'\\'=>278,']'=>278,'^'=>469,'_'=>556,'`'=>333,'a'=>556,'b'=>556,'c'=>500,'d'=>556,'e'=>556,'f'=>278,'g'=>556,'h'=>556,'i'=>222,'j'=>222,'k'=>500,'l'=>222,'m'=>833, + 'n'=>556,'o'=>556,'p'=>556,'q'=>556,'r'=>333,'s'=>500,'t'=>278,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>500,'{'=>334,'|'=>260,'}'=>334,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>222,chr(131)=>556, + chr(132)=>333,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>222,chr(146)=>222,chr(147)=>333,chr(148)=>333,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000, + chr(154)=>500,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>260,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333, + chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>556,chr(182)=>537,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>667,chr(193)=>667,chr(194)=>667,chr(195)=>667,chr(196)=>667,chr(197)=>667, + chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722, + chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>500,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>556,chr(241)=>556, + chr(242)=>556,chr(243)=>556,chr(244)=>556,chr(245)=>556,chr(246)=>556,chr(247)=>584,chr(248)=>611,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500); +?> diff --git a/include/xslfo2pdf/fpdf/font/helveticab.php b/include/xslfo2pdf/fpdf/font/helveticab.php new file mode 100644 index 000000000..276cfa8cb --- /dev/null +++ b/include/xslfo2pdf/fpdf/font/helveticab.php @@ -0,0 +1,15 @@ +278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278, + chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>333,'"'=>474,'#'=>556,'$'=>556,'%'=>889,'&'=>722,'\''=>238,'('=>333,')'=>333,'*'=>389,'+'=>584, + ','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>333,';'=>333,'<'=>584,'='=>584,'>'=>584,'?'=>611,'@'=>975,'A'=>722, + 'B'=>722,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>556,'K'=>722,'L'=>611,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944, + 'X'=>667,'Y'=>667,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>584,'_'=>556,'`'=>333,'a'=>556,'b'=>611,'c'=>556,'d'=>611,'e'=>556,'f'=>333,'g'=>611,'h'=>611,'i'=>278,'j'=>278,'k'=>556,'l'=>278,'m'=>889, + 'n'=>611,'o'=>611,'p'=>611,'q'=>611,'r'=>389,'s'=>556,'t'=>333,'u'=>611,'v'=>556,'w'=>778,'x'=>556,'y'=>556,'z'=>500,'{'=>389,'|'=>280,'}'=>389,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>278,chr(131)=>556, + chr(132)=>500,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>278,chr(146)=>278,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000, + chr(154)=>556,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>280,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333, + chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>611,chr(182)=>556,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722, + chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722, + chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>556,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>611,chr(241)=>611, + chr(242)=>611,chr(243)=>611,chr(244)=>611,chr(245)=>611,chr(246)=>611,chr(247)=>584,chr(248)=>611,chr(249)=>611,chr(250)=>611,chr(251)=>611,chr(252)=>611,chr(253)=>556,chr(254)=>611,chr(255)=>556); +?> diff --git a/include/xslfo2pdf/fpdf/font/helveticabi.php b/include/xslfo2pdf/fpdf/font/helveticabi.php new file mode 100644 index 000000000..8d2177432 --- /dev/null +++ b/include/xslfo2pdf/fpdf/font/helveticabi.php @@ -0,0 +1,15 @@ +278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278, + chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>333,'"'=>474,'#'=>556,'$'=>556,'%'=>889,'&'=>722,'\''=>238,'('=>333,')'=>333,'*'=>389,'+'=>584, + ','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>333,';'=>333,'<'=>584,'='=>584,'>'=>584,'?'=>611,'@'=>975,'A'=>722, + 'B'=>722,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>556,'K'=>722,'L'=>611,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944, + 'X'=>667,'Y'=>667,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>584,'_'=>556,'`'=>333,'a'=>556,'b'=>611,'c'=>556,'d'=>611,'e'=>556,'f'=>333,'g'=>611,'h'=>611,'i'=>278,'j'=>278,'k'=>556,'l'=>278,'m'=>889, + 'n'=>611,'o'=>611,'p'=>611,'q'=>611,'r'=>389,'s'=>556,'t'=>333,'u'=>611,'v'=>556,'w'=>778,'x'=>556,'y'=>556,'z'=>500,'{'=>389,'|'=>280,'}'=>389,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>278,chr(131)=>556, + chr(132)=>500,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>278,chr(146)=>278,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000, + chr(154)=>556,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>280,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333, + chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>611,chr(182)=>556,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722, + chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722, + chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>556,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>611,chr(241)=>611, + chr(242)=>611,chr(243)=>611,chr(244)=>611,chr(245)=>611,chr(246)=>611,chr(247)=>584,chr(248)=>611,chr(249)=>611,chr(250)=>611,chr(251)=>611,chr(252)=>611,chr(253)=>556,chr(254)=>611,chr(255)=>556); +?> diff --git a/include/xslfo2pdf/fpdf/font/helveticai.php b/include/xslfo2pdf/fpdf/font/helveticai.php new file mode 100644 index 000000000..88bf4371b --- /dev/null +++ b/include/xslfo2pdf/fpdf/font/helveticai.php @@ -0,0 +1,15 @@ +278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278, + chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>278,'"'=>355,'#'=>556,'$'=>556,'%'=>889,'&'=>667,'\''=>191,'('=>333,')'=>333,'*'=>389,'+'=>584, + ','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>278,';'=>278,'<'=>584,'='=>584,'>'=>584,'?'=>556,'@'=>1015,'A'=>667, + 'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>500,'K'=>667,'L'=>556,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944, + 'X'=>667,'Y'=>667,'Z'=>611,'['=>278,'\\'=>278,']'=>278,'^'=>469,'_'=>556,'`'=>333,'a'=>556,'b'=>556,'c'=>500,'d'=>556,'e'=>556,'f'=>278,'g'=>556,'h'=>556,'i'=>222,'j'=>222,'k'=>500,'l'=>222,'m'=>833, + 'n'=>556,'o'=>556,'p'=>556,'q'=>556,'r'=>333,'s'=>500,'t'=>278,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>500,'{'=>334,'|'=>260,'}'=>334,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>222,chr(131)=>556, + chr(132)=>333,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>222,chr(146)=>222,chr(147)=>333,chr(148)=>333,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000, + chr(154)=>500,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>260,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333, + chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>556,chr(182)=>537,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>667,chr(193)=>667,chr(194)=>667,chr(195)=>667,chr(196)=>667,chr(197)=>667, + chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722, + chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>500,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>556,chr(241)=>556, + chr(242)=>556,chr(243)=>556,chr(244)=>556,chr(245)=>556,chr(246)=>556,chr(247)=>584,chr(248)=>611,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500); +?> diff --git a/include/xslfo2pdf/fpdf/font/makefont/cp1250.map b/include/xslfo2pdf/fpdf/font/makefont/cp1250.map new file mode 100644 index 000000000..33a555eeb --- /dev/null +++ b/include/xslfo2pdf/fpdf/font/makefont/cp1250.map @@ -0,0 +1,251 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+20AC Euro +!82 U+201A quotesinglbase +!84 U+201E quotedblbase +!85 U+2026 ellipsis +!86 U+2020 dagger +!87 U+2021 daggerdbl +!89 U+2030 perthousand +!8A U+0160 Scaron +!8B U+2039 guilsinglleft +!8C U+015A Sacute +!8D U+0164 Tcaron +!8E U+017D Zcaron +!8F U+0179 Zacute +!91 U+2018 quoteleft +!92 U+2019 quoteright +!93 U+201C quotedblleft +!94 U+201D quotedblright +!95 U+2022 bullet +!96 U+2013 endash +!97 U+2014 emdash +!99 U+2122 trademark +!9A U+0161 scaron +!9B U+203A guilsinglright +!9C U+015B sacute +!9D U+0165 tcaron +!9E U+017E zcaron +!9F U+017A zacute +!A0 U+00A0 space +!A1 U+02C7 caron +!A2 U+02D8 breve +!A3 U+0141 Lslash +!A4 U+00A4 currency +!A5 U+0104 Aogonek +!A6 U+00A6 brokenbar +!A7 U+00A7 section +!A8 U+00A8 dieresis +!A9 U+00A9 copyright +!AA U+015E Scedilla +!AB U+00AB guillemotleft +!AC U+00AC logicalnot +!AD U+00AD hyphen +!AE U+00AE registered +!AF U+017B Zdotaccent +!B0 U+00B0 degree +!B1 U+00B1 plusminus +!B2 U+02DB ogonek +!B3 U+0142 lslash +!B4 U+00B4 acute +!B5 U+00B5 mu +!B6 U+00B6 paragraph +!B7 U+00B7 periodcentered +!B8 U+00B8 cedilla +!B9 U+0105 aogonek +!BA U+015F scedilla +!BB U+00BB guillemotright +!BC U+013D Lcaron +!BD U+02DD hungarumlaut +!BE U+013E lcaron +!BF U+017C zdotaccent +!C0 U+0154 Racute +!C1 U+00C1 Aacute +!C2 U+00C2 Acircumflex +!C3 U+0102 Abreve +!C4 U+00C4 Adieresis +!C5 U+0139 Lacute +!C6 U+0106 Cacute +!C7 U+00C7 Ccedilla +!C8 U+010C Ccaron +!C9 U+00C9 Eacute +!CA U+0118 Eogonek +!CB U+00CB Edieresis +!CC U+011A Ecaron +!CD U+00CD Iacute +!CE U+00CE Icircumflex +!CF U+010E Dcaron +!D0 U+0110 Dcroat +!D1 U+0143 Nacute +!D2 U+0147 Ncaron +!D3 U+00D3 Oacute +!D4 U+00D4 Ocircumflex +!D5 U+0150 Ohungarumlaut +!D6 U+00D6 Odieresis +!D7 U+00D7 multiply +!D8 U+0158 Rcaron +!D9 U+016E Uring +!DA U+00DA Uacute +!DB U+0170 Uhungarumlaut +!DC U+00DC Udieresis +!DD U+00DD Yacute +!DE U+0162 Tcommaaccent +!DF U+00DF germandbls +!E0 U+0155 racute +!E1 U+00E1 aacute +!E2 U+00E2 acircumflex +!E3 U+0103 abreve +!E4 U+00E4 adieresis +!E5 U+013A lacute +!E6 U+0107 cacute +!E7 U+00E7 ccedilla +!E8 U+010D ccaron +!E9 U+00E9 eacute +!EA U+0119 eogonek +!EB U+00EB edieresis +!EC U+011B ecaron +!ED U+00ED iacute +!EE U+00EE icircumflex +!EF U+010F dcaron +!F0 U+0111 dcroat +!F1 U+0144 nacute +!F2 U+0148 ncaron +!F3 U+00F3 oacute +!F4 U+00F4 ocircumflex +!F5 U+0151 ohungarumlaut +!F6 U+00F6 odieresis +!F7 U+00F7 divide +!F8 U+0159 rcaron +!F9 U+016F uring +!FA U+00FA uacute +!FB U+0171 uhungarumlaut +!FC U+00FC udieresis +!FD U+00FD yacute +!FE U+0163 tcommaaccent +!FF U+02D9 dotaccent diff --git a/include/xslfo2pdf/fpdf/font/makefont/cp1251.map b/include/xslfo2pdf/fpdf/font/makefont/cp1251.map new file mode 100644 index 000000000..b5960fe4c --- /dev/null +++ b/include/xslfo2pdf/fpdf/font/makefont/cp1251.map @@ -0,0 +1,255 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+0402 afii10051 +!81 U+0403 afii10052 +!82 U+201A quotesinglbase +!83 U+0453 afii10100 +!84 U+201E quotedblbase +!85 U+2026 ellipsis +!86 U+2020 dagger +!87 U+2021 daggerdbl +!88 U+20AC Euro +!89 U+2030 perthousand +!8A U+0409 afii10058 +!8B U+2039 guilsinglleft +!8C U+040A afii10059 +!8D U+040C afii10061 +!8E U+040B afii10060 +!8F U+040F afii10145 +!90 U+0452 afii10099 +!91 U+2018 quoteleft +!92 U+2019 quoteright +!93 U+201C quotedblleft +!94 U+201D quotedblright +!95 U+2022 bullet +!96 U+2013 endash +!97 U+2014 emdash +!99 U+2122 trademark +!9A U+0459 afii10106 +!9B U+203A guilsinglright +!9C U+045A afii10107 +!9D U+045C afii10109 +!9E U+045B afii10108 +!9F U+045F afii10193 +!A0 U+00A0 space +!A1 U+040E afii10062 +!A2 U+045E afii10110 +!A3 U+0408 afii10057 +!A4 U+00A4 currency +!A5 U+0490 afii10050 +!A6 U+00A6 brokenbar +!A7 U+00A7 section +!A8 U+0401 afii10023 +!A9 U+00A9 copyright +!AA U+0404 afii10053 +!AB U+00AB guillemotleft +!AC U+00AC logicalnot +!AD U+00AD hyphen +!AE U+00AE registered +!AF U+0407 afii10056 +!B0 U+00B0 degree +!B1 U+00B1 plusminus +!B2 U+0406 afii10055 +!B3 U+0456 afii10103 +!B4 U+0491 afii10098 +!B5 U+00B5 mu +!B6 U+00B6 paragraph +!B7 U+00B7 periodcentered +!B8 U+0451 afii10071 +!B9 U+2116 afii61352 +!BA U+0454 afii10101 +!BB U+00BB guillemotright +!BC U+0458 afii10105 +!BD U+0405 afii10054 +!BE U+0455 afii10102 +!BF U+0457 afii10104 +!C0 U+0410 afii10017 +!C1 U+0411 afii10018 +!C2 U+0412 afii10019 +!C3 U+0413 afii10020 +!C4 U+0414 afii10021 +!C5 U+0415 afii10022 +!C6 U+0416 afii10024 +!C7 U+0417 afii10025 +!C8 U+0418 afii10026 +!C9 U+0419 afii10027 +!CA U+041A afii10028 +!CB U+041B afii10029 +!CC U+041C afii10030 +!CD U+041D afii10031 +!CE U+041E afii10032 +!CF U+041F afii10033 +!D0 U+0420 afii10034 +!D1 U+0421 afii10035 +!D2 U+0422 afii10036 +!D3 U+0423 afii10037 +!D4 U+0424 afii10038 +!D5 U+0425 afii10039 +!D6 U+0426 afii10040 +!D7 U+0427 afii10041 +!D8 U+0428 afii10042 +!D9 U+0429 afii10043 +!DA U+042A afii10044 +!DB U+042B afii10045 +!DC U+042C afii10046 +!DD U+042D afii10047 +!DE U+042E afii10048 +!DF U+042F afii10049 +!E0 U+0430 afii10065 +!E1 U+0431 afii10066 +!E2 U+0432 afii10067 +!E3 U+0433 afii10068 +!E4 U+0434 afii10069 +!E5 U+0435 afii10070 +!E6 U+0436 afii10072 +!E7 U+0437 afii10073 +!E8 U+0438 afii10074 +!E9 U+0439 afii10075 +!EA U+043A afii10076 +!EB U+043B afii10077 +!EC U+043C afii10078 +!ED U+043D afii10079 +!EE U+043E afii10080 +!EF U+043F afii10081 +!F0 U+0440 afii10082 +!F1 U+0441 afii10083 +!F2 U+0442 afii10084 +!F3 U+0443 afii10085 +!F4 U+0444 afii10086 +!F5 U+0445 afii10087 +!F6 U+0446 afii10088 +!F7 U+0447 afii10089 +!F8 U+0448 afii10090 +!F9 U+0449 afii10091 +!FA U+044A afii10092 +!FB U+044B afii10093 +!FC U+044C afii10094 +!FD U+044D afii10095 +!FE U+044E afii10096 +!FF U+044F afii10097 diff --git a/include/xslfo2pdf/fpdf/font/makefont/cp1252.map b/include/xslfo2pdf/fpdf/font/makefont/cp1252.map new file mode 100644 index 000000000..b79015c31 --- /dev/null +++ b/include/xslfo2pdf/fpdf/font/makefont/cp1252.map @@ -0,0 +1,251 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+20AC Euro +!82 U+201A quotesinglbase +!83 U+0192 florin +!84 U+201E quotedblbase +!85 U+2026 ellipsis +!86 U+2020 dagger +!87 U+2021 daggerdbl +!88 U+02C6 circumflex +!89 U+2030 perthousand +!8A U+0160 Scaron +!8B U+2039 guilsinglleft +!8C U+0152 OE +!8E U+017D Zcaron +!91 U+2018 quoteleft +!92 U+2019 quoteright +!93 U+201C quotedblleft +!94 U+201D quotedblright +!95 U+2022 bullet +!96 U+2013 endash +!97 U+2014 emdash +!98 U+02DC tilde +!99 U+2122 trademark +!9A U+0161 scaron +!9B U+203A guilsinglright +!9C U+0153 oe +!9E U+017E zcaron +!9F U+0178 Ydieresis +!A0 U+00A0 space +!A1 U+00A1 exclamdown +!A2 U+00A2 cent +!A3 U+00A3 sterling +!A4 U+00A4 currency +!A5 U+00A5 yen +!A6 U+00A6 brokenbar +!A7 U+00A7 section +!A8 U+00A8 dieresis +!A9 U+00A9 copyright +!AA U+00AA ordfeminine +!AB U+00AB guillemotleft +!AC U+00AC logicalnot +!AD U+00AD hyphen +!AE U+00AE registered +!AF U+00AF macron +!B0 U+00B0 degree +!B1 U+00B1 plusminus +!B2 U+00B2 twosuperior +!B3 U+00B3 threesuperior +!B4 U+00B4 acute +!B5 U+00B5 mu +!B6 U+00B6 paragraph +!B7 U+00B7 periodcentered +!B8 U+00B8 cedilla +!B9 U+00B9 onesuperior +!BA U+00BA ordmasculine +!BB U+00BB guillemotright +!BC U+00BC onequarter +!BD U+00BD onehalf +!BE U+00BE threequarters +!BF U+00BF questiondown +!C0 U+00C0 Agrave +!C1 U+00C1 Aacute +!C2 U+00C2 Acircumflex +!C3 U+00C3 Atilde +!C4 U+00C4 Adieresis +!C5 U+00C5 Aring +!C6 U+00C6 AE +!C7 U+00C7 Ccedilla +!C8 U+00C8 Egrave +!C9 U+00C9 Eacute +!CA U+00CA Ecircumflex +!CB U+00CB Edieresis +!CC U+00CC Igrave +!CD U+00CD Iacute +!CE U+00CE Icircumflex +!CF U+00CF Idieresis +!D0 U+00D0 Eth +!D1 U+00D1 Ntilde +!D2 U+00D2 Ograve +!D3 U+00D3 Oacute +!D4 U+00D4 Ocircumflex +!D5 U+00D5 Otilde +!D6 U+00D6 Odieresis +!D7 U+00D7 multiply +!D8 U+00D8 Oslash +!D9 U+00D9 Ugrave +!DA U+00DA Uacute +!DB U+00DB Ucircumflex +!DC U+00DC Udieresis +!DD U+00DD Yacute +!DE U+00DE Thorn +!DF U+00DF germandbls +!E0 U+00E0 agrave +!E1 U+00E1 aacute +!E2 U+00E2 acircumflex +!E3 U+00E3 atilde +!E4 U+00E4 adieresis +!E5 U+00E5 aring +!E6 U+00E6 ae +!E7 U+00E7 ccedilla +!E8 U+00E8 egrave +!E9 U+00E9 eacute +!EA U+00EA ecircumflex +!EB U+00EB edieresis +!EC U+00EC igrave +!ED U+00ED iacute +!EE U+00EE icircumflex +!EF U+00EF idieresis +!F0 U+00F0 eth +!F1 U+00F1 ntilde +!F2 U+00F2 ograve +!F3 U+00F3 oacute +!F4 U+00F4 ocircumflex +!F5 U+00F5 otilde +!F6 U+00F6 odieresis +!F7 U+00F7 divide +!F8 U+00F8 oslash +!F9 U+00F9 ugrave +!FA U+00FA uacute +!FB U+00FB ucircumflex +!FC U+00FC udieresis +!FD U+00FD yacute +!FE U+00FE thorn +!FF U+00FF ydieresis diff --git a/include/xslfo2pdf/fpdf/font/makefont/cp1253.map b/include/xslfo2pdf/fpdf/font/makefont/cp1253.map new file mode 100644 index 000000000..b5d843c1b --- /dev/null +++ b/include/xslfo2pdf/fpdf/font/makefont/cp1253.map @@ -0,0 +1,239 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+20AC Euro +!82 U+201A quotesinglbase +!83 U+0192 florin +!84 U+201E quotedblbase +!85 U+2026 ellipsis +!86 U+2020 dagger +!87 U+2021 daggerdbl +!89 U+2030 perthousand +!8B U+2039 guilsinglleft +!91 U+2018 quoteleft +!92 U+2019 quoteright +!93 U+201C quotedblleft +!94 U+201D quotedblright +!95 U+2022 bullet +!96 U+2013 endash +!97 U+2014 emdash +!99 U+2122 trademark +!9B U+203A guilsinglright +!A0 U+00A0 space +!A1 U+0385 dieresistonos +!A2 U+0386 Alphatonos +!A3 U+00A3 sterling +!A4 U+00A4 currency +!A5 U+00A5 yen +!A6 U+00A6 brokenbar +!A7 U+00A7 section +!A8 U+00A8 dieresis +!A9 U+00A9 copyright +!AB U+00AB guillemotleft +!AC U+00AC logicalnot +!AD U+00AD hyphen +!AE U+00AE registered +!AF U+2015 afii00208 +!B0 U+00B0 degree +!B1 U+00B1 plusminus +!B2 U+00B2 twosuperior +!B3 U+00B3 threesuperior +!B4 U+0384 tonos +!B5 U+00B5 mu +!B6 U+00B6 paragraph +!B7 U+00B7 periodcentered +!B8 U+0388 Epsilontonos +!B9 U+0389 Etatonos +!BA U+038A Iotatonos +!BB U+00BB guillemotright +!BC U+038C Omicrontonos +!BD U+00BD onehalf +!BE U+038E Upsilontonos +!BF U+038F Omegatonos +!C0 U+0390 iotadieresistonos +!C1 U+0391 Alpha +!C2 U+0392 Beta +!C3 U+0393 Gamma +!C4 U+0394 Delta +!C5 U+0395 Epsilon +!C6 U+0396 Zeta +!C7 U+0397 Eta +!C8 U+0398 Theta +!C9 U+0399 Iota +!CA U+039A Kappa +!CB U+039B Lambda +!CC U+039C Mu +!CD U+039D Nu +!CE U+039E Xi +!CF U+039F Omicron +!D0 U+03A0 Pi +!D1 U+03A1 Rho +!D3 U+03A3 Sigma +!D4 U+03A4 Tau +!D5 U+03A5 Upsilon +!D6 U+03A6 Phi +!D7 U+03A7 Chi +!D8 U+03A8 Psi +!D9 U+03A9 Omega +!DA U+03AA Iotadieresis +!DB U+03AB Upsilondieresis +!DC U+03AC alphatonos +!DD U+03AD epsilontonos +!DE U+03AE etatonos +!DF U+03AF iotatonos +!E0 U+03B0 upsilondieresistonos +!E1 U+03B1 alpha +!E2 U+03B2 beta +!E3 U+03B3 gamma +!E4 U+03B4 delta +!E5 U+03B5 epsilon +!E6 U+03B6 zeta +!E7 U+03B7 eta +!E8 U+03B8 theta +!E9 U+03B9 iota +!EA U+03BA kappa +!EB U+03BB lambda +!EC U+03BC mu +!ED U+03BD nu +!EE U+03BE xi +!EF U+03BF omicron +!F0 U+03C0 pi +!F1 U+03C1 rho +!F2 U+03C2 sigma1 +!F3 U+03C3 sigma +!F4 U+03C4 tau +!F5 U+03C5 upsilon +!F6 U+03C6 phi +!F7 U+03C7 chi +!F8 U+03C8 psi +!F9 U+03C9 omega +!FA U+03CA iotadieresis +!FB U+03CB upsilondieresis +!FC U+03CC omicrontonos +!FD U+03CD upsilontonos +!FE U+03CE omegatonos diff --git a/include/xslfo2pdf/fpdf/font/makefont/cp1254.map b/include/xslfo2pdf/fpdf/font/makefont/cp1254.map new file mode 100644 index 000000000..3cc8c7894 --- /dev/null +++ b/include/xslfo2pdf/fpdf/font/makefont/cp1254.map @@ -0,0 +1,249 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+20AC Euro +!82 U+201A quotesinglbase +!83 U+0192 florin +!84 U+201E quotedblbase +!85 U+2026 ellipsis +!86 U+2020 dagger +!87 U+2021 daggerdbl +!88 U+02C6 circumflex +!89 U+2030 perthousand +!8A U+0160 Scaron +!8B U+2039 guilsinglleft +!8C U+0152 OE +!91 U+2018 quoteleft +!92 U+2019 quoteright +!93 U+201C quotedblleft +!94 U+201D quotedblright +!95 U+2022 bullet +!96 U+2013 endash +!97 U+2014 emdash +!98 U+02DC tilde +!99 U+2122 trademark +!9A U+0161 scaron +!9B U+203A guilsinglright +!9C U+0153 oe +!9F U+0178 Ydieresis +!A0 U+00A0 space +!A1 U+00A1 exclamdown +!A2 U+00A2 cent +!A3 U+00A3 sterling +!A4 U+00A4 currency +!A5 U+00A5 yen +!A6 U+00A6 brokenbar +!A7 U+00A7 section +!A8 U+00A8 dieresis +!A9 U+00A9 copyright +!AA U+00AA ordfeminine +!AB U+00AB guillemotleft +!AC U+00AC logicalnot +!AD U+00AD hyphen +!AE U+00AE registered +!AF U+00AF macron +!B0 U+00B0 degree +!B1 U+00B1 plusminus +!B2 U+00B2 twosuperior +!B3 U+00B3 threesuperior +!B4 U+00B4 acute +!B5 U+00B5 mu +!B6 U+00B6 paragraph +!B7 U+00B7 periodcentered +!B8 U+00B8 cedilla +!B9 U+00B9 onesuperior +!BA U+00BA ordmasculine +!BB U+00BB guillemotright +!BC U+00BC onequarter +!BD U+00BD onehalf +!BE U+00BE threequarters +!BF U+00BF questiondown +!C0 U+00C0 Agrave +!C1 U+00C1 Aacute +!C2 U+00C2 Acircumflex +!C3 U+00C3 Atilde +!C4 U+00C4 Adieresis +!C5 U+00C5 Aring +!C6 U+00C6 AE +!C7 U+00C7 Ccedilla +!C8 U+00C8 Egrave +!C9 U+00C9 Eacute +!CA U+00CA Ecircumflex +!CB U+00CB Edieresis +!CC U+00CC Igrave +!CD U+00CD Iacute +!CE U+00CE Icircumflex +!CF U+00CF Idieresis +!D0 U+011E Gbreve +!D1 U+00D1 Ntilde +!D2 U+00D2 Ograve +!D3 U+00D3 Oacute +!D4 U+00D4 Ocircumflex +!D5 U+00D5 Otilde +!D6 U+00D6 Odieresis +!D7 U+00D7 multiply +!D8 U+00D8 Oslash +!D9 U+00D9 Ugrave +!DA U+00DA Uacute +!DB U+00DB Ucircumflex +!DC U+00DC Udieresis +!DD U+0130 Idotaccent +!DE U+015E Scedilla +!DF U+00DF germandbls +!E0 U+00E0 agrave +!E1 U+00E1 aacute +!E2 U+00E2 acircumflex +!E3 U+00E3 atilde +!E4 U+00E4 adieresis +!E5 U+00E5 aring +!E6 U+00E6 ae +!E7 U+00E7 ccedilla +!E8 U+00E8 egrave +!E9 U+00E9 eacute +!EA U+00EA ecircumflex +!EB U+00EB edieresis +!EC U+00EC igrave +!ED U+00ED iacute +!EE U+00EE icircumflex +!EF U+00EF idieresis +!F0 U+011F gbreve +!F1 U+00F1 ntilde +!F2 U+00F2 ograve +!F3 U+00F3 oacute +!F4 U+00F4 ocircumflex +!F5 U+00F5 otilde +!F6 U+00F6 odieresis +!F7 U+00F7 divide +!F8 U+00F8 oslash +!F9 U+00F9 ugrave +!FA U+00FA uacute +!FB U+00FB ucircumflex +!FC U+00FC udieresis +!FD U+0131 dotlessi +!FE U+015F scedilla +!FF U+00FF ydieresis diff --git a/include/xslfo2pdf/fpdf/font/makefont/cp1255.map b/include/xslfo2pdf/fpdf/font/makefont/cp1255.map new file mode 100644 index 000000000..fa135306d --- /dev/null +++ b/include/xslfo2pdf/fpdf/font/makefont/cp1255.map @@ -0,0 +1,233 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+20AC Euro +!82 U+201A quotesinglbase +!83 U+0192 florin +!84 U+201E quotedblbase +!85 U+2026 ellipsis +!86 U+2020 dagger +!87 U+2021 daggerdbl +!88 U+02C6 circumflex +!89 U+2030 perthousand +!8B U+2039 guilsinglleft +!91 U+2018 quoteleft +!92 U+2019 quoteright +!93 U+201C quotedblleft +!94 U+201D quotedblright +!95 U+2022 bullet +!96 U+2013 endash +!97 U+2014 emdash +!98 U+02DC tilde +!99 U+2122 trademark +!9B U+203A guilsinglright +!A0 U+00A0 space +!A1 U+00A1 exclamdown +!A2 U+00A2 cent +!A3 U+00A3 sterling +!A4 U+20AA afii57636 +!A5 U+00A5 yen +!A6 U+00A6 brokenbar +!A7 U+00A7 section +!A8 U+00A8 dieresis +!A9 U+00A9 copyright +!AA U+00D7 multiply +!AB U+00AB guillemotleft +!AC U+00AC logicalnot +!AD U+00AD sfthyphen +!AE U+00AE registered +!AF U+00AF macron +!B0 U+00B0 degree +!B1 U+00B1 plusminus +!B2 U+00B2 twosuperior +!B3 U+00B3 threesuperior +!B4 U+00B4 acute +!B5 U+00B5 mu +!B6 U+00B6 paragraph +!B7 U+00B7 middot +!B8 U+00B8 cedilla +!B9 U+00B9 onesuperior +!BA U+00F7 divide +!BB U+00BB guillemotright +!BC U+00BC onequarter +!BD U+00BD onehalf +!BE U+00BE threequarters +!BF U+00BF questiondown +!C0 U+05B0 afii57799 +!C1 U+05B1 afii57801 +!C2 U+05B2 afii57800 +!C3 U+05B3 afii57802 +!C4 U+05B4 afii57793 +!C5 U+05B5 afii57794 +!C6 U+05B6 afii57795 +!C7 U+05B7 afii57798 +!C8 U+05B8 afii57797 +!C9 U+05B9 afii57806 +!CB U+05BB afii57796 +!CC U+05BC afii57807 +!CD U+05BD afii57839 +!CE U+05BE afii57645 +!CF U+05BF afii57841 +!D0 U+05C0 afii57842 +!D1 U+05C1 afii57804 +!D2 U+05C2 afii57803 +!D3 U+05C3 afii57658 +!D4 U+05F0 afii57716 +!D5 U+05F1 afii57717 +!D6 U+05F2 afii57718 +!D7 U+05F3 gereshhebrew +!D8 U+05F4 gershayimhebrew +!E0 U+05D0 afii57664 +!E1 U+05D1 afii57665 +!E2 U+05D2 afii57666 +!E3 U+05D3 afii57667 +!E4 U+05D4 afii57668 +!E5 U+05D5 afii57669 +!E6 U+05D6 afii57670 +!E7 U+05D7 afii57671 +!E8 U+05D8 afii57672 +!E9 U+05D9 afii57673 +!EA U+05DA afii57674 +!EB U+05DB afii57675 +!EC U+05DC afii57676 +!ED U+05DD afii57677 +!EE U+05DE afii57678 +!EF U+05DF afii57679 +!F0 U+05E0 afii57680 +!F1 U+05E1 afii57681 +!F2 U+05E2 afii57682 +!F3 U+05E3 afii57683 +!F4 U+05E4 afii57684 +!F5 U+05E5 afii57685 +!F6 U+05E6 afii57686 +!F7 U+05E7 afii57687 +!F8 U+05E8 afii57688 +!F9 U+05E9 afii57689 +!FA U+05EA afii57690 +!FD U+200E afii299 +!FE U+200F afii300 diff --git a/include/xslfo2pdf/fpdf/font/makefont/cp1257.map b/include/xslfo2pdf/fpdf/font/makefont/cp1257.map new file mode 100644 index 000000000..077fdc34a --- /dev/null +++ b/include/xslfo2pdf/fpdf/font/makefont/cp1257.map @@ -0,0 +1,244 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+20AC Euro +!82 U+201A quotesinglbase +!84 U+201E quotedblbase +!85 U+2026 ellipsis +!86 U+2020 dagger +!87 U+2021 daggerdbl +!89 U+2030 perthousand +!8B U+2039 guilsinglleft +!8D U+00A8 dieresis +!8E U+02C7 caron +!8F U+00B8 cedilla +!91 U+2018 quoteleft +!92 U+2019 quoteright +!93 U+201C quotedblleft +!94 U+201D quotedblright +!95 U+2022 bullet +!96 U+2013 endash +!97 U+2014 emdash +!99 U+2122 trademark +!9B U+203A guilsinglright +!9D U+00AF macron +!9E U+02DB ogonek +!A0 U+00A0 space +!A2 U+00A2 cent +!A3 U+00A3 sterling +!A4 U+00A4 currency +!A6 U+00A6 brokenbar +!A7 U+00A7 section +!A8 U+00D8 Oslash +!A9 U+00A9 copyright +!AA U+0156 Rcommaaccent +!AB U+00AB guillemotleft +!AC U+00AC logicalnot +!AD U+00AD hyphen +!AE U+00AE registered +!AF U+00C6 AE +!B0 U+00B0 degree +!B1 U+00B1 plusminus +!B2 U+00B2 twosuperior +!B3 U+00B3 threesuperior +!B4 U+00B4 acute +!B5 U+00B5 mu +!B6 U+00B6 paragraph +!B7 U+00B7 periodcentered +!B8 U+00F8 oslash +!B9 U+00B9 onesuperior +!BA U+0157 rcommaaccent +!BB U+00BB guillemotright +!BC U+00BC onequarter +!BD U+00BD onehalf +!BE U+00BE threequarters +!BF U+00E6 ae +!C0 U+0104 Aogonek +!C1 U+012E Iogonek +!C2 U+0100 Amacron +!C3 U+0106 Cacute +!C4 U+00C4 Adieresis +!C5 U+00C5 Aring +!C6 U+0118 Eogonek +!C7 U+0112 Emacron +!C8 U+010C Ccaron +!C9 U+00C9 Eacute +!CA U+0179 Zacute +!CB U+0116 Edotaccent +!CC U+0122 Gcommaaccent +!CD U+0136 Kcommaaccent +!CE U+012A Imacron +!CF U+013B Lcommaaccent +!D0 U+0160 Scaron +!D1 U+0143 Nacute +!D2 U+0145 Ncommaaccent +!D3 U+00D3 Oacute +!D4 U+014C Omacron +!D5 U+00D5 Otilde +!D6 U+00D6 Odieresis +!D7 U+00D7 multiply +!D8 U+0172 Uogonek +!D9 U+0141 Lslash +!DA U+015A Sacute +!DB U+016A Umacron +!DC U+00DC Udieresis +!DD U+017B Zdotaccent +!DE U+017D Zcaron +!DF U+00DF germandbls +!E0 U+0105 aogonek +!E1 U+012F iogonek +!E2 U+0101 amacron +!E3 U+0107 cacute +!E4 U+00E4 adieresis +!E5 U+00E5 aring +!E6 U+0119 eogonek +!E7 U+0113 emacron +!E8 U+010D ccaron +!E9 U+00E9 eacute +!EA U+017A zacute +!EB U+0117 edotaccent +!EC U+0123 gcommaaccent +!ED U+0137 kcommaaccent +!EE U+012B imacron +!EF U+013C lcommaaccent +!F0 U+0161 scaron +!F1 U+0144 nacute +!F2 U+0146 ncommaaccent +!F3 U+00F3 oacute +!F4 U+014D omacron +!F5 U+00F5 otilde +!F6 U+00F6 odieresis +!F7 U+00F7 divide +!F8 U+0173 uogonek +!F9 U+0142 lslash +!FA U+015B sacute +!FB U+016B umacron +!FC U+00FC udieresis +!FD U+017C zdotaccent +!FE U+017E zcaron +!FF U+02D9 dotaccent diff --git a/include/xslfo2pdf/fpdf/font/makefont/cp1258.map b/include/xslfo2pdf/fpdf/font/makefont/cp1258.map new file mode 100644 index 000000000..7032c35d6 --- /dev/null +++ b/include/xslfo2pdf/fpdf/font/makefont/cp1258.map @@ -0,0 +1,247 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+20AC Euro +!82 U+201A quotesinglbase +!83 U+0192 florin +!84 U+201E quotedblbase +!85 U+2026 ellipsis +!86 U+2020 dagger +!87 U+2021 daggerdbl +!88 U+02C6 circumflex +!89 U+2030 perthousand +!8B U+2039 guilsinglleft +!8C U+0152 OE +!91 U+2018 quoteleft +!92 U+2019 quoteright +!93 U+201C quotedblleft +!94 U+201D quotedblright +!95 U+2022 bullet +!96 U+2013 endash +!97 U+2014 emdash +!98 U+02DC tilde +!99 U+2122 trademark +!9B U+203A guilsinglright +!9C U+0153 oe +!9F U+0178 Ydieresis +!A0 U+00A0 space +!A1 U+00A1 exclamdown +!A2 U+00A2 cent +!A3 U+00A3 sterling +!A4 U+00A4 currency +!A5 U+00A5 yen +!A6 U+00A6 brokenbar +!A7 U+00A7 section +!A8 U+00A8 dieresis +!A9 U+00A9 copyright +!AA U+00AA ordfeminine +!AB U+00AB guillemotleft +!AC U+00AC logicalnot +!AD U+00AD hyphen +!AE U+00AE registered +!AF U+00AF macron +!B0 U+00B0 degree +!B1 U+00B1 plusminus +!B2 U+00B2 twosuperior +!B3 U+00B3 threesuperior +!B4 U+00B4 acute +!B5 U+00B5 mu +!B6 U+00B6 paragraph +!B7 U+00B7 periodcentered +!B8 U+00B8 cedilla +!B9 U+00B9 onesuperior +!BA U+00BA ordmasculine +!BB U+00BB guillemotright +!BC U+00BC onequarter +!BD U+00BD onehalf +!BE U+00BE threequarters +!BF U+00BF questiondown +!C0 U+00C0 Agrave +!C1 U+00C1 Aacute +!C2 U+00C2 Acircumflex +!C3 U+0102 Abreve +!C4 U+00C4 Adieresis +!C5 U+00C5 Aring +!C6 U+00C6 AE +!C7 U+00C7 Ccedilla +!C8 U+00C8 Egrave +!C9 U+00C9 Eacute +!CA U+00CA Ecircumflex +!CB U+00CB Edieresis +!CC U+0300 gravecomb +!CD U+00CD Iacute +!CE U+00CE Icircumflex +!CF U+00CF Idieresis +!D0 U+0110 Dcroat +!D1 U+00D1 Ntilde +!D2 U+0309 hookabovecomb +!D3 U+00D3 Oacute +!D4 U+00D4 Ocircumflex +!D5 U+01A0 Ohorn +!D6 U+00D6 Odieresis +!D7 U+00D7 multiply +!D8 U+00D8 Oslash +!D9 U+00D9 Ugrave +!DA U+00DA Uacute +!DB U+00DB Ucircumflex +!DC U+00DC Udieresis +!DD U+01AF Uhorn +!DE U+0303 tildecomb +!DF U+00DF germandbls +!E0 U+00E0 agrave +!E1 U+00E1 aacute +!E2 U+00E2 acircumflex +!E3 U+0103 abreve +!E4 U+00E4 adieresis +!E5 U+00E5 aring +!E6 U+00E6 ae +!E7 U+00E7 ccedilla +!E8 U+00E8 egrave +!E9 U+00E9 eacute +!EA U+00EA ecircumflex +!EB U+00EB edieresis +!EC U+0301 acutecomb +!ED U+00ED iacute +!EE U+00EE icircumflex +!EF U+00EF idieresis +!F0 U+0111 dcroat +!F1 U+00F1 ntilde +!F2 U+0323 dotbelowcomb +!F3 U+00F3 oacute +!F4 U+00F4 ocircumflex +!F5 U+01A1 ohorn +!F6 U+00F6 odieresis +!F7 U+00F7 divide +!F8 U+00F8 oslash +!F9 U+00F9 ugrave +!FA U+00FA uacute +!FB U+00FB ucircumflex +!FC U+00FC udieresis +!FD U+01B0 uhorn +!FE U+20AB dong +!FF U+00FF ydieresis diff --git a/include/xslfo2pdf/fpdf/font/makefont/cp874.map b/include/xslfo2pdf/fpdf/font/makefont/cp874.map new file mode 100644 index 000000000..16330d042 --- /dev/null +++ b/include/xslfo2pdf/fpdf/font/makefont/cp874.map @@ -0,0 +1,225 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+20AC Euro +!85 U+2026 ellipsis +!91 U+2018 quoteleft +!92 U+2019 quoteright +!93 U+201C quotedblleft +!94 U+201D quotedblright +!95 U+2022 bullet +!96 U+2013 endash +!97 U+2014 emdash +!A0 U+00A0 space +!A1 U+0E01 kokaithai +!A2 U+0E02 khokhaithai +!A3 U+0E03 khokhuatthai +!A4 U+0E04 khokhwaithai +!A5 U+0E05 khokhonthai +!A6 U+0E06 khorakhangthai +!A7 U+0E07 ngonguthai +!A8 U+0E08 chochanthai +!A9 U+0E09 chochingthai +!AA U+0E0A chochangthai +!AB U+0E0B sosothai +!AC U+0E0C chochoethai +!AD U+0E0D yoyingthai +!AE U+0E0E dochadathai +!AF U+0E0F topatakthai +!B0 U+0E10 thothanthai +!B1 U+0E11 thonangmonthothai +!B2 U+0E12 thophuthaothai +!B3 U+0E13 nonenthai +!B4 U+0E14 dodekthai +!B5 U+0E15 totaothai +!B6 U+0E16 thothungthai +!B7 U+0E17 thothahanthai +!B8 U+0E18 thothongthai +!B9 U+0E19 nonuthai +!BA U+0E1A bobaimaithai +!BB U+0E1B poplathai +!BC U+0E1C phophungthai +!BD U+0E1D fofathai +!BE U+0E1E phophanthai +!BF U+0E1F fofanthai +!C0 U+0E20 phosamphaothai +!C1 U+0E21 momathai +!C2 U+0E22 yoyakthai +!C3 U+0E23 roruathai +!C4 U+0E24 ruthai +!C5 U+0E25 lolingthai +!C6 U+0E26 luthai +!C7 U+0E27 wowaenthai +!C8 U+0E28 sosalathai +!C9 U+0E29 sorusithai +!CA U+0E2A sosuathai +!CB U+0E2B hohipthai +!CC U+0E2C lochulathai +!CD U+0E2D oangthai +!CE U+0E2E honokhukthai +!CF U+0E2F paiyannoithai +!D0 U+0E30 saraathai +!D1 U+0E31 maihanakatthai +!D2 U+0E32 saraaathai +!D3 U+0E33 saraamthai +!D4 U+0E34 saraithai +!D5 U+0E35 saraiithai +!D6 U+0E36 sarauethai +!D7 U+0E37 saraueethai +!D8 U+0E38 sarauthai +!D9 U+0E39 sarauuthai +!DA U+0E3A phinthuthai +!DF U+0E3F bahtthai +!E0 U+0E40 saraethai +!E1 U+0E41 saraaethai +!E2 U+0E42 saraothai +!E3 U+0E43 saraaimaimuanthai +!E4 U+0E44 saraaimaimalaithai +!E5 U+0E45 lakkhangyaothai +!E6 U+0E46 maiyamokthai +!E7 U+0E47 maitaikhuthai +!E8 U+0E48 maiekthai +!E9 U+0E49 maithothai +!EA U+0E4A maitrithai +!EB U+0E4B maichattawathai +!EC U+0E4C thanthakhatthai +!ED U+0E4D nikhahitthai +!EE U+0E4E yamakkanthai +!EF U+0E4F fongmanthai +!F0 U+0E50 zerothai +!F1 U+0E51 onethai +!F2 U+0E52 twothai +!F3 U+0E53 threethai +!F4 U+0E54 fourthai +!F5 U+0E55 fivethai +!F6 U+0E56 sixthai +!F7 U+0E57 seventhai +!F8 U+0E58 eightthai +!F9 U+0E59 ninethai +!FA U+0E5A angkhankhuthai +!FB U+0E5B khomutthai diff --git a/include/xslfo2pdf/fpdf/font/makefont/iso-8859-1.map b/include/xslfo2pdf/fpdf/font/makefont/iso-8859-1.map new file mode 100644 index 000000000..74fb2fe5c --- /dev/null +++ b/include/xslfo2pdf/fpdf/font/makefont/iso-8859-1.map @@ -0,0 +1,256 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+0080 .notdef +!81 U+0081 .notdef +!82 U+0082 .notdef +!83 U+0083 .notdef +!84 U+0084 .notdef +!85 U+0085 .notdef +!86 U+0086 .notdef +!87 U+0087 .notdef +!88 U+0088 .notdef +!89 U+0089 .notdef +!8A U+008A .notdef +!8B U+008B .notdef +!8C U+008C .notdef +!8D U+008D .notdef +!8E U+008E .notdef +!8F U+008F .notdef +!90 U+0090 .notdef +!91 U+0091 .notdef +!92 U+0092 .notdef +!93 U+0093 .notdef +!94 U+0094 .notdef +!95 U+0095 .notdef +!96 U+0096 .notdef +!97 U+0097 .notdef +!98 U+0098 .notdef +!99 U+0099 .notdef +!9A U+009A .notdef +!9B U+009B .notdef +!9C U+009C .notdef +!9D U+009D .notdef +!9E U+009E .notdef +!9F U+009F .notdef +!A0 U+00A0 space +!A1 U+00A1 exclamdown +!A2 U+00A2 cent +!A3 U+00A3 sterling +!A4 U+00A4 currency +!A5 U+00A5 yen +!A6 U+00A6 brokenbar +!A7 U+00A7 section +!A8 U+00A8 dieresis +!A9 U+00A9 copyright +!AA U+00AA ordfeminine +!AB U+00AB guillemotleft +!AC U+00AC logicalnot +!AD U+00AD hyphen +!AE U+00AE registered +!AF U+00AF macron +!B0 U+00B0 degree +!B1 U+00B1 plusminus +!B2 U+00B2 twosuperior +!B3 U+00B3 threesuperior +!B4 U+00B4 acute +!B5 U+00B5 mu +!B6 U+00B6 paragraph +!B7 U+00B7 periodcentered +!B8 U+00B8 cedilla +!B9 U+00B9 onesuperior +!BA U+00BA ordmasculine +!BB U+00BB guillemotright +!BC U+00BC onequarter +!BD U+00BD onehalf +!BE U+00BE threequarters +!BF U+00BF questiondown +!C0 U+00C0 Agrave +!C1 U+00C1 Aacute +!C2 U+00C2 Acircumflex +!C3 U+00C3 Atilde +!C4 U+00C4 Adieresis +!C5 U+00C5 Aring +!C6 U+00C6 AE +!C7 U+00C7 Ccedilla +!C8 U+00C8 Egrave +!C9 U+00C9 Eacute +!CA U+00CA Ecircumflex +!CB U+00CB Edieresis +!CC U+00CC Igrave +!CD U+00CD Iacute +!CE U+00CE Icircumflex +!CF U+00CF Idieresis +!D0 U+00D0 Eth +!D1 U+00D1 Ntilde +!D2 U+00D2 Ograve +!D3 U+00D3 Oacute +!D4 U+00D4 Ocircumflex +!D5 U+00D5 Otilde +!D6 U+00D6 Odieresis +!D7 U+00D7 multiply +!D8 U+00D8 Oslash +!D9 U+00D9 Ugrave +!DA U+00DA Uacute +!DB U+00DB Ucircumflex +!DC U+00DC Udieresis +!DD U+00DD Yacute +!DE U+00DE Thorn +!DF U+00DF germandbls +!E0 U+00E0 agrave +!E1 U+00E1 aacute +!E2 U+00E2 acircumflex +!E3 U+00E3 atilde +!E4 U+00E4 adieresis +!E5 U+00E5 aring +!E6 U+00E6 ae +!E7 U+00E7 ccedilla +!E8 U+00E8 egrave +!E9 U+00E9 eacute +!EA U+00EA ecircumflex +!EB U+00EB edieresis +!EC U+00EC igrave +!ED U+00ED iacute +!EE U+00EE icircumflex +!EF U+00EF idieresis +!F0 U+00F0 eth +!F1 U+00F1 ntilde +!F2 U+00F2 ograve +!F3 U+00F3 oacute +!F4 U+00F4 ocircumflex +!F5 U+00F5 otilde +!F6 U+00F6 odieresis +!F7 U+00F7 divide +!F8 U+00F8 oslash +!F9 U+00F9 ugrave +!FA U+00FA uacute +!FB U+00FB ucircumflex +!FC U+00FC udieresis +!FD U+00FD yacute +!FE U+00FE thorn +!FF U+00FF ydieresis diff --git a/include/xslfo2pdf/fpdf/font/makefont/iso-8859-11.map b/include/xslfo2pdf/fpdf/font/makefont/iso-8859-11.map new file mode 100644 index 000000000..8cf66731a --- /dev/null +++ b/include/xslfo2pdf/fpdf/font/makefont/iso-8859-11.map @@ -0,0 +1,248 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+0080 .notdef +!81 U+0081 .notdef +!82 U+0082 .notdef +!83 U+0083 .notdef +!84 U+0084 .notdef +!85 U+0085 .notdef +!86 U+0086 .notdef +!87 U+0087 .notdef +!88 U+0088 .notdef +!89 U+0089 .notdef +!8A U+008A .notdef +!8B U+008B .notdef +!8C U+008C .notdef +!8D U+008D .notdef +!8E U+008E .notdef +!8F U+008F .notdef +!90 U+0090 .notdef +!91 U+0091 .notdef +!92 U+0092 .notdef +!93 U+0093 .notdef +!94 U+0094 .notdef +!95 U+0095 .notdef +!96 U+0096 .notdef +!97 U+0097 .notdef +!98 U+0098 .notdef +!99 U+0099 .notdef +!9A U+009A .notdef +!9B U+009B .notdef +!9C U+009C .notdef +!9D U+009D .notdef +!9E U+009E .notdef +!9F U+009F .notdef +!A0 U+00A0 space +!A1 U+0E01 kokaithai +!A2 U+0E02 khokhaithai +!A3 U+0E03 khokhuatthai +!A4 U+0E04 khokhwaithai +!A5 U+0E05 khokhonthai +!A6 U+0E06 khorakhangthai +!A7 U+0E07 ngonguthai +!A8 U+0E08 chochanthai +!A9 U+0E09 chochingthai +!AA U+0E0A chochangthai +!AB U+0E0B sosothai +!AC U+0E0C chochoethai +!AD U+0E0D yoyingthai +!AE U+0E0E dochadathai +!AF U+0E0F topatakthai +!B0 U+0E10 thothanthai +!B1 U+0E11 thonangmonthothai +!B2 U+0E12 thophuthaothai +!B3 U+0E13 nonenthai +!B4 U+0E14 dodekthai +!B5 U+0E15 totaothai +!B6 U+0E16 thothungthai +!B7 U+0E17 thothahanthai +!B8 U+0E18 thothongthai +!B9 U+0E19 nonuthai +!BA U+0E1A bobaimaithai +!BB U+0E1B poplathai +!BC U+0E1C phophungthai +!BD U+0E1D fofathai +!BE U+0E1E phophanthai +!BF U+0E1F fofanthai +!C0 U+0E20 phosamphaothai +!C1 U+0E21 momathai +!C2 U+0E22 yoyakthai +!C3 U+0E23 roruathai +!C4 U+0E24 ruthai +!C5 U+0E25 lolingthai +!C6 U+0E26 luthai +!C7 U+0E27 wowaenthai +!C8 U+0E28 sosalathai +!C9 U+0E29 sorusithai +!CA U+0E2A sosuathai +!CB U+0E2B hohipthai +!CC U+0E2C lochulathai +!CD U+0E2D oangthai +!CE U+0E2E honokhukthai +!CF U+0E2F paiyannoithai +!D0 U+0E30 saraathai +!D1 U+0E31 maihanakatthai +!D2 U+0E32 saraaathai +!D3 U+0E33 saraamthai +!D4 U+0E34 saraithai +!D5 U+0E35 saraiithai +!D6 U+0E36 sarauethai +!D7 U+0E37 saraueethai +!D8 U+0E38 sarauthai +!D9 U+0E39 sarauuthai +!DA U+0E3A phinthuthai +!DF U+0E3F bahtthai +!E0 U+0E40 saraethai +!E1 U+0E41 saraaethai +!E2 U+0E42 saraothai +!E3 U+0E43 saraaimaimuanthai +!E4 U+0E44 saraaimaimalaithai +!E5 U+0E45 lakkhangyaothai +!E6 U+0E46 maiyamokthai +!E7 U+0E47 maitaikhuthai +!E8 U+0E48 maiekthai +!E9 U+0E49 maithothai +!EA U+0E4A maitrithai +!EB U+0E4B maichattawathai +!EC U+0E4C thanthakhatthai +!ED U+0E4D nikhahitthai +!EE U+0E4E yamakkanthai +!EF U+0E4F fongmanthai +!F0 U+0E50 zerothai +!F1 U+0E51 onethai +!F2 U+0E52 twothai +!F3 U+0E53 threethai +!F4 U+0E54 fourthai +!F5 U+0E55 fivethai +!F6 U+0E56 sixthai +!F7 U+0E57 seventhai +!F8 U+0E58 eightthai +!F9 U+0E59 ninethai +!FA U+0E5A angkhankhuthai +!FB U+0E5B khomutthai diff --git a/include/xslfo2pdf/fpdf/font/makefont/iso-8859-15.map b/include/xslfo2pdf/fpdf/font/makefont/iso-8859-15.map new file mode 100644 index 000000000..2689703d1 --- /dev/null +++ b/include/xslfo2pdf/fpdf/font/makefont/iso-8859-15.map @@ -0,0 +1,256 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+0080 .notdef +!81 U+0081 .notdef +!82 U+0082 .notdef +!83 U+0083 .notdef +!84 U+0084 .notdef +!85 U+0085 .notdef +!86 U+0086 .notdef +!87 U+0087 .notdef +!88 U+0088 .notdef +!89 U+0089 .notdef +!8A U+008A .notdef +!8B U+008B .notdef +!8C U+008C .notdef +!8D U+008D .notdef +!8E U+008E .notdef +!8F U+008F .notdef +!90 U+0090 .notdef +!91 U+0091 .notdef +!92 U+0092 .notdef +!93 U+0093 .notdef +!94 U+0094 .notdef +!95 U+0095 .notdef +!96 U+0096 .notdef +!97 U+0097 .notdef +!98 U+0098 .notdef +!99 U+0099 .notdef +!9A U+009A .notdef +!9B U+009B .notdef +!9C U+009C .notdef +!9D U+009D .notdef +!9E U+009E .notdef +!9F U+009F .notdef +!A0 U+00A0 space +!A1 U+00A1 exclamdown +!A2 U+00A2 cent +!A3 U+00A3 sterling +!A4 U+20AC Euro +!A5 U+00A5 yen +!A6 U+0160 Scaron +!A7 U+00A7 section +!A8 U+0161 scaron +!A9 U+00A9 copyright +!AA U+00AA ordfeminine +!AB U+00AB guillemotleft +!AC U+00AC logicalnot +!AD U+00AD hyphen +!AE U+00AE registered +!AF U+00AF macron +!B0 U+00B0 degree +!B1 U+00B1 plusminus +!B2 U+00B2 twosuperior +!B3 U+00B3 threesuperior +!B4 U+017D Zcaron +!B5 U+00B5 mu +!B6 U+00B6 paragraph +!B7 U+00B7 periodcentered +!B8 U+017E zcaron +!B9 U+00B9 onesuperior +!BA U+00BA ordmasculine +!BB U+00BB guillemotright +!BC U+0152 OE +!BD U+0153 oe +!BE U+0178 Ydieresis +!BF U+00BF questiondown +!C0 U+00C0 Agrave +!C1 U+00C1 Aacute +!C2 U+00C2 Acircumflex +!C3 U+00C3 Atilde +!C4 U+00C4 Adieresis +!C5 U+00C5 Aring +!C6 U+00C6 AE +!C7 U+00C7 Ccedilla +!C8 U+00C8 Egrave +!C9 U+00C9 Eacute +!CA U+00CA Ecircumflex +!CB U+00CB Edieresis +!CC U+00CC Igrave +!CD U+00CD Iacute +!CE U+00CE Icircumflex +!CF U+00CF Idieresis +!D0 U+00D0 Eth +!D1 U+00D1 Ntilde +!D2 U+00D2 Ograve +!D3 U+00D3 Oacute +!D4 U+00D4 Ocircumflex +!D5 U+00D5 Otilde +!D6 U+00D6 Odieresis +!D7 U+00D7 multiply +!D8 U+00D8 Oslash +!D9 U+00D9 Ugrave +!DA U+00DA Uacute +!DB U+00DB Ucircumflex +!DC U+00DC Udieresis +!DD U+00DD Yacute +!DE U+00DE Thorn +!DF U+00DF germandbls +!E0 U+00E0 agrave +!E1 U+00E1 aacute +!E2 U+00E2 acircumflex +!E3 U+00E3 atilde +!E4 U+00E4 adieresis +!E5 U+00E5 aring +!E6 U+00E6 ae +!E7 U+00E7 ccedilla +!E8 U+00E8 egrave +!E9 U+00E9 eacute +!EA U+00EA ecircumflex +!EB U+00EB edieresis +!EC U+00EC igrave +!ED U+00ED iacute +!EE U+00EE icircumflex +!EF U+00EF idieresis +!F0 U+00F0 eth +!F1 U+00F1 ntilde +!F2 U+00F2 ograve +!F3 U+00F3 oacute +!F4 U+00F4 ocircumflex +!F5 U+00F5 otilde +!F6 U+00F6 odieresis +!F7 U+00F7 divide +!F8 U+00F8 oslash +!F9 U+00F9 ugrave +!FA U+00FA uacute +!FB U+00FB ucircumflex +!FC U+00FC udieresis +!FD U+00FD yacute +!FE U+00FE thorn +!FF U+00FF ydieresis diff --git a/include/xslfo2pdf/fpdf/font/makefont/iso-8859-16.map b/include/xslfo2pdf/fpdf/font/makefont/iso-8859-16.map new file mode 100644 index 000000000..89b802a7a --- /dev/null +++ b/include/xslfo2pdf/fpdf/font/makefont/iso-8859-16.map @@ -0,0 +1,256 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+0080 .notdef +!81 U+0081 .notdef +!82 U+0082 .notdef +!83 U+0083 .notdef +!84 U+0084 .notdef +!85 U+0085 .notdef +!86 U+0086 .notdef +!87 U+0087 .notdef +!88 U+0088 .notdef +!89 U+0089 .notdef +!8A U+008A .notdef +!8B U+008B .notdef +!8C U+008C .notdef +!8D U+008D .notdef +!8E U+008E .notdef +!8F U+008F .notdef +!90 U+0090 .notdef +!91 U+0091 .notdef +!92 U+0092 .notdef +!93 U+0093 .notdef +!94 U+0094 .notdef +!95 U+0095 .notdef +!96 U+0096 .notdef +!97 U+0097 .notdef +!98 U+0098 .notdef +!99 U+0099 .notdef +!9A U+009A .notdef +!9B U+009B .notdef +!9C U+009C .notdef +!9D U+009D .notdef +!9E U+009E .notdef +!9F U+009F .notdef +!A0 U+00A0 space +!A1 U+0104 Aogonek +!A2 U+0105 aogonek +!A3 U+0141 Lslash +!A4 U+20AC Euro +!A5 U+201E quotedblbase +!A6 U+0160 Scaron +!A7 U+00A7 section +!A8 U+0161 scaron +!A9 U+00A9 copyright +!AA U+0218 Scommaaccent +!AB U+00AB guillemotleft +!AC U+0179 Zacute +!AD U+00AD hyphen +!AE U+017A zacute +!AF U+017B Zdotaccent +!B0 U+00B0 degree +!B1 U+00B1 plusminus +!B2 U+010C Ccaron +!B3 U+0142 lslash +!B4 U+017D Zcaron +!B5 U+201D quotedblright +!B6 U+00B6 paragraph +!B7 U+00B7 periodcentered +!B8 U+017E zcaron +!B9 U+010D ccaron +!BA U+0219 scommaaccent +!BB U+00BB guillemotright +!BC U+0152 OE +!BD U+0153 oe +!BE U+0178 Ydieresis +!BF U+017C zdotaccent +!C0 U+00C0 Agrave +!C1 U+00C1 Aacute +!C2 U+00C2 Acircumflex +!C3 U+0102 Abreve +!C4 U+00C4 Adieresis +!C5 U+0106 Cacute +!C6 U+00C6 AE +!C7 U+00C7 Ccedilla +!C8 U+00C8 Egrave +!C9 U+00C9 Eacute +!CA U+00CA Ecircumflex +!CB U+00CB Edieresis +!CC U+00CC Igrave +!CD U+00CD Iacute +!CE U+00CE Icircumflex +!CF U+00CF Idieresis +!D0 U+0110 Dcroat +!D1 U+0143 Nacute +!D2 U+00D2 Ograve +!D3 U+00D3 Oacute +!D4 U+00D4 Ocircumflex +!D5 U+0150 Ohungarumlaut +!D6 U+00D6 Odieresis +!D7 U+015A Sacute +!D8 U+0170 Uhungarumlaut +!D9 U+00D9 Ugrave +!DA U+00DA Uacute +!DB U+00DB Ucircumflex +!DC U+00DC Udieresis +!DD U+0118 Eogonek +!DE U+021A Tcommaaccent +!DF U+00DF germandbls +!E0 U+00E0 agrave +!E1 U+00E1 aacute +!E2 U+00E2 acircumflex +!E3 U+0103 abreve +!E4 U+00E4 adieresis +!E5 U+0107 cacute +!E6 U+00E6 ae +!E7 U+00E7 ccedilla +!E8 U+00E8 egrave +!E9 U+00E9 eacute +!EA U+00EA ecircumflex +!EB U+00EB edieresis +!EC U+00EC igrave +!ED U+00ED iacute +!EE U+00EE icircumflex +!EF U+00EF idieresis +!F0 U+0111 dcroat +!F1 U+0144 nacute +!F2 U+00F2 ograve +!F3 U+00F3 oacute +!F4 U+00F4 ocircumflex +!F5 U+0151 ohungarumlaut +!F6 U+00F6 odieresis +!F7 U+015B sacute +!F8 U+0171 uhungarumlaut +!F9 U+00F9 ugrave +!FA U+00FA uacute +!FB U+00FB ucircumflex +!FC U+00FC udieresis +!FD U+0119 eogonek +!FE U+021B tcommaaccent +!FF U+00FF ydieresis diff --git a/include/xslfo2pdf/fpdf/font/makefont/iso-8859-2.map b/include/xslfo2pdf/fpdf/font/makefont/iso-8859-2.map new file mode 100644 index 000000000..af9588d05 --- /dev/null +++ b/include/xslfo2pdf/fpdf/font/makefont/iso-8859-2.map @@ -0,0 +1,256 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+0080 .notdef +!81 U+0081 .notdef +!82 U+0082 .notdef +!83 U+0083 .notdef +!84 U+0084 .notdef +!85 U+0085 .notdef +!86 U+0086 .notdef +!87 U+0087 .notdef +!88 U+0088 .notdef +!89 U+0089 .notdef +!8A U+008A .notdef +!8B U+008B .notdef +!8C U+008C .notdef +!8D U+008D .notdef +!8E U+008E .notdef +!8F U+008F .notdef +!90 U+0090 .notdef +!91 U+0091 .notdef +!92 U+0092 .notdef +!93 U+0093 .notdef +!94 U+0094 .notdef +!95 U+0095 .notdef +!96 U+0096 .notdef +!97 U+0097 .notdef +!98 U+0098 .notdef +!99 U+0099 .notdef +!9A U+009A .notdef +!9B U+009B .notdef +!9C U+009C .notdef +!9D U+009D .notdef +!9E U+009E .notdef +!9F U+009F .notdef +!A0 U+00A0 space +!A1 U+0104 Aogonek +!A2 U+02D8 breve +!A3 U+0141 Lslash +!A4 U+00A4 currency +!A5 U+013D Lcaron +!A6 U+015A Sacute +!A7 U+00A7 section +!A8 U+00A8 dieresis +!A9 U+0160 Scaron +!AA U+015E Scedilla +!AB U+0164 Tcaron +!AC U+0179 Zacute +!AD U+00AD hyphen +!AE U+017D Zcaron +!AF U+017B Zdotaccent +!B0 U+00B0 degree +!B1 U+0105 aogonek +!B2 U+02DB ogonek +!B3 U+0142 lslash +!B4 U+00B4 acute +!B5 U+013E lcaron +!B6 U+015B sacute +!B7 U+02C7 caron +!B8 U+00B8 cedilla +!B9 U+0161 scaron +!BA U+015F scedilla +!BB U+0165 tcaron +!BC U+017A zacute +!BD U+02DD hungarumlaut +!BE U+017E zcaron +!BF U+017C zdotaccent +!C0 U+0154 Racute +!C1 U+00C1 Aacute +!C2 U+00C2 Acircumflex +!C3 U+0102 Abreve +!C4 U+00C4 Adieresis +!C5 U+0139 Lacute +!C6 U+0106 Cacute +!C7 U+00C7 Ccedilla +!C8 U+010C Ccaron +!C9 U+00C9 Eacute +!CA U+0118 Eogonek +!CB U+00CB Edieresis +!CC U+011A Ecaron +!CD U+00CD Iacute +!CE U+00CE Icircumflex +!CF U+010E Dcaron +!D0 U+0110 Dcroat +!D1 U+0143 Nacute +!D2 U+0147 Ncaron +!D3 U+00D3 Oacute +!D4 U+00D4 Ocircumflex +!D5 U+0150 Ohungarumlaut +!D6 U+00D6 Odieresis +!D7 U+00D7 multiply +!D8 U+0158 Rcaron +!D9 U+016E Uring +!DA U+00DA Uacute +!DB U+0170 Uhungarumlaut +!DC U+00DC Udieresis +!DD U+00DD Yacute +!DE U+0162 Tcommaaccent +!DF U+00DF germandbls +!E0 U+0155 racute +!E1 U+00E1 aacute +!E2 U+00E2 acircumflex +!E3 U+0103 abreve +!E4 U+00E4 adieresis +!E5 U+013A lacute +!E6 U+0107 cacute +!E7 U+00E7 ccedilla +!E8 U+010D ccaron +!E9 U+00E9 eacute +!EA U+0119 eogonek +!EB U+00EB edieresis +!EC U+011B ecaron +!ED U+00ED iacute +!EE U+00EE icircumflex +!EF U+010F dcaron +!F0 U+0111 dcroat +!F1 U+0144 nacute +!F2 U+0148 ncaron +!F3 U+00F3 oacute +!F4 U+00F4 ocircumflex +!F5 U+0151 ohungarumlaut +!F6 U+00F6 odieresis +!F7 U+00F7 divide +!F8 U+0159 rcaron +!F9 U+016F uring +!FA U+00FA uacute +!FB U+0171 uhungarumlaut +!FC U+00FC udieresis +!FD U+00FD yacute +!FE U+0163 tcommaaccent +!FF U+02D9 dotaccent diff --git a/include/xslfo2pdf/fpdf/font/makefont/iso-8859-4.map b/include/xslfo2pdf/fpdf/font/makefont/iso-8859-4.map new file mode 100644 index 000000000..e81dd7f31 --- /dev/null +++ b/include/xslfo2pdf/fpdf/font/makefont/iso-8859-4.map @@ -0,0 +1,256 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+0080 .notdef +!81 U+0081 .notdef +!82 U+0082 .notdef +!83 U+0083 .notdef +!84 U+0084 .notdef +!85 U+0085 .notdef +!86 U+0086 .notdef +!87 U+0087 .notdef +!88 U+0088 .notdef +!89 U+0089 .notdef +!8A U+008A .notdef +!8B U+008B .notdef +!8C U+008C .notdef +!8D U+008D .notdef +!8E U+008E .notdef +!8F U+008F .notdef +!90 U+0090 .notdef +!91 U+0091 .notdef +!92 U+0092 .notdef +!93 U+0093 .notdef +!94 U+0094 .notdef +!95 U+0095 .notdef +!96 U+0096 .notdef +!97 U+0097 .notdef +!98 U+0098 .notdef +!99 U+0099 .notdef +!9A U+009A .notdef +!9B U+009B .notdef +!9C U+009C .notdef +!9D U+009D .notdef +!9E U+009E .notdef +!9F U+009F .notdef +!A0 U+00A0 space +!A1 U+0104 Aogonek +!A2 U+0138 kgreenlandic +!A3 U+0156 Rcommaaccent +!A4 U+00A4 currency +!A5 U+0128 Itilde +!A6 U+013B Lcommaaccent +!A7 U+00A7 section +!A8 U+00A8 dieresis +!A9 U+0160 Scaron +!AA U+0112 Emacron +!AB U+0122 Gcommaaccent +!AC U+0166 Tbar +!AD U+00AD hyphen +!AE U+017D Zcaron +!AF U+00AF macron +!B0 U+00B0 degree +!B1 U+0105 aogonek +!B2 U+02DB ogonek +!B3 U+0157 rcommaaccent +!B4 U+00B4 acute +!B5 U+0129 itilde +!B6 U+013C lcommaaccent +!B7 U+02C7 caron +!B8 U+00B8 cedilla +!B9 U+0161 scaron +!BA U+0113 emacron +!BB U+0123 gcommaaccent +!BC U+0167 tbar +!BD U+014A Eng +!BE U+017E zcaron +!BF U+014B eng +!C0 U+0100 Amacron +!C1 U+00C1 Aacute +!C2 U+00C2 Acircumflex +!C3 U+00C3 Atilde +!C4 U+00C4 Adieresis +!C5 U+00C5 Aring +!C6 U+00C6 AE +!C7 U+012E Iogonek +!C8 U+010C Ccaron +!C9 U+00C9 Eacute +!CA U+0118 Eogonek +!CB U+00CB Edieresis +!CC U+0116 Edotaccent +!CD U+00CD Iacute +!CE U+00CE Icircumflex +!CF U+012A Imacron +!D0 U+0110 Dcroat +!D1 U+0145 Ncommaaccent +!D2 U+014C Omacron +!D3 U+0136 Kcommaaccent +!D4 U+00D4 Ocircumflex +!D5 U+00D5 Otilde +!D6 U+00D6 Odieresis +!D7 U+00D7 multiply +!D8 U+00D8 Oslash +!D9 U+0172 Uogonek +!DA U+00DA Uacute +!DB U+00DB Ucircumflex +!DC U+00DC Udieresis +!DD U+0168 Utilde +!DE U+016A Umacron +!DF U+00DF germandbls +!E0 U+0101 amacron +!E1 U+00E1 aacute +!E2 U+00E2 acircumflex +!E3 U+00E3 atilde +!E4 U+00E4 adieresis +!E5 U+00E5 aring +!E6 U+00E6 ae +!E7 U+012F iogonek +!E8 U+010D ccaron +!E9 U+00E9 eacute +!EA U+0119 eogonek +!EB U+00EB edieresis +!EC U+0117 edotaccent +!ED U+00ED iacute +!EE U+00EE icircumflex +!EF U+012B imacron +!F0 U+0111 dcroat +!F1 U+0146 ncommaaccent +!F2 U+014D omacron +!F3 U+0137 kcommaaccent +!F4 U+00F4 ocircumflex +!F5 U+00F5 otilde +!F6 U+00F6 odieresis +!F7 U+00F7 divide +!F8 U+00F8 oslash +!F9 U+0173 uogonek +!FA U+00FA uacute +!FB U+00FB ucircumflex +!FC U+00FC udieresis +!FD U+0169 utilde +!FE U+016B umacron +!FF U+02D9 dotaccent diff --git a/include/xslfo2pdf/fpdf/font/makefont/iso-8859-5.map b/include/xslfo2pdf/fpdf/font/makefont/iso-8859-5.map new file mode 100644 index 000000000..8030fd544 --- /dev/null +++ b/include/xslfo2pdf/fpdf/font/makefont/iso-8859-5.map @@ -0,0 +1,256 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+0080 .notdef +!81 U+0081 .notdef +!82 U+0082 .notdef +!83 U+0083 .notdef +!84 U+0084 .notdef +!85 U+0085 .notdef +!86 U+0086 .notdef +!87 U+0087 .notdef +!88 U+0088 .notdef +!89 U+0089 .notdef +!8A U+008A .notdef +!8B U+008B .notdef +!8C U+008C .notdef +!8D U+008D .notdef +!8E U+008E .notdef +!8F U+008F .notdef +!90 U+0090 .notdef +!91 U+0091 .notdef +!92 U+0092 .notdef +!93 U+0093 .notdef +!94 U+0094 .notdef +!95 U+0095 .notdef +!96 U+0096 .notdef +!97 U+0097 .notdef +!98 U+0098 .notdef +!99 U+0099 .notdef +!9A U+009A .notdef +!9B U+009B .notdef +!9C U+009C .notdef +!9D U+009D .notdef +!9E U+009E .notdef +!9F U+009F .notdef +!A0 U+00A0 space +!A1 U+0401 afii10023 +!A2 U+0402 afii10051 +!A3 U+0403 afii10052 +!A4 U+0404 afii10053 +!A5 U+0405 afii10054 +!A6 U+0406 afii10055 +!A7 U+0407 afii10056 +!A8 U+0408 afii10057 +!A9 U+0409 afii10058 +!AA U+040A afii10059 +!AB U+040B afii10060 +!AC U+040C afii10061 +!AD U+00AD hyphen +!AE U+040E afii10062 +!AF U+040F afii10145 +!B0 U+0410 afii10017 +!B1 U+0411 afii10018 +!B2 U+0412 afii10019 +!B3 U+0413 afii10020 +!B4 U+0414 afii10021 +!B5 U+0415 afii10022 +!B6 U+0416 afii10024 +!B7 U+0417 afii10025 +!B8 U+0418 afii10026 +!B9 U+0419 afii10027 +!BA U+041A afii10028 +!BB U+041B afii10029 +!BC U+041C afii10030 +!BD U+041D afii10031 +!BE U+041E afii10032 +!BF U+041F afii10033 +!C0 U+0420 afii10034 +!C1 U+0421 afii10035 +!C2 U+0422 afii10036 +!C3 U+0423 afii10037 +!C4 U+0424 afii10038 +!C5 U+0425 afii10039 +!C6 U+0426 afii10040 +!C7 U+0427 afii10041 +!C8 U+0428 afii10042 +!C9 U+0429 afii10043 +!CA U+042A afii10044 +!CB U+042B afii10045 +!CC U+042C afii10046 +!CD U+042D afii10047 +!CE U+042E afii10048 +!CF U+042F afii10049 +!D0 U+0430 afii10065 +!D1 U+0431 afii10066 +!D2 U+0432 afii10067 +!D3 U+0433 afii10068 +!D4 U+0434 afii10069 +!D5 U+0435 afii10070 +!D6 U+0436 afii10072 +!D7 U+0437 afii10073 +!D8 U+0438 afii10074 +!D9 U+0439 afii10075 +!DA U+043A afii10076 +!DB U+043B afii10077 +!DC U+043C afii10078 +!DD U+043D afii10079 +!DE U+043E afii10080 +!DF U+043F afii10081 +!E0 U+0440 afii10082 +!E1 U+0441 afii10083 +!E2 U+0442 afii10084 +!E3 U+0443 afii10085 +!E4 U+0444 afii10086 +!E5 U+0445 afii10087 +!E6 U+0446 afii10088 +!E7 U+0447 afii10089 +!E8 U+0448 afii10090 +!E9 U+0449 afii10091 +!EA U+044A afii10092 +!EB U+044B afii10093 +!EC U+044C afii10094 +!ED U+044D afii10095 +!EE U+044E afii10096 +!EF U+044F afii10097 +!F0 U+2116 afii61352 +!F1 U+0451 afii10071 +!F2 U+0452 afii10099 +!F3 U+0453 afii10100 +!F4 U+0454 afii10101 +!F5 U+0455 afii10102 +!F6 U+0456 afii10103 +!F7 U+0457 afii10104 +!F8 U+0458 afii10105 +!F9 U+0459 afii10106 +!FA U+045A afii10107 +!FB U+045B afii10108 +!FC U+045C afii10109 +!FD U+00A7 section +!FE U+045E afii10110 +!FF U+045F afii10193 diff --git a/include/xslfo2pdf/fpdf/font/makefont/iso-8859-7.map b/include/xslfo2pdf/fpdf/font/makefont/iso-8859-7.map new file mode 100644 index 000000000..be8698afc --- /dev/null +++ b/include/xslfo2pdf/fpdf/font/makefont/iso-8859-7.map @@ -0,0 +1,250 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+0080 .notdef +!81 U+0081 .notdef +!82 U+0082 .notdef +!83 U+0083 .notdef +!84 U+0084 .notdef +!85 U+0085 .notdef +!86 U+0086 .notdef +!87 U+0087 .notdef +!88 U+0088 .notdef +!89 U+0089 .notdef +!8A U+008A .notdef +!8B U+008B .notdef +!8C U+008C .notdef +!8D U+008D .notdef +!8E U+008E .notdef +!8F U+008F .notdef +!90 U+0090 .notdef +!91 U+0091 .notdef +!92 U+0092 .notdef +!93 U+0093 .notdef +!94 U+0094 .notdef +!95 U+0095 .notdef +!96 U+0096 .notdef +!97 U+0097 .notdef +!98 U+0098 .notdef +!99 U+0099 .notdef +!9A U+009A .notdef +!9B U+009B .notdef +!9C U+009C .notdef +!9D U+009D .notdef +!9E U+009E .notdef +!9F U+009F .notdef +!A0 U+00A0 space +!A1 U+2018 quoteleft +!A2 U+2019 quoteright +!A3 U+00A3 sterling +!A6 U+00A6 brokenbar +!A7 U+00A7 section +!A8 U+00A8 dieresis +!A9 U+00A9 copyright +!AB U+00AB guillemotleft +!AC U+00AC logicalnot +!AD U+00AD hyphen +!AF U+2015 afii00208 +!B0 U+00B0 degree +!B1 U+00B1 plusminus +!B2 U+00B2 twosuperior +!B3 U+00B3 threesuperior +!B4 U+0384 tonos +!B5 U+0385 dieresistonos +!B6 U+0386 Alphatonos +!B7 U+00B7 periodcentered +!B8 U+0388 Epsilontonos +!B9 U+0389 Etatonos +!BA U+038A Iotatonos +!BB U+00BB guillemotright +!BC U+038C Omicrontonos +!BD U+00BD onehalf +!BE U+038E Upsilontonos +!BF U+038F Omegatonos +!C0 U+0390 iotadieresistonos +!C1 U+0391 Alpha +!C2 U+0392 Beta +!C3 U+0393 Gamma +!C4 U+0394 Delta +!C5 U+0395 Epsilon +!C6 U+0396 Zeta +!C7 U+0397 Eta +!C8 U+0398 Theta +!C9 U+0399 Iota +!CA U+039A Kappa +!CB U+039B Lambda +!CC U+039C Mu +!CD U+039D Nu +!CE U+039E Xi +!CF U+039F Omicron +!D0 U+03A0 Pi +!D1 U+03A1 Rho +!D3 U+03A3 Sigma +!D4 U+03A4 Tau +!D5 U+03A5 Upsilon +!D6 U+03A6 Phi +!D7 U+03A7 Chi +!D8 U+03A8 Psi +!D9 U+03A9 Omega +!DA U+03AA Iotadieresis +!DB U+03AB Upsilondieresis +!DC U+03AC alphatonos +!DD U+03AD epsilontonos +!DE U+03AE etatonos +!DF U+03AF iotatonos +!E0 U+03B0 upsilondieresistonos +!E1 U+03B1 alpha +!E2 U+03B2 beta +!E3 U+03B3 gamma +!E4 U+03B4 delta +!E5 U+03B5 epsilon +!E6 U+03B6 zeta +!E7 U+03B7 eta +!E8 U+03B8 theta +!E9 U+03B9 iota +!EA U+03BA kappa +!EB U+03BB lambda +!EC U+03BC mu +!ED U+03BD nu +!EE U+03BE xi +!EF U+03BF omicron +!F0 U+03C0 pi +!F1 U+03C1 rho +!F2 U+03C2 sigma1 +!F3 U+03C3 sigma +!F4 U+03C4 tau +!F5 U+03C5 upsilon +!F6 U+03C6 phi +!F7 U+03C7 chi +!F8 U+03C8 psi +!F9 U+03C9 omega +!FA U+03CA iotadieresis +!FB U+03CB upsilondieresis +!FC U+03CC omicrontonos +!FD U+03CD upsilontonos +!FE U+03CE omegatonos diff --git a/include/xslfo2pdf/fpdf/font/makefont/iso-8859-9.map b/include/xslfo2pdf/fpdf/font/makefont/iso-8859-9.map new file mode 100644 index 000000000..a60bb19d4 --- /dev/null +++ b/include/xslfo2pdf/fpdf/font/makefont/iso-8859-9.map @@ -0,0 +1,256 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+0080 .notdef +!81 U+0081 .notdef +!82 U+0082 .notdef +!83 U+0083 .notdef +!84 U+0084 .notdef +!85 U+0085 .notdef +!86 U+0086 .notdef +!87 U+0087 .notdef +!88 U+0088 .notdef +!89 U+0089 .notdef +!8A U+008A .notdef +!8B U+008B .notdef +!8C U+008C .notdef +!8D U+008D .notdef +!8E U+008E .notdef +!8F U+008F .notdef +!90 U+0090 .notdef +!91 U+0091 .notdef +!92 U+0092 .notdef +!93 U+0093 .notdef +!94 U+0094 .notdef +!95 U+0095 .notdef +!96 U+0096 .notdef +!97 U+0097 .notdef +!98 U+0098 .notdef +!99 U+0099 .notdef +!9A U+009A .notdef +!9B U+009B .notdef +!9C U+009C .notdef +!9D U+009D .notdef +!9E U+009E .notdef +!9F U+009F .notdef +!A0 U+00A0 space +!A1 U+00A1 exclamdown +!A2 U+00A2 cent +!A3 U+00A3 sterling +!A4 U+00A4 currency +!A5 U+00A5 yen +!A6 U+00A6 brokenbar +!A7 U+00A7 section +!A8 U+00A8 dieresis +!A9 U+00A9 copyright +!AA U+00AA ordfeminine +!AB U+00AB guillemotleft +!AC U+00AC logicalnot +!AD U+00AD hyphen +!AE U+00AE registered +!AF U+00AF macron +!B0 U+00B0 degree +!B1 U+00B1 plusminus +!B2 U+00B2 twosuperior +!B3 U+00B3 threesuperior +!B4 U+00B4 acute +!B5 U+00B5 mu +!B6 U+00B6 paragraph +!B7 U+00B7 periodcentered +!B8 U+00B8 cedilla +!B9 U+00B9 onesuperior +!BA U+00BA ordmasculine +!BB U+00BB guillemotright +!BC U+00BC onequarter +!BD U+00BD onehalf +!BE U+00BE threequarters +!BF U+00BF questiondown +!C0 U+00C0 Agrave +!C1 U+00C1 Aacute +!C2 U+00C2 Acircumflex +!C3 U+00C3 Atilde +!C4 U+00C4 Adieresis +!C5 U+00C5 Aring +!C6 U+00C6 AE +!C7 U+00C7 Ccedilla +!C8 U+00C8 Egrave +!C9 U+00C9 Eacute +!CA U+00CA Ecircumflex +!CB U+00CB Edieresis +!CC U+00CC Igrave +!CD U+00CD Iacute +!CE U+00CE Icircumflex +!CF U+00CF Idieresis +!D0 U+011E Gbreve +!D1 U+00D1 Ntilde +!D2 U+00D2 Ograve +!D3 U+00D3 Oacute +!D4 U+00D4 Ocircumflex +!D5 U+00D5 Otilde +!D6 U+00D6 Odieresis +!D7 U+00D7 multiply +!D8 U+00D8 Oslash +!D9 U+00D9 Ugrave +!DA U+00DA Uacute +!DB U+00DB Ucircumflex +!DC U+00DC Udieresis +!DD U+0130 Idotaccent +!DE U+015E Scedilla +!DF U+00DF germandbls +!E0 U+00E0 agrave +!E1 U+00E1 aacute +!E2 U+00E2 acircumflex +!E3 U+00E3 atilde +!E4 U+00E4 adieresis +!E5 U+00E5 aring +!E6 U+00E6 ae +!E7 U+00E7 ccedilla +!E8 U+00E8 egrave +!E9 U+00E9 eacute +!EA U+00EA ecircumflex +!EB U+00EB edieresis +!EC U+00EC igrave +!ED U+00ED iacute +!EE U+00EE icircumflex +!EF U+00EF idieresis +!F0 U+011F gbreve +!F1 U+00F1 ntilde +!F2 U+00F2 ograve +!F3 U+00F3 oacute +!F4 U+00F4 ocircumflex +!F5 U+00F5 otilde +!F6 U+00F6 odieresis +!F7 U+00F7 divide +!F8 U+00F8 oslash +!F9 U+00F9 ugrave +!FA U+00FA uacute +!FB U+00FB ucircumflex +!FC U+00FC udieresis +!FD U+0131 dotlessi +!FE U+015F scedilla +!FF U+00FF ydieresis diff --git a/include/xslfo2pdf/fpdf/font/makefont/koi8-r.map b/include/xslfo2pdf/fpdf/font/makefont/koi8-r.map new file mode 100644 index 000000000..026880d66 --- /dev/null +++ b/include/xslfo2pdf/fpdf/font/makefont/koi8-r.map @@ -0,0 +1,256 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+2500 SF100000 +!81 U+2502 SF110000 +!82 U+250C SF010000 +!83 U+2510 SF030000 +!84 U+2514 SF020000 +!85 U+2518 SF040000 +!86 U+251C SF080000 +!87 U+2524 SF090000 +!88 U+252C SF060000 +!89 U+2534 SF070000 +!8A U+253C SF050000 +!8B U+2580 upblock +!8C U+2584 dnblock +!8D U+2588 block +!8E U+258C lfblock +!8F U+2590 rtblock +!90 U+2591 ltshade +!91 U+2592 shade +!92 U+2593 dkshade +!93 U+2320 integraltp +!94 U+25A0 filledbox +!95 U+2219 periodcentered +!96 U+221A radical +!97 U+2248 approxequal +!98 U+2264 lessequal +!99 U+2265 greaterequal +!9A U+00A0 space +!9B U+2321 integralbt +!9C U+00B0 degree +!9D U+00B2 twosuperior +!9E U+00B7 periodcentered +!9F U+00F7 divide +!A0 U+2550 SF430000 +!A1 U+2551 SF240000 +!A2 U+2552 SF510000 +!A3 U+0451 afii10071 +!A4 U+2553 SF520000 +!A5 U+2554 SF390000 +!A6 U+2555 SF220000 +!A7 U+2556 SF210000 +!A8 U+2557 SF250000 +!A9 U+2558 SF500000 +!AA U+2559 SF490000 +!AB U+255A SF380000 +!AC U+255B SF280000 +!AD U+255C SF270000 +!AE U+255D SF260000 +!AF U+255E SF360000 +!B0 U+255F SF370000 +!B1 U+2560 SF420000 +!B2 U+2561 SF190000 +!B3 U+0401 afii10023 +!B4 U+2562 SF200000 +!B5 U+2563 SF230000 +!B6 U+2564 SF470000 +!B7 U+2565 SF480000 +!B8 U+2566 SF410000 +!B9 U+2567 SF450000 +!BA U+2568 SF460000 +!BB U+2569 SF400000 +!BC U+256A SF540000 +!BD U+256B SF530000 +!BE U+256C SF440000 +!BF U+00A9 copyright +!C0 U+044E afii10096 +!C1 U+0430 afii10065 +!C2 U+0431 afii10066 +!C3 U+0446 afii10088 +!C4 U+0434 afii10069 +!C5 U+0435 afii10070 +!C6 U+0444 afii10086 +!C7 U+0433 afii10068 +!C8 U+0445 afii10087 +!C9 U+0438 afii10074 +!CA U+0439 afii10075 +!CB U+043A afii10076 +!CC U+043B afii10077 +!CD U+043C afii10078 +!CE U+043D afii10079 +!CF U+043E afii10080 +!D0 U+043F afii10081 +!D1 U+044F afii10097 +!D2 U+0440 afii10082 +!D3 U+0441 afii10083 +!D4 U+0442 afii10084 +!D5 U+0443 afii10085 +!D6 U+0436 afii10072 +!D7 U+0432 afii10067 +!D8 U+044C afii10094 +!D9 U+044B afii10093 +!DA U+0437 afii10073 +!DB U+0448 afii10090 +!DC U+044D afii10095 +!DD U+0449 afii10091 +!DE U+0447 afii10089 +!DF U+044A afii10092 +!E0 U+042E afii10048 +!E1 U+0410 afii10017 +!E2 U+0411 afii10018 +!E3 U+0426 afii10040 +!E4 U+0414 afii10021 +!E5 U+0415 afii10022 +!E6 U+0424 afii10038 +!E7 U+0413 afii10020 +!E8 U+0425 afii10039 +!E9 U+0418 afii10026 +!EA U+0419 afii10027 +!EB U+041A afii10028 +!EC U+041B afii10029 +!ED U+041C afii10030 +!EE U+041D afii10031 +!EF U+041E afii10032 +!F0 U+041F afii10033 +!F1 U+042F afii10049 +!F2 U+0420 afii10034 +!F3 U+0421 afii10035 +!F4 U+0422 afii10036 +!F5 U+0423 afii10037 +!F6 U+0416 afii10024 +!F7 U+0412 afii10019 +!F8 U+042C afii10046 +!F9 U+042B afii10045 +!FA U+0417 afii10025 +!FB U+0428 afii10042 +!FC U+042D afii10047 +!FD U+0429 afii10043 +!FE U+0427 afii10041 +!FF U+042A afii10044 diff --git a/include/xslfo2pdf/fpdf/font/makefont/koi8-u.map b/include/xslfo2pdf/fpdf/font/makefont/koi8-u.map new file mode 100644 index 000000000..97d9d031b --- /dev/null +++ b/include/xslfo2pdf/fpdf/font/makefont/koi8-u.map @@ -0,0 +1,256 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+2500 SF100000 +!81 U+2502 SF110000 +!82 U+250C SF010000 +!83 U+2510 SF030000 +!84 U+2514 SF020000 +!85 U+2518 SF040000 +!86 U+251C SF080000 +!87 U+2524 SF090000 +!88 U+252C SF060000 +!89 U+2534 SF070000 +!8A U+253C SF050000 +!8B U+2580 upblock +!8C U+2584 dnblock +!8D U+2588 block +!8E U+258C lfblock +!8F U+2590 rtblock +!90 U+2591 ltshade +!91 U+2592 shade +!92 U+2593 dkshade +!93 U+2320 integraltp +!94 U+25A0 filledbox +!95 U+2022 bullet +!96 U+221A radical +!97 U+2248 approxequal +!98 U+2264 lessequal +!99 U+2265 greaterequal +!9A U+00A0 space +!9B U+2321 integralbt +!9C U+00B0 degree +!9D U+00B2 twosuperior +!9E U+00B7 periodcentered +!9F U+00F7 divide +!A0 U+2550 SF430000 +!A1 U+2551 SF240000 +!A2 U+2552 SF510000 +!A3 U+0451 afii10071 +!A4 U+0454 afii10101 +!A5 U+2554 SF390000 +!A6 U+0456 afii10103 +!A7 U+0457 afii10104 +!A8 U+2557 SF250000 +!A9 U+2558 SF500000 +!AA U+2559 SF490000 +!AB U+255A SF380000 +!AC U+255B SF280000 +!AD U+0491 afii10098 +!AE U+255D SF260000 +!AF U+255E SF360000 +!B0 U+255F SF370000 +!B1 U+2560 SF420000 +!B2 U+2561 SF190000 +!B3 U+0401 afii10023 +!B4 U+0404 afii10053 +!B5 U+2563 SF230000 +!B6 U+0406 afii10055 +!B7 U+0407 afii10056 +!B8 U+2566 SF410000 +!B9 U+2567 SF450000 +!BA U+2568 SF460000 +!BB U+2569 SF400000 +!BC U+256A SF540000 +!BD U+0490 afii10050 +!BE U+256C SF440000 +!BF U+00A9 copyright +!C0 U+044E afii10096 +!C1 U+0430 afii10065 +!C2 U+0431 afii10066 +!C3 U+0446 afii10088 +!C4 U+0434 afii10069 +!C5 U+0435 afii10070 +!C6 U+0444 afii10086 +!C7 U+0433 afii10068 +!C8 U+0445 afii10087 +!C9 U+0438 afii10074 +!CA U+0439 afii10075 +!CB U+043A afii10076 +!CC U+043B afii10077 +!CD U+043C afii10078 +!CE U+043D afii10079 +!CF U+043E afii10080 +!D0 U+043F afii10081 +!D1 U+044F afii10097 +!D2 U+0440 afii10082 +!D3 U+0441 afii10083 +!D4 U+0442 afii10084 +!D5 U+0443 afii10085 +!D6 U+0436 afii10072 +!D7 U+0432 afii10067 +!D8 U+044C afii10094 +!D9 U+044B afii10093 +!DA U+0437 afii10073 +!DB U+0448 afii10090 +!DC U+044D afii10095 +!DD U+0449 afii10091 +!DE U+0447 afii10089 +!DF U+044A afii10092 +!E0 U+042E afii10048 +!E1 U+0410 afii10017 +!E2 U+0411 afii10018 +!E3 U+0426 afii10040 +!E4 U+0414 afii10021 +!E5 U+0415 afii10022 +!E6 U+0424 afii10038 +!E7 U+0413 afii10020 +!E8 U+0425 afii10039 +!E9 U+0418 afii10026 +!EA U+0419 afii10027 +!EB U+041A afii10028 +!EC U+041B afii10029 +!ED U+041C afii10030 +!EE U+041D afii10031 +!EF U+041E afii10032 +!F0 U+041F afii10033 +!F1 U+042F afii10049 +!F2 U+0420 afii10034 +!F3 U+0421 afii10035 +!F4 U+0422 afii10036 +!F5 U+0423 afii10037 +!F6 U+0416 afii10024 +!F7 U+0412 afii10019 +!F8 U+042C afii10046 +!F9 U+042B afii10045 +!FA U+0417 afii10025 +!FB U+0428 afii10042 +!FC U+042D afii10047 +!FD U+0429 afii10043 +!FE U+0427 afii10041 +!FF U+042A afii10044 diff --git a/include/xslfo2pdf/fpdf/font/makefont/makefont.php b/include/xslfo2pdf/fpdf/font/makefont/makefont.php new file mode 100644 index 000000000..178e9e239 --- /dev/null +++ b/include/xslfo2pdf/fpdf/font/makefont/makefont.php @@ -0,0 +1,416 @@ +Error: encoding not found: '.$enc); + $cc2gn=array(); + foreach($a as $l) + { + if($l{0}=='!') + { + $e=preg_split('/[ \\t]+/',rtrim($l)); + $cc=hexdec(substr($e[0],1)); + $gn=$e[2]; + $cc2gn[$cc]=$gn; + } + } + for($i=0;$i<=255;$i++) + { + if(!isset($cc2gn[$i])) + $cc2gn[$i]='.notdef'; + } + return $cc2gn; +} + +function ReadAFM($file,&$map) +{ + //Read a font metric file + $a=file($file); + if(empty($a)) + die('File not found'); + $widths=array(); + $fm=array(); + $fix=array('Edot'=>'Edotaccent','edot'=>'edotaccent','Idot'=>'Idotaccent','Zdot'=>'Zdotaccent','zdot'=>'zdotaccent', + 'Odblacute'=>'Ohungarumlaut','odblacute'=>'ohungarumlaut','Udblacute'=>'Uhungarumlaut','udblacute'=>'uhungarumlaut', + 'Gcedilla'=>'Gcommaaccent','gcedilla'=>'gcommaaccent','Kcedilla'=>'Kcommaaccent','kcedilla'=>'kcommaaccent', + 'Lcedilla'=>'Lcommaaccent','lcedilla'=>'lcommaaccent','Ncedilla'=>'Ncommaaccent','ncedilla'=>'ncommaaccent', + 'Rcedilla'=>'Rcommaaccent','rcedilla'=>'rcommaaccent','Scedilla'=>'Scommaaccent','scedilla'=>'scommaaccent', + 'Tcedilla'=>'Tcommaaccent','tcedilla'=>'tcommaaccent','Dslash'=>'Dcroat','dslash'=>'dcroat','Dmacron'=>'Dcroat','dmacron'=>'dcroat', + 'combininggraveaccent'=>'gravecomb','combininghookabove'=>'hookabovecomb','combiningtildeaccent'=>'tildecomb', + 'combiningacuteaccent'=>'acutecomb','combiningdotbelow'=>'dotbelowcomb','dongsign'=>'dong'); + foreach($a as $l) + { + $e=explode(' ',rtrim($l)); + if(count($e)<2) + continue; + $code=$e[0]; + $param=$e[1]; + if($code=='C') + { + //Character metrics + $cc=(int)$e[1]; + $w=$e[4]; + $gn=$e[7]; + if(substr($gn,-4)=='20AC') + $gn='Euro'; + if(isset($fix[$gn])) + { + //Fix incorrect glyph name + foreach($map as $c=>$n) + { + if($n==$fix[$gn]) + $map[$c]=$gn; + } + } + if(empty($map)) + { + //Symbolic font: use built-in encoding + $widths[$cc]=$w; + } + else + { + $widths[$gn]=$w; + if($gn=='X') + $fm['CapXHeight']=$e[13]; + } + if($gn=='.notdef') + $fm['MissingWidth']=$w; + } + elseif($code=='FontName') + $fm['FontName']=$param; + elseif($code=='Weight') + $fm['Weight']=$param; + elseif($code=='ItalicAngle') + $fm['ItalicAngle']=(double)$param; + elseif($code=='Ascender') + $fm['Ascender']=(int)$param; + elseif($code=='Descender') + $fm['Descender']=(int)$param; + elseif($code=='UnderlineThickness') + $fm['UnderlineThickness']=(int)$param; + elseif($code=='UnderlinePosition') + $fm['UnderlinePosition']=(int)$param; + elseif($code=='IsFixedPitch') + $fm['IsFixedPitch']=($param=='true'); + elseif($code=='FontBBox') + $fm['FontBBox']=array($e[1],$e[2],$e[3],$e[4]); + elseif($code=='CapHeight') + $fm['CapHeight']=(int)$param; + elseif($code=='StdVW') + $fm['StdVW']=(int)$param; + } + if(!isset($fm['FontName'])) + die('FontName not found'); + if(!empty($map)) + { + if(!isset($widths['.notdef'])) + $widths['.notdef']=600; + if(!isset($widths['Delta']) and isset($widths['increment'])) + $widths['Delta']=$widths['increment']; + //Order widths according to map + for($i=0;$i<=255;$i++) + { + if(!isset($widths[$map[$i]])) + { + echo 'Warning: character '.$map[$i].' is missing
'; + $widths[$i]=$widths['.notdef']; + } + else + $widths[$i]=$widths[$map[$i]]; + } + } + $fm['Widths']=$widths; + return $fm; +} + +function MakeFontDescriptor($fm,$symbolic) +{ + //Ascent + $asc=(isset($fm['Ascender']) ? $fm['Ascender'] : 1000); + $fd="array('Ascent'=>".$asc; + //Descent + $desc=(isset($fm['Descender']) ? $fm['Descender'] : -200); + $fd.=",'Descent'=>".$desc; + //CapHeight + if(isset($fm['CapHeight'])) + $ch=$fm['CapHeight']; + elseif(isset($fm['CapXHeight'])) + $ch=$fm['CapXHeight']; + else + $ch=$asc; + $fd.=",'CapHeight'=>".$ch; + //Flags + $flags=0; + if(isset($fm['IsFixedPitch']) and $fm['IsFixedPitch']) + $flags+=1<<0; + if($symbolic) + $flags+=1<<2; + if(!$symbolic) + $flags+=1<<5; + if(isset($fm['ItalicAngle']) and $fm['ItalicAngle']!=0) + $flags+=1<<6; + $fd.=",'Flags'=>".$flags; + //FontBBox + if(isset($fm['FontBBox'])) + $fbb=$fm['FontBBox']; + else + $fbb=array(0,$des-100,1000,$asc+100); + $fd.=",'FontBBox'=>'[".$fbb[0].' '.$fbb[1].' '.$fbb[2].' '.$fbb[3]."]'"; + //ItalicAngle + $ia=(isset($fm['ItalicAngle']) ? $fm['ItalicAngle'] : 0); + $fd.=",'ItalicAngle'=>".$ia; + //StemV + if(isset($fm['StdVW'])) + $stemv=$fm['StdVW']; + elseif(isset($fm['Weight']) and eregi('(bold|black)',$fm['Weight'])) + $stemv=120; + else + $stemv=70; + $fd.=",'StemV'=>".$stemv; + //MissingWidth + if(isset($fm['MissingWidth'])) + $fd.=",'MissingWidth'=>".$fm['MissingWidth']; + $fd.=')'; + return $fd; +} + +function MakeWidthArray($fm) +{ + //Make character width array + $s="array(\n\t"; + $cw=$fm['Widths']; + for($i=0;$i<=255;$i++) + { + if(chr($i)=="'") + $s.="'\\''"; + elseif(chr($i)=="\\") + $s.="'\\\\'"; + elseif($i>=32 and $i<=126) + $s.="'".chr($i)."'"; + else + $s.="chr($i)"; + $s.='=>'.$fm['Widths'][$i]; + if($i<255) + $s.=','; + if(($i+1)%22==0) + $s.="\n\t"; + } + $s.=')'; + return $s; +} + +function MakeFontEncoding($map) +{ + //Build differences from reference encoding + $ref=ReadMap('cp1252'); + $s=''; + $last=0; + for($i=32;$i<=255;$i++) + { + if($map[$i]!=$ref[$i]) + { + if($i!=$last+1) + $s.=$i.' '; + $last=$i; + $s.='/'.$map[$i].' '; + } + } + return rtrim($s); +} + +function SaveToFile($file,$s,$mode='t') +{ + $f=fopen($file,'w'.$mode); + if(!$f) + die('Can\'t write to file '.$file); + fwrite($f,$s,strlen($s)); + fclose($f); +} + +function ReadShort($f) +{ + $a=unpack('n1n',fread($f,2)); + return $a['n']; +} + +function ReadLong($f) +{ + $a=unpack('N1N',fread($f,4)); + return $a['N']; +} + +function CheckTTF($file) +{ + //Check if font license allows embedding + $f=fopen($file,'rb'); + if(!$f) + die('Error: Can\'t open '.$file); + //Extract number of tables + fseek($f,4,SEEK_CUR); + $nb=ReadShort($f); + fseek($f,6,SEEK_CUR); + //Seek OS/2 table + $found=false; + for($i=0;$i<$nb;$i++) + { + if(fread($f,4)=='OS/2') + { + $found=true; + break; + } + fseek($f,12,SEEK_CUR); + } + if(!$found) + { + fclose($f); + return; + } + fseek($f,4,SEEK_CUR); + $offset=ReadLong($f); + fseek($f,$offset,SEEK_SET); + //Extract fsType flags + fseek($f,8,SEEK_CUR); + $fsType=ReadShort($f); + $rl=($fsType & 0x02)!=0; + $pp=($fsType & 0x04)!=0; + $e=($fsType & 0x08)!=0; + fclose($f); + if($rl and !$pp and !$e) + echo 'Warning: font license does not allow embedding'; +} + +/******************************************************************************* +* $fontfile : chemin du fichier TTF (ou chaîne vide si pas d'incorporation) * +* $afmfile : chemin du fichier AFM * +* $enc : encodage (ou chaîne vide si la police est symbolique) * +* $patch : patch optionnel pour l'encodage * +* $type : type de la police si $fontfile est vide * +*******************************************************************************/ +function MakeFont($fontfile,$afmfile,$enc='cp1252',$patch=array(),$type='TrueType') +{ + //Generate a font definition file + set_magic_quotes_runtime(0); + ini_set('auto_detect_line_endings','1'); + if($enc) + { + $map=ReadMap($enc); + foreach($patch as $cc=>$gn) + $map[$cc]=$gn; + } + else + $map=array(); + if(!file_exists($afmfile)) + die('Error: AFM file not found: '.$afmfile); + $fm=ReadAFM($afmfile,$map); + if($enc) + $diff=MakeFontEncoding($map); + else + $diff=''; + $fd=MakeFontDescriptor($fm,empty($map)); + //Find font type + if($fontfile) + { + $ext=strtolower(substr($fontfile,-3)); + if($ext=='ttf') + $type='TrueType'; + elseif($ext=='pfb') + $type='Type1'; + else + die('Error: unrecognized font file extension: '.$ext); + } + else + { + if($type!='TrueType' and $type!='Type1') + die('Error: incorrect font type: '.$type); + } + //Start generation + $s='Error: font file not found: '.$fontfile); + if($type=='TrueType') + CheckTTF($fontfile); + $f=fopen($fontfile,'rb'); + if(!$f) + die('Error: Can\'t open '.$fontfile); + $file=fread($f,filesize($fontfile)); + fclose($f); + if($type=='Type1') + { + //Find first two sections and discard third one + $header=(ord($file{0})==128); + if($header) + { + //Strip first binary header + $file=substr($file,6); + } + $pos=strpos($file,'eexec'); + if(!$pos) + die('Error: font file does not seem to be valid Type1'); + $size1=$pos+6; + if($header and ord($file{$size1})==128) + { + //Strip second binary header + $file=substr($file,0,$size1).substr($file,$size1+6); + } + $pos=strpos($file,'00000000'); + if(!$pos) + die('Error: font file does not seem to be valid Type1'); + $size2=$pos-$size1; + $file=substr($file,0,$size1+$size2); + } + if(function_exists('gzcompress')) + { + $cmp=$basename.'.z'; + SaveToFile($cmp,gzcompress($file),'b'); + $s.='$file=\''.$cmp."';\n"; + echo 'Font file compressed ('.$cmp.')
'; + } + else + { + $s.='$file=\''.basename($fontfile)."';\n"; + echo 'Notice: font file could not be compressed (zlib extension not available)
'; + } + if($type=='Type1') + { + $s.='$size1='.$size1.";\n"; + $s.='$size2='.$size2.";\n"; + } + else + $s.='$originalsize='.filesize($fontfile).";\n"; + } + else + { + //Not embedded font + $s.='$file='."'';\n"; + } + $s.="?>\n"; + SaveToFile($basename.'.php',$s); + echo 'Font definition file generated ('.$basename.'.php'.')
'; +} +?> diff --git a/include/xslfo2pdf/fpdf/font/symbol.php b/include/xslfo2pdf/fpdf/font/symbol.php new file mode 100644 index 000000000..43b50e451 --- /dev/null +++ b/include/xslfo2pdf/fpdf/font/symbol.php @@ -0,0 +1,15 @@ +250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250, + chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>713,'#'=>500,'$'=>549,'%'=>833,'&'=>778,'\''=>439,'('=>333,')'=>333,'*'=>500,'+'=>549, + ','=>250,'-'=>549,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>278,';'=>278,'<'=>549,'='=>549,'>'=>549,'?'=>444,'@'=>549,'A'=>722, + 'B'=>667,'C'=>722,'D'=>612,'E'=>611,'F'=>763,'G'=>603,'H'=>722,'I'=>333,'J'=>631,'K'=>722,'L'=>686,'M'=>889,'N'=>722,'O'=>722,'P'=>768,'Q'=>741,'R'=>556,'S'=>592,'T'=>611,'U'=>690,'V'=>439,'W'=>768, + 'X'=>645,'Y'=>795,'Z'=>611,'['=>333,'\\'=>863,']'=>333,'^'=>658,'_'=>500,'`'=>500,'a'=>631,'b'=>549,'c'=>549,'d'=>494,'e'=>439,'f'=>521,'g'=>411,'h'=>603,'i'=>329,'j'=>603,'k'=>549,'l'=>549,'m'=>576, + 'n'=>521,'o'=>549,'p'=>549,'q'=>521,'r'=>549,'s'=>603,'t'=>439,'u'=>576,'v'=>713,'w'=>686,'x'=>493,'y'=>686,'z'=>494,'{'=>480,'|'=>200,'}'=>480,'~'=>549,chr(127)=>0,chr(128)=>0,chr(129)=>0,chr(130)=>0,chr(131)=>0, + chr(132)=>0,chr(133)=>0,chr(134)=>0,chr(135)=>0,chr(136)=>0,chr(137)=>0,chr(138)=>0,chr(139)=>0,chr(140)=>0,chr(141)=>0,chr(142)=>0,chr(143)=>0,chr(144)=>0,chr(145)=>0,chr(146)=>0,chr(147)=>0,chr(148)=>0,chr(149)=>0,chr(150)=>0,chr(151)=>0,chr(152)=>0,chr(153)=>0, + chr(154)=>0,chr(155)=>0,chr(156)=>0,chr(157)=>0,chr(158)=>0,chr(159)=>0,chr(160)=>750,chr(161)=>620,chr(162)=>247,chr(163)=>549,chr(164)=>167,chr(165)=>713,chr(166)=>500,chr(167)=>753,chr(168)=>753,chr(169)=>753,chr(170)=>753,chr(171)=>1042,chr(172)=>987,chr(173)=>603,chr(174)=>987,chr(175)=>603, + chr(176)=>400,chr(177)=>549,chr(178)=>411,chr(179)=>549,chr(180)=>549,chr(181)=>713,chr(182)=>494,chr(183)=>460,chr(184)=>549,chr(185)=>549,chr(186)=>549,chr(187)=>549,chr(188)=>1000,chr(189)=>603,chr(190)=>1000,chr(191)=>658,chr(192)=>823,chr(193)=>686,chr(194)=>795,chr(195)=>987,chr(196)=>768,chr(197)=>768, + chr(198)=>823,chr(199)=>768,chr(200)=>768,chr(201)=>713,chr(202)=>713,chr(203)=>713,chr(204)=>713,chr(205)=>713,chr(206)=>713,chr(207)=>713,chr(208)=>768,chr(209)=>713,chr(210)=>790,chr(211)=>790,chr(212)=>890,chr(213)=>823,chr(214)=>549,chr(215)=>250,chr(216)=>713,chr(217)=>603,chr(218)=>603,chr(219)=>1042, + chr(220)=>987,chr(221)=>603,chr(222)=>987,chr(223)=>603,chr(224)=>494,chr(225)=>329,chr(226)=>790,chr(227)=>790,chr(228)=>786,chr(229)=>713,chr(230)=>384,chr(231)=>384,chr(232)=>384,chr(233)=>384,chr(234)=>384,chr(235)=>384,chr(236)=>494,chr(237)=>494,chr(238)=>494,chr(239)=>494,chr(240)=>0,chr(241)=>329, + chr(242)=>274,chr(243)=>686,chr(244)=>686,chr(245)=>686,chr(246)=>384,chr(247)=>384,chr(248)=>384,chr(249)=>384,chr(250)=>384,chr(251)=>384,chr(252)=>494,chr(253)=>494,chr(254)=>494,chr(255)=>0); +?> diff --git a/include/xslfo2pdf/fpdf/font/times.php b/include/xslfo2pdf/fpdf/font/times.php new file mode 100644 index 000000000..837c706e0 --- /dev/null +++ b/include/xslfo2pdf/fpdf/font/times.php @@ -0,0 +1,15 @@ +250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250, + chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>408,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>180,'('=>333,')'=>333,'*'=>500,'+'=>564, + ','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>278,';'=>278,'<'=>564,'='=>564,'>'=>564,'?'=>444,'@'=>921,'A'=>722, + 'B'=>667,'C'=>667,'D'=>722,'E'=>611,'F'=>556,'G'=>722,'H'=>722,'I'=>333,'J'=>389,'K'=>722,'L'=>611,'M'=>889,'N'=>722,'O'=>722,'P'=>556,'Q'=>722,'R'=>667,'S'=>556,'T'=>611,'U'=>722,'V'=>722,'W'=>944, + 'X'=>722,'Y'=>722,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>469,'_'=>500,'`'=>333,'a'=>444,'b'=>500,'c'=>444,'d'=>500,'e'=>444,'f'=>333,'g'=>500,'h'=>500,'i'=>278,'j'=>278,'k'=>500,'l'=>278,'m'=>778, + 'n'=>500,'o'=>500,'p'=>500,'q'=>500,'r'=>333,'s'=>389,'t'=>278,'u'=>500,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>444,'{'=>480,'|'=>200,'}'=>480,'~'=>541,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500, + chr(132)=>444,chr(133)=>1000,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>556,chr(139)=>333,chr(140)=>889,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>444,chr(148)=>444,chr(149)=>350,chr(150)=>500,chr(151)=>1000,chr(152)=>333,chr(153)=>980, + chr(154)=>389,chr(155)=>333,chr(156)=>722,chr(157)=>350,chr(158)=>444,chr(159)=>722,chr(160)=>250,chr(161)=>333,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>200,chr(167)=>500,chr(168)=>333,chr(169)=>760,chr(170)=>276,chr(171)=>500,chr(172)=>564,chr(173)=>333,chr(174)=>760,chr(175)=>333, + chr(176)=>400,chr(177)=>564,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>500,chr(182)=>453,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>310,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>444,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722, + chr(198)=>889,chr(199)=>667,chr(200)=>611,chr(201)=>611,chr(202)=>611,chr(203)=>611,chr(204)=>333,chr(205)=>333,chr(206)=>333,chr(207)=>333,chr(208)=>722,chr(209)=>722,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>564,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722, + chr(220)=>722,chr(221)=>722,chr(222)=>556,chr(223)=>500,chr(224)=>444,chr(225)=>444,chr(226)=>444,chr(227)=>444,chr(228)=>444,chr(229)=>444,chr(230)=>667,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>500, + chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>564,chr(248)=>500,chr(249)=>500,chr(250)=>500,chr(251)=>500,chr(252)=>500,chr(253)=>500,chr(254)=>500,chr(255)=>500); +?> diff --git a/include/xslfo2pdf/fpdf/font/timesb.php b/include/xslfo2pdf/fpdf/font/timesb.php new file mode 100644 index 000000000..09cff86ac --- /dev/null +++ b/include/xslfo2pdf/fpdf/font/timesb.php @@ -0,0 +1,15 @@ +250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250, + chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>555,'#'=>500,'$'=>500,'%'=>1000,'&'=>833,'\''=>278,'('=>333,')'=>333,'*'=>500,'+'=>570, + ','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>333,';'=>333,'<'=>570,'='=>570,'>'=>570,'?'=>500,'@'=>930,'A'=>722, + 'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>778,'I'=>389,'J'=>500,'K'=>778,'L'=>667,'M'=>944,'N'=>722,'O'=>778,'P'=>611,'Q'=>778,'R'=>722,'S'=>556,'T'=>667,'U'=>722,'V'=>722,'W'=>1000, + 'X'=>722,'Y'=>722,'Z'=>667,'['=>333,'\\'=>278,']'=>333,'^'=>581,'_'=>500,'`'=>333,'a'=>500,'b'=>556,'c'=>444,'d'=>556,'e'=>444,'f'=>333,'g'=>500,'h'=>556,'i'=>278,'j'=>333,'k'=>556,'l'=>278,'m'=>833, + 'n'=>556,'o'=>500,'p'=>556,'q'=>556,'r'=>444,'s'=>389,'t'=>333,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>444,'{'=>394,'|'=>220,'}'=>394,'~'=>520,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500, + chr(132)=>500,chr(133)=>1000,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>556,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>667,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>500,chr(151)=>1000,chr(152)=>333,chr(153)=>1000, + chr(154)=>389,chr(155)=>333,chr(156)=>722,chr(157)=>350,chr(158)=>444,chr(159)=>722,chr(160)=>250,chr(161)=>333,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>220,chr(167)=>500,chr(168)=>333,chr(169)=>747,chr(170)=>300,chr(171)=>500,chr(172)=>570,chr(173)=>333,chr(174)=>747,chr(175)=>333, + chr(176)=>400,chr(177)=>570,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>556,chr(182)=>540,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>330,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>500,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722, + chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>389,chr(205)=>389,chr(206)=>389,chr(207)=>389,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>570,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722, + chr(220)=>722,chr(221)=>722,chr(222)=>611,chr(223)=>556,chr(224)=>500,chr(225)=>500,chr(226)=>500,chr(227)=>500,chr(228)=>500,chr(229)=>500,chr(230)=>722,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>556, + chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>570,chr(248)=>500,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500); +?> diff --git a/include/xslfo2pdf/fpdf/font/timesbi.php b/include/xslfo2pdf/fpdf/font/timesbi.php new file mode 100644 index 000000000..b4e38d763 --- /dev/null +++ b/include/xslfo2pdf/fpdf/font/timesbi.php @@ -0,0 +1,15 @@ +250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250, + chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>389,'"'=>555,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>278,'('=>333,')'=>333,'*'=>500,'+'=>570, + ','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>333,';'=>333,'<'=>570,'='=>570,'>'=>570,'?'=>500,'@'=>832,'A'=>667, + 'B'=>667,'C'=>667,'D'=>722,'E'=>667,'F'=>667,'G'=>722,'H'=>778,'I'=>389,'J'=>500,'K'=>667,'L'=>611,'M'=>889,'N'=>722,'O'=>722,'P'=>611,'Q'=>722,'R'=>667,'S'=>556,'T'=>611,'U'=>722,'V'=>667,'W'=>889, + 'X'=>667,'Y'=>611,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>570,'_'=>500,'`'=>333,'a'=>500,'b'=>500,'c'=>444,'d'=>500,'e'=>444,'f'=>333,'g'=>500,'h'=>556,'i'=>278,'j'=>278,'k'=>500,'l'=>278,'m'=>778, + 'n'=>556,'o'=>500,'p'=>500,'q'=>500,'r'=>389,'s'=>389,'t'=>278,'u'=>556,'v'=>444,'w'=>667,'x'=>500,'y'=>444,'z'=>389,'{'=>348,'|'=>220,'}'=>348,'~'=>570,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500, + chr(132)=>500,chr(133)=>1000,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>556,chr(139)=>333,chr(140)=>944,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>500,chr(151)=>1000,chr(152)=>333,chr(153)=>1000, + chr(154)=>389,chr(155)=>333,chr(156)=>722,chr(157)=>350,chr(158)=>389,chr(159)=>611,chr(160)=>250,chr(161)=>389,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>220,chr(167)=>500,chr(168)=>333,chr(169)=>747,chr(170)=>266,chr(171)=>500,chr(172)=>606,chr(173)=>333,chr(174)=>747,chr(175)=>333, + chr(176)=>400,chr(177)=>570,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>576,chr(182)=>500,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>300,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>500,chr(192)=>667,chr(193)=>667,chr(194)=>667,chr(195)=>667,chr(196)=>667,chr(197)=>667, + chr(198)=>944,chr(199)=>667,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>389,chr(205)=>389,chr(206)=>389,chr(207)=>389,chr(208)=>722,chr(209)=>722,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>570,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722, + chr(220)=>722,chr(221)=>611,chr(222)=>611,chr(223)=>500,chr(224)=>500,chr(225)=>500,chr(226)=>500,chr(227)=>500,chr(228)=>500,chr(229)=>500,chr(230)=>722,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>556, + chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>570,chr(248)=>500,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>444,chr(254)=>500,chr(255)=>444); +?> diff --git a/include/xslfo2pdf/fpdf/font/timesi.php b/include/xslfo2pdf/fpdf/font/timesi.php new file mode 100644 index 000000000..0ba2b7773 --- /dev/null +++ b/include/xslfo2pdf/fpdf/font/timesi.php @@ -0,0 +1,15 @@ +250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250, + chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>420,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>214,'('=>333,')'=>333,'*'=>500,'+'=>675, + ','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>333,';'=>333,'<'=>675,'='=>675,'>'=>675,'?'=>500,'@'=>920,'A'=>611, + 'B'=>611,'C'=>667,'D'=>722,'E'=>611,'F'=>611,'G'=>722,'H'=>722,'I'=>333,'J'=>444,'K'=>667,'L'=>556,'M'=>833,'N'=>667,'O'=>722,'P'=>611,'Q'=>722,'R'=>611,'S'=>500,'T'=>556,'U'=>722,'V'=>611,'W'=>833, + 'X'=>611,'Y'=>556,'Z'=>556,'['=>389,'\\'=>278,']'=>389,'^'=>422,'_'=>500,'`'=>333,'a'=>500,'b'=>500,'c'=>444,'d'=>500,'e'=>444,'f'=>278,'g'=>500,'h'=>500,'i'=>278,'j'=>278,'k'=>444,'l'=>278,'m'=>722, + 'n'=>500,'o'=>500,'p'=>500,'q'=>500,'r'=>389,'s'=>389,'t'=>278,'u'=>500,'v'=>444,'w'=>667,'x'=>444,'y'=>444,'z'=>389,'{'=>400,'|'=>275,'}'=>400,'~'=>541,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500, + chr(132)=>556,chr(133)=>889,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>500,chr(139)=>333,chr(140)=>944,chr(141)=>350,chr(142)=>556,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>556,chr(148)=>556,chr(149)=>350,chr(150)=>500,chr(151)=>889,chr(152)=>333,chr(153)=>980, + chr(154)=>389,chr(155)=>333,chr(156)=>667,chr(157)=>350,chr(158)=>389,chr(159)=>556,chr(160)=>250,chr(161)=>389,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>275,chr(167)=>500,chr(168)=>333,chr(169)=>760,chr(170)=>276,chr(171)=>500,chr(172)=>675,chr(173)=>333,chr(174)=>760,chr(175)=>333, + chr(176)=>400,chr(177)=>675,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>500,chr(182)=>523,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>310,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>500,chr(192)=>611,chr(193)=>611,chr(194)=>611,chr(195)=>611,chr(196)=>611,chr(197)=>611, + chr(198)=>889,chr(199)=>667,chr(200)=>611,chr(201)=>611,chr(202)=>611,chr(203)=>611,chr(204)=>333,chr(205)=>333,chr(206)=>333,chr(207)=>333,chr(208)=>722,chr(209)=>667,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>675,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722, + chr(220)=>722,chr(221)=>556,chr(222)=>611,chr(223)=>500,chr(224)=>500,chr(225)=>500,chr(226)=>500,chr(227)=>500,chr(228)=>500,chr(229)=>500,chr(230)=>667,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>500, + chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>675,chr(248)=>500,chr(249)=>500,chr(250)=>500,chr(251)=>500,chr(252)=>500,chr(253)=>444,chr(254)=>500,chr(255)=>444); +?> diff --git a/include/xslfo2pdf/fpdf/font/zapfdingbats.php b/include/xslfo2pdf/fpdf/font/zapfdingbats.php new file mode 100644 index 000000000..1f926a8c3 --- /dev/null +++ b/include/xslfo2pdf/fpdf/font/zapfdingbats.php @@ -0,0 +1,15 @@ +0,chr(1)=>0,chr(2)=>0,chr(3)=>0,chr(4)=>0,chr(5)=>0,chr(6)=>0,chr(7)=>0,chr(8)=>0,chr(9)=>0,chr(10)=>0,chr(11)=>0,chr(12)=>0,chr(13)=>0,chr(14)=>0,chr(15)=>0,chr(16)=>0,chr(17)=>0,chr(18)=>0,chr(19)=>0,chr(20)=>0,chr(21)=>0, + chr(22)=>0,chr(23)=>0,chr(24)=>0,chr(25)=>0,chr(26)=>0,chr(27)=>0,chr(28)=>0,chr(29)=>0,chr(30)=>0,chr(31)=>0,' '=>278,'!'=>974,'"'=>961,'#'=>974,'$'=>980,'%'=>719,'&'=>789,'\''=>790,'('=>791,')'=>690,'*'=>960,'+'=>939, + ','=>549,'-'=>855,'.'=>911,'/'=>933,'0'=>911,'1'=>945,'2'=>974,'3'=>755,'4'=>846,'5'=>762,'6'=>761,'7'=>571,'8'=>677,'9'=>763,':'=>760,';'=>759,'<'=>754,'='=>494,'>'=>552,'?'=>537,'@'=>577,'A'=>692, + 'B'=>786,'C'=>788,'D'=>788,'E'=>790,'F'=>793,'G'=>794,'H'=>816,'I'=>823,'J'=>789,'K'=>841,'L'=>823,'M'=>833,'N'=>816,'O'=>831,'P'=>923,'Q'=>744,'R'=>723,'S'=>749,'T'=>790,'U'=>792,'V'=>695,'W'=>776, + 'X'=>768,'Y'=>792,'Z'=>759,'['=>707,'\\'=>708,']'=>682,'^'=>701,'_'=>826,'`'=>815,'a'=>789,'b'=>789,'c'=>707,'d'=>687,'e'=>696,'f'=>689,'g'=>786,'h'=>787,'i'=>713,'j'=>791,'k'=>785,'l'=>791,'m'=>873, + 'n'=>761,'o'=>762,'p'=>762,'q'=>759,'r'=>759,'s'=>892,'t'=>892,'u'=>788,'v'=>784,'w'=>438,'x'=>138,'y'=>277,'z'=>415,'{'=>392,'|'=>392,'}'=>668,'~'=>668,chr(127)=>0,chr(128)=>390,chr(129)=>390,chr(130)=>317,chr(131)=>317, + chr(132)=>276,chr(133)=>276,chr(134)=>509,chr(135)=>509,chr(136)=>410,chr(137)=>410,chr(138)=>234,chr(139)=>234,chr(140)=>334,chr(141)=>334,chr(142)=>0,chr(143)=>0,chr(144)=>0,chr(145)=>0,chr(146)=>0,chr(147)=>0,chr(148)=>0,chr(149)=>0,chr(150)=>0,chr(151)=>0,chr(152)=>0,chr(153)=>0, + chr(154)=>0,chr(155)=>0,chr(156)=>0,chr(157)=>0,chr(158)=>0,chr(159)=>0,chr(160)=>0,chr(161)=>732,chr(162)=>544,chr(163)=>544,chr(164)=>910,chr(165)=>667,chr(166)=>760,chr(167)=>760,chr(168)=>776,chr(169)=>595,chr(170)=>694,chr(171)=>626,chr(172)=>788,chr(173)=>788,chr(174)=>788,chr(175)=>788, + chr(176)=>788,chr(177)=>788,chr(178)=>788,chr(179)=>788,chr(180)=>788,chr(181)=>788,chr(182)=>788,chr(183)=>788,chr(184)=>788,chr(185)=>788,chr(186)=>788,chr(187)=>788,chr(188)=>788,chr(189)=>788,chr(190)=>788,chr(191)=>788,chr(192)=>788,chr(193)=>788,chr(194)=>788,chr(195)=>788,chr(196)=>788,chr(197)=>788, + chr(198)=>788,chr(199)=>788,chr(200)=>788,chr(201)=>788,chr(202)=>788,chr(203)=>788,chr(204)=>788,chr(205)=>788,chr(206)=>788,chr(207)=>788,chr(208)=>788,chr(209)=>788,chr(210)=>788,chr(211)=>788,chr(212)=>894,chr(213)=>838,chr(214)=>1016,chr(215)=>458,chr(216)=>748,chr(217)=>924,chr(218)=>748,chr(219)=>918, + chr(220)=>927,chr(221)=>928,chr(222)=>928,chr(223)=>834,chr(224)=>873,chr(225)=>828,chr(226)=>924,chr(227)=>924,chr(228)=>917,chr(229)=>930,chr(230)=>931,chr(231)=>463,chr(232)=>883,chr(233)=>836,chr(234)=>836,chr(235)=>867,chr(236)=>867,chr(237)=>696,chr(238)=>696,chr(239)=>874,chr(240)=>0,chr(241)=>874, + chr(242)=>760,chr(243)=>946,chr(244)=>771,chr(245)=>865,chr(246)=>771,chr(247)=>888,chr(248)=>967,chr(249)=>888,chr(250)=>831,chr(251)=>873,chr(252)=>927,chr(253)=>970,chr(254)=>918,chr(255)=>0); +?> diff --git a/include/xslfo2pdf/fpdf/fpdf.php b/include/xslfo2pdf/fpdf/fpdf.php new file mode 100644 index 000000000..8cde18922 --- /dev/null +++ b/include/xslfo2pdf/fpdf/fpdf.php @@ -0,0 +1,1649 @@ +_dochecks(); + //Initialization of properties + $this->page=0; + $this->n=2; + $this->buffer=''; + $this->pages=array(); + $this->OrientationChanges=array(); + $this->state=0; + $this->fonts=array(); + $this->FontFiles=array(); + $this->diffs=array(); + $this->images=array(); + $this->links=array(); + $this->InFooter=false; + $this->lasth=0; + $this->FontFamily=''; + $this->FontStyle=''; + $this->FontSizePt=12; + $this->underline=false; + $this->DrawColor='0 G'; + $this->FillColor='0 g'; + $this->TextColor='0 g'; + $this->ColorFlag=false; + $this->ws=0; + //Standard fonts + $this->CoreFonts=array('courier'=>'Courier','courierB'=>'Courier-Bold','courierI'=>'Courier-Oblique','courierBI'=>'Courier-BoldOblique', + 'helvetica'=>'Helvetica','helveticaB'=>'Helvetica-Bold','helveticaI'=>'Helvetica-Oblique','helveticaBI'=>'Helvetica-BoldOblique', + 'times'=>'Times-Roman','timesB'=>'Times-Bold','timesI'=>'Times-Italic','timesBI'=>'Times-BoldItalic', + 'symbol'=>'Symbol','zapfdingbats'=>'ZapfDingbats'); + //Scale factor + if($unit=='pt') + $this->k=1; + elseif($unit=='mm') + $this->k=72/25.4; + elseif($unit=='cm') + $this->k=72/2.54; + elseif($unit=='in') + $this->k=72; + else + $this->Error('Incorrect unit: '.$unit); + //Page format + if(is_string($format)) + { + $format=strtolower($format); + if($format=='a3') + $format=array(841.89,1190.55); + elseif($format=='a4') + $format=array(595.28,841.89); + elseif($format=='a5') + $format=array(420.94,595.28); + elseif($format=='letter') + $format=array(612,792); + elseif($format=='legal') + $format=array(612,1008); + else + $this->Error('Unknown page format: '.$format); + $this->fwPt=$format[0]; + $this->fhPt=$format[1]; + } + else + { + $this->fwPt=$format[0]*$this->k; + $this->fhPt=$format[1]*$this->k; + } + $this->fw=$this->fwPt/$this->k; + $this->fh=$this->fhPt/$this->k; + //Page orientation + $orientation=strtolower($orientation); + if($orientation=='p' || $orientation=='portrait') + { + $this->DefOrientation='P'; + $this->wPt=$this->fwPt; + $this->hPt=$this->fhPt; + } + elseif($orientation=='l' || $orientation=='landscape') + { + $this->DefOrientation='L'; + $this->wPt=$this->fhPt; + $this->hPt=$this->fwPt; + } + else + $this->Error('Incorrect orientation: '.$orientation); + $this->CurOrientation=$this->DefOrientation; + $this->w=$this->wPt/$this->k; + $this->h=$this->hPt/$this->k; + //Page margins (1 cm) + $margin=28.35/$this->k; + $this->SetMargins($margin,$margin); + //Interior cell margin (1 mm) + $this->cMargin=$margin/10; + //Line width (0.2 mm) + $this->LineWidth=.567/$this->k; + //Automatic page break + $this->SetAutoPageBreak(true,2*$margin); + //Full width display mode + $this->SetDisplayMode('fullwidth'); + //Enable compression + $this->SetCompression(true); + //Set default PDF version number + $this->PDFVersion='1.3'; + } + + function SetMargins($left,$top,$right=-1) + { + //Set left, top and right margins + $this->lMargin=$left; + $this->tMargin=$top; + if($right==-1) + $right=$left; + $this->rMargin=$right; + } + + function SetLeftMargin($margin) + { + //Set left margin + $this->lMargin=$margin; + if($this->page>0 && $this->x<$margin) + $this->x=$margin; + } + + function SetTopMargin($margin) + { + //Set top margin + $this->tMargin=$margin; + } + + function SetRightMargin($margin) + { + //Set right margin + $this->rMargin=$margin; + } + + function SetAutoPageBreak($auto,$margin=0) + { + //Set auto page break mode and triggering margin + $this->AutoPageBreak=$auto; + $this->bMargin=$margin; + $this->PageBreakTrigger=$this->h-$margin; + } + + function SetDisplayMode($zoom,$layout='continuous') + { + //Set display mode in viewer + if($zoom=='fullpage' || $zoom=='fullwidth' || $zoom=='real' || $zoom=='default' || !is_string($zoom)) + $this->ZoomMode=$zoom; + else + $this->Error('Incorrect zoom display mode: '.$zoom); + if($layout=='single' || $layout=='continuous' || $layout=='two' || $layout=='default') + $this->LayoutMode=$layout; + else + $this->Error('Incorrect layout display mode: '.$layout); + } + + function SetCompression($compress) + { + //Set page compression + if(function_exists('gzcompress')) + $this->compress=$compress; + else + $this->compress=false; + } + + function SetTitle($title) + { + //Title of document + $this->title=$title; + } + + function SetSubject($subject) + { + //Subject of document + $this->subject=$subject; + } + + function SetAuthor($author) + { + //Author of document + $this->author=$author; + } + + function SetKeywords($keywords) + { + //Keywords of document + $this->keywords=$keywords; + } + + function SetCreator($creator) + { + //Creator of document + $this->creator=$creator; + } + + function AliasNbPages($alias='{nb}') + { + //Define an alias for total number of pages + $this->AliasNbPages=$alias; + } + + function Error($msg) + { + //Fatal error + die('FPDF error: '.$msg); + } + + function Open() + { + //Begin document + $this->state=1; + } + + function Close() + { + //Terminate document + if($this->state==3) + return; + if($this->page==0) + $this->AddPage(); + //Page footer + $this->InFooter=true; + $this->Footer(); + $this->InFooter=false; + //Close page + $this->_endpage(); + //Close document + $this->_enddoc(); + } + + function AddPage($orientation='') + { + //Start a new page + if($this->state==0) + $this->Open(); + $family=$this->FontFamily; + $style=$this->FontStyle.($this->underline ? 'U' : ''); + $size=$this->FontSizePt; + $lw=$this->LineWidth; + $dc=$this->DrawColor; + $fc=$this->FillColor; + $tc=$this->TextColor; + $cf=$this->ColorFlag; + if($this->page>0) + { + //Page footer + $this->InFooter=true; + $this->Footer(); + $this->InFooter=false; + //Close page + $this->_endpage(); + } + //Start new page + $this->_beginpage($orientation); + //Set line cap style to square + $this->_out('2 J'); + //Set line width + $this->LineWidth=$lw; + $this->_out(sprintf('%.2f w',$lw*$this->k)); + //Set font + if($family) + $this->SetFont($family,$style,$size); + //Set colors + $this->DrawColor=$dc; + if($dc!='0 G') + $this->_out($dc); + $this->FillColor=$fc; + if($fc!='0 g') + $this->_out($fc); + $this->TextColor=$tc; + $this->ColorFlag=$cf; + //Page header + $this->Header(); + //Restore line width + if($this->LineWidth!=$lw) + { + $this->LineWidth=$lw; + $this->_out(sprintf('%.2f w',$lw*$this->k)); + } + //Restore font + if($family) + $this->SetFont($family,$style,$size); + //Restore colors + if($this->DrawColor!=$dc) + { + $this->DrawColor=$dc; + $this->_out($dc); + } + if($this->FillColor!=$fc) + { + $this->FillColor=$fc; + $this->_out($fc); + } + $this->TextColor=$tc; + $this->ColorFlag=$cf; + } + + function Header() + { + //To be implemented in your own inherited class + } + + function Footer() + { + //To be implemented in your own inherited class + } + + function PageNo() + { + //Get current page number + return $this->page; + } + + function SetDrawColor($r,$g=-1,$b=-1) + { + //Set color for all stroking operations + if(($r==0 && $g==0 && $b==0) || $g==-1) + $this->DrawColor=sprintf('%.3f G',$r/255); + else + $this->DrawColor=sprintf('%.3f %.3f %.3f RG',$r/255,$g/255,$b/255); + if($this->page>0) + $this->_out($this->DrawColor); + } + + function SetFillColor($r,$g=-1,$b=-1) + { + //Set color for all filling operations + if(($r==0 && $g==0 && $b==0) || $g==-1) + $this->FillColor=sprintf('%.3f g',$r/255); + else + $this->FillColor=sprintf('%.3f %.3f %.3f rg',$r/255,$g/255,$b/255); + $this->ColorFlag=($this->FillColor!=$this->TextColor); + if($this->page>0) + $this->_out($this->FillColor); + } + + function SetTextColor($r,$g=-1,$b=-1) + { + //Set color for text + if(($r==0 && $g==0 && $b==0) || $g==-1) + $this->TextColor=sprintf('%.3f g',$r/255); + else + $this->TextColor=sprintf('%.3f %.3f %.3f rg',$r/255,$g/255,$b/255); + $this->ColorFlag=($this->FillColor!=$this->TextColor); + } + + function GetStringWidth($s) + { + //Get width of a string in the current font + $s=(string)$s; + $cw=&$this->CurrentFont['cw']; + $w=0; + $l=strlen($s); + for($i=0;$i<$l;$i++) + $w+=$cw[$s{$i}]; + return $w*$this->FontSize/1000; + } + + function SetLineWidth($width) + { + //Set line width + $this->LineWidth=$width; + if($this->page>0) + $this->_out(sprintf('%.2f w',$width*$this->k)); + } + + function Line($x1,$y1,$x2,$y2) + { + //Draw a line + $this->_out(sprintf('%.2f %.2f m %.2f %.2f l S',$x1*$this->k,($this->h-$y1)*$this->k,$x2*$this->k,($this->h-$y2)*$this->k)); + } + + function Rect($x,$y,$w,$h,$style='') + { + //Draw a rectangle + if($style=='F') + $op='f'; + elseif($style=='FD' || $style=='DF') + $op='B'; + else + $op='S'; + $this->_out(sprintf('%.2f %.2f %.2f %.2f re %s',$x*$this->k,($this->h-$y)*$this->k,$w*$this->k,-$h*$this->k,$op)); + } + + function AddFont($family,$style='',$file='') + { + //Add a TrueType or Type1 font + $family=strtolower($family); + if($file=='') + $file=str_replace(' ','',$family).strtolower($style).'.php'; + if($family=='arial') + $family='helvetica'; + $style=strtoupper($style); + if($style=='IB') + $style='BI'; + $fontkey=$family.$style; + if(isset($this->fonts[$fontkey])) + $this->Error('Font already added: '.$family.' '.$style); + include($this->_getfontpath().$file); + if(!isset($name)) + $this->Error('Could not include font definition file'); + $i=count($this->fonts)+1; + $this->fonts[$fontkey]=array('i'=>$i,'type'=>$type,'name'=>$name,'desc'=>$desc,'up'=>$up,'ut'=>$ut,'cw'=>$cw,'enc'=>$enc,'file'=>$file); + if($diff) + { + //Search existing encodings + $d=0; + $nb=count($this->diffs); + for($i=1;$i<=$nb;$i++) + { + if($this->diffs[$i]==$diff) + { + $d=$i; + break; + } + } + if($d==0) + { + $d=$nb+1; + $this->diffs[$d]=$diff; + } + $this->fonts[$fontkey]['diff']=$d; + } + if($file) + { + if($type=='TrueType') + $this->FontFiles[$file]=array('length1'=>$originalsize); + else + $this->FontFiles[$file]=array('length1'=>$size1,'length2'=>$size2); + } + } + + function SetFont($family,$style='',$size=0) + { + //Select a font; size given in points + global $fpdf_charwidths; + + $family=strtolower($family); + if($family=='') + $family=$this->FontFamily; + if($family=='arial') + $family='helvetica'; + elseif($family=='symbol' || $family=='zapfdingbats') + $style=''; + $style=strtoupper($style); + if(strpos($style,'U')!==false) + { + $this->underline=true; + $style=str_replace('U','',$style); + } + else + $this->underline=false; + if($style=='IB') + $style='BI'; + if($size==0) + $size=$this->FontSizePt; + //Test if font is already selected + if($this->FontFamily==$family && $this->FontStyle==$style && $this->FontSizePt==$size) + return; + //Test if used for the first time + $fontkey=$family.$style; + if(!isset($this->fonts[$fontkey])) + { + //Check if one of the standard fonts + if(isset($this->CoreFonts[$fontkey])) + { + if(!isset($fpdf_charwidths[$fontkey])) + { + //Load metric file + $file=$family; + if($family=='times' || $family=='helvetica') + $file.=strtolower($style); + include($this->_getfontpath().$file.'.php'); + if(!isset($fpdf_charwidths[$fontkey])) + $this->Error('Could not include font metric file'); + } + $i=count($this->fonts)+1; + $this->fonts[$fontkey]=array('i'=>$i,'type'=>'core','name'=>$this->CoreFonts[$fontkey],'up'=>-100,'ut'=>50,'cw'=>$fpdf_charwidths[$fontkey]); + } + else + $this->Error('Undefined font: '.$family.' '.$style); + } + //Select it + $this->FontFamily=$family; + $this->FontStyle=$style; + $this->FontSizePt=$size; + $this->FontSize=$size/$this->k; + $this->CurrentFont=&$this->fonts[$fontkey]; + if($this->page>0) + $this->_out(sprintf('BT /F%d %.2f Tf ET',$this->CurrentFont['i'],$this->FontSizePt)); + } + + function SetFontSize($size) + { + //Set font size in points + if($this->FontSizePt==$size) + return; + $this->FontSizePt=$size; + $this->FontSize=$size/$this->k; + if($this->page>0) + $this->_out(sprintf('BT /F%d %.2f Tf ET',$this->CurrentFont['i'],$this->FontSizePt)); + } + + function AddLink() + { + //Create a new internal link + $n=count($this->links)+1; + $this->links[$n]=array(0,0); + return $n; + } + + function SetLink($link,$y=0,$page=-1) + { + //Set destination of internal link + if($y==-1) + $y=$this->y; + if($page==-1) + $page=$this->page; + $this->links[$link]=array($page,$y); + } + + function Link($x,$y,$w,$h,$link) + { + //Put a link on the page + $this->PageLinks[$this->page][]=array($x*$this->k,$this->hPt-$y*$this->k,$w*$this->k,$h*$this->k,$link); + } + + function Text($x,$y,$txt) + { + //Output a string + $s=sprintf('BT %.2f %.2f Td (%s) Tj ET',$x*$this->k,($this->h-$y)*$this->k,$this->_escape($txt)); + if($this->underline && $txt!='') + $s.=' '.$this->_dounderline($x,$y,$txt); + if($this->ColorFlag) + $s='q '.$this->TextColor.' '.$s.' Q'; + $this->_out($s); + } + + function AcceptPageBreak() + { + //Accept automatic page break or not + return $this->AutoPageBreak; + } + + function Cell($w,$h=0,$txt='',$border=0,$ln=0,$align='',$fill=0,$link='') + { + //Output a cell + $k=$this->k; + if($this->y+$h>$this->PageBreakTrigger && !$this->InFooter && $this->AcceptPageBreak()) + { + //Automatic page break + $x=$this->x; + $ws=$this->ws; + if($ws>0) + { + $this->ws=0; + $this->_out('0 Tw'); + } + $this->AddPage($this->CurOrientation); + $this->x=$x; + if($ws>0) + { + $this->ws=$ws; + $this->_out(sprintf('%.3f Tw',$ws*$k)); + } + } + if($w==0) + $w=$this->w-$this->rMargin-$this->x; + $s=''; + if($fill==1 || $border==1) + { + if($fill==1) + $op=($border==1) ? 'B' : 'f'; + else + $op='S'; + $s=sprintf('%.2f %.2f %.2f %.2f re %s ',$this->x*$k,($this->h-$this->y)*$k,$w*$k,-$h*$k,$op); + } + if(is_string($border)) + { + $x=$this->x; + $y=$this->y; + if(strpos($border,'L')!==false) + $s.=sprintf('%.2f %.2f m %.2f %.2f l S ',$x*$k,($this->h-$y)*$k,$x*$k,($this->h-($y+$h))*$k); + if(strpos($border,'T')!==false) + $s.=sprintf('%.2f %.2f m %.2f %.2f l S ',$x*$k,($this->h-$y)*$k,($x+$w)*$k,($this->h-$y)*$k); + if(strpos($border,'R')!==false) + $s.=sprintf('%.2f %.2f m %.2f %.2f l S ',($x+$w)*$k,($this->h-$y)*$k,($x+$w)*$k,($this->h-($y+$h))*$k); + if(strpos($border,'B')!==false) + $s.=sprintf('%.2f %.2f m %.2f %.2f l S ',$x*$k,($this->h-($y+$h))*$k,($x+$w)*$k,($this->h-($y+$h))*$k); + } + if($txt!=='') + { + if($align=='R') + $dx=$w-$this->cMargin-$this->GetStringWidth($txt); + elseif($align=='C') + $dx=($w-$this->GetStringWidth($txt))/2; + else + $dx=$this->cMargin; + if($this->ColorFlag) + $s.='q '.$this->TextColor.' '; + $txt2=str_replace(')','\\)',str_replace('(','\\(',str_replace('\\','\\\\',$txt))); + $s.=sprintf('BT %.2f %.2f Td (%s) Tj ET',($this->x+$dx)*$k,($this->h-($this->y+.5*$h+.3*$this->FontSize))*$k,$txt2); + if($this->underline) + $s.=' '.$this->_dounderline($this->x+$dx,$this->y+.5*$h+.3*$this->FontSize,$txt); + if($this->ColorFlag) + $s.=' Q'; + if($link) + $this->Link($this->x+$dx,$this->y+.5*$h-.5*$this->FontSize,$this->GetStringWidth($txt),$this->FontSize,$link); + } + if($s) + $this->_out($s); + $this->lasth=$h; + if($ln>0) + { + //Go to next line + $this->y+=$h; + if($ln==1) + $this->x=$this->lMargin; + } + else + $this->x+=$w; + } + + function MultiCell($w,$h,$txt,$border=0,$align='J',$fill=0) + { + //Output text with automatic or explicit line breaks + $cw=&$this->CurrentFont['cw']; + if($w==0) + $w=$this->w-$this->rMargin-$this->x; + $wmax=($w-2*$this->cMargin)*1000/$this->FontSize; + $s=str_replace("\r",'',$txt); + $nb=strlen($s); + if($nb>0 && $s[$nb-1]=="\n") + $nb--; + $b=0; + if($border) + { + if($border==1) + { + $border='LTRB'; + $b='LRT'; + $b2='LR'; + } + else + { + $b2=''; + if(strpos($border,'L')!==false) + $b2.='L'; + if(strpos($border,'R')!==false) + $b2.='R'; + $b=(strpos($border,'T')!==false) ? $b2.'T' : $b2; + } + } + $sep=-1; + $i=0; + $j=0; + $l=0; + $ns=0; + $nl=1; + while($i<$nb) + { + //Get next character + $c=$s{$i}; + if($c=="\n") + { + //Explicit line break + if($this->ws>0) + { + $this->ws=0; + $this->_out('0 Tw'); + } + $this->Cell($w,$h,substr($s,$j,$i-$j),$b,2,$align,$fill); + $i++; + $sep=-1; + $j=$i; + $l=0; + $ns=0; + $nl++; + if($border && $nl==2) + $b=$b2; + continue; + } + if($c==' ') + { + $sep=$i; + $ls=$l; + $ns++; + } + $l+=$cw[$c]; + if($l>$wmax) + { + //Automatic line break + if($sep==-1) + { + if($i==$j) + $i++; + if($this->ws>0) + { + $this->ws=0; + $this->_out('0 Tw'); + } + $this->Cell($w,$h,substr($s,$j,$i-$j),$b,2,$align,$fill); + } + else + { + if($align=='J') + { + $this->ws=($ns>1) ? ($wmax-$ls)/1000*$this->FontSize/($ns-1) : 0; + $this->_out(sprintf('%.3f Tw',$this->ws*$this->k)); + } + $this->Cell($w,$h,substr($s,$j,$sep-$j),$b,2,$align,$fill); + $i=$sep+1; + } + $sep=-1; + $j=$i; + $l=0; + $ns=0; + $nl++; + if($border && $nl==2) + $b=$b2; + } + else + $i++; + } + //Last chunk + if($this->ws>0) + { + $this->ws=0; + $this->_out('0 Tw'); + } + if($border && strpos($border,'B')!==false) + $b.='B'; + $this->Cell($w,$h,substr($s,$j,$i-$j),$b,2,$align,$fill); + $this->x=$this->lMargin; + } + + function Write($h,$txt,$link='') + { + //Output text in flowing mode + $cw=&$this->CurrentFont['cw']; + $w=$this->w-$this->rMargin-$this->x; + $wmax=($w-2*$this->cMargin)*1000/$this->FontSize; + $s=str_replace("\r",'',$txt); + $nb=strlen($s); + $sep=-1; + $i=0; + $j=0; + $l=0; + $nl=1; + while($i<$nb) + { + //Get next character + $c=$s{$i}; + if($c=="\n") + { + //Explicit line break + $this->Cell($w,$h,substr($s,$j,$i-$j),0,2,'',0,$link); + $i++; + $sep=-1; + $j=$i; + $l=0; + if($nl==1) + { + $this->x=$this->lMargin; + $w=$this->w-$this->rMargin-$this->x; + $wmax=($w-2*$this->cMargin)*1000/$this->FontSize; + } + $nl++; + continue; + } + if($c==' ') + $sep=$i; + $l+=$cw[$c]; + if($l>$wmax) + { + //Automatic line break + if($sep==-1) + { + if($this->x>$this->lMargin) + { + //Move to next line + $this->x=$this->lMargin; + $this->y+=$h; + $w=$this->w-$this->rMargin-$this->x; + $wmax=($w-2*$this->cMargin)*1000/$this->FontSize; + $i++; + $nl++; + continue; + } + if($i==$j) + $i++; + $this->Cell($w,$h,substr($s,$j,$i-$j),0,2,'',0,$link); + } + else + { + $this->Cell($w,$h,substr($s,$j,$sep-$j),0,2,'',0,$link); + $i=$sep+1; + } + $sep=-1; + $j=$i; + $l=0; + if($nl==1) + { + $this->x=$this->lMargin; + $w=$this->w-$this->rMargin-$this->x; + $wmax=($w-2*$this->cMargin)*1000/$this->FontSize; + } + $nl++; + } + else + $i++; + } + //Last chunk + if($i!=$j) + $this->Cell($l/1000*$this->FontSize,$h,substr($s,$j),0,0,'',0,$link); + } + + function Image($file,$x,$y,$w=0,$h=0,$type='',$link='') + { + //Put an image on the page + if(!isset($this->images[$file])) + { + //First use of image, get info + if($type=='') + { + $pos=strrpos($file,'.'); + if(!$pos) + $this->Error('Image file has no extension and no type was specified: '.$file); + $type=substr($file,$pos+1); + } + $type=strtolower($type); + $mqr=get_magic_quotes_runtime(); + set_magic_quotes_runtime(0); + if($type=='jpg' || $type=='jpeg') + $info=$this->_parsejpg($file); + elseif($type=='png') + $info=$this->_parsepng($file); + else + { + //Allow for additional formats + $mtd='_parse'.$type; + if(!method_exists($this,$mtd)) + $this->Error('Unsupported image type: '.$type); + $info=$this->$mtd($file); + } + set_magic_quotes_runtime($mqr); + $info['i']=count($this->images)+1; + $this->images[$file]=$info; + } + else + $info=$this->images[$file]; + //Automatic width and height calculation if needed + if($w==0 && $h==0) + { + //Put image at 72 dpi + $w=$info['w']/$this->k; + $h=$info['h']/$this->k; + } + if($w==0) + $w=$h*$info['w']/$info['h']; + if($h==0) + $h=$w*$info['h']/$info['w']; + $this->_out(sprintf('q %.2f 0 0 %.2f %.2f %.2f cm /I%d Do Q',$w*$this->k,$h*$this->k,$x*$this->k,($this->h-($y+$h))*$this->k,$info['i'])); + if($link) + $this->Link($x,$y,$w,$h,$link); + } + + function Ln($h='') + { + //Line feed; default value is last cell height + $this->x=$this->lMargin; + if(is_string($h)) + $this->y+=$this->lasth; + else + $this->y+=$h; + } + + function GetX() + { + //Get x position + return $this->x; + } + + function SetX($x) + { + //Set x position + if($x>=0) + $this->x=$x; + else + $this->x=$this->w+$x; + } + + function GetY() + { + //Get y position + return $this->y; + } + + function SetY($y) + { + //Set y position and reset x + $this->x=$this->lMargin; + if($y>=0) + $this->y=$y; + else + $this->y=$this->h+$y; + } + + function SetXY($x,$y) + { + //Set x and y positions + $this->SetY($y); + $this->SetX($x); + } + + function Output($name='',$dest='') + { + //Output PDF to some destination + //Finish document if necessary + if($this->state<3) + $this->Close(); + //Normalize parameters + if(is_bool($dest)) + $dest=$dest ? 'D' : 'F'; + $dest=strtoupper($dest); + if($dest=='') + { + if($name=='') + { + $name='doc.pdf'; + $dest='I'; + } + else + $dest='F'; + } + switch($dest) + { + case 'I': + //Send to standard output + if(ob_get_contents()) + $this->Error('Some data has already been output, can\'t send PDF file'); + if(php_sapi_name()!='cli') + { + //We send to a browser + header('Content-Type: application/pdf'); + if(headers_sent()) + $this->Error('Some data has already been output to browser, can\'t send PDF file'); + header('Content-Length: '.strlen($this->buffer)); + header('Content-disposition: inline; filename="'.$name.'"'); + } + echo $this->buffer; + break; + case 'D': + //Download file + if(ob_get_contents()) + $this->Error('Some data has already been output, can\'t send PDF file'); + if(isset($_SERVER['HTTP_USER_AGENT']) && strpos($_SERVER['HTTP_USER_AGENT'],'MSIE')) + header('Content-Type: application/force-download'); + else + header('Content-Type: application/octet-stream'); + if(headers_sent()) + $this->Error('Some data has already been output to browser, can\'t send PDF file'); + header('Content-Length: '.strlen($this->buffer)); + header('Content-disposition: attachment; filename="'.$name.'"'); + echo $this->buffer; + break; + case 'F': + //Save to local file + $f=fopen($name,'wb'); + if(!$f) + $this->Error('Unable to create output file: '.$name); + fwrite($f,$this->buffer,strlen($this->buffer)); + fclose($f); + break; + case 'S': + //Return as a string + return $this->buffer; + default: + $this->Error('Incorrect output destination: '.$dest); + } + return ''; + } + + /******************************************************************************* + * * + * Protected methods * + * * + *******************************************************************************/ + function _dochecks() + { + //Check for locale-related bug + if(1.1==1) + $this->Error('Don\'t alter the locale before including class file'); + //Check for decimal separator + if(sprintf('%.1f',1.0)!='1.0') + setlocale(LC_NUMERIC,'C'); + } + + function _getfontpath() + { + if(!defined('FPDF_FONTPATH') && is_dir(dirname(__FILE__).'/font')) + define('FPDF_FONTPATH',dirname(__FILE__).'/font/'); + return defined('FPDF_FONTPATH') ? FPDF_FONTPATH : ''; + } + + function _putpages() + { + $nb=$this->page; + if(!empty($this->AliasNbPages)) + { + //Replace number of pages + for($n=1;$n<=$nb;$n++) + $this->pages[$n]=str_replace($this->AliasNbPages,$nb,$this->pages[$n]); + } + if($this->DefOrientation=='P') + { + $wPt=$this->fwPt; + $hPt=$this->fhPt; + } + else + { + $wPt=$this->fhPt; + $hPt=$this->fwPt; + } + $filter=($this->compress) ? '/Filter /FlateDecode ' : ''; + for($n=1;$n<=$nb;$n++) + { + //Page + $this->_newobj(); + $this->_out('<_out('/Parent 1 0 R'); + if(isset($this->OrientationChanges[$n])) + $this->_out(sprintf('/MediaBox [0 0 %.2f %.2f]',$hPt,$wPt)); + $this->_out('/Resources 2 0 R'); + if(isset($this->PageLinks[$n])) + { + //Links + $annots='/Annots ['; + foreach($this->PageLinks[$n] as $pl) + { + $rect=sprintf('%.2f %.2f %.2f %.2f',$pl[0],$pl[1],$pl[0]+$pl[2],$pl[1]-$pl[3]); + $annots.='<_textstring($pl[4]).'>>>>'; + else + { + $l=$this->links[$pl[4]]; + $h=isset($this->OrientationChanges[$l[0]]) ? $wPt : $hPt; + $annots.=sprintf('/Dest [%d 0 R /XYZ 0 %.2f null]>>',1+2*$l[0],$h-$l[1]*$this->k); + } + } + $this->_out($annots.']'); + } + $this->_out('/Contents '.($this->n+1).' 0 R>>'); + $this->_out('endobj'); + //Page content + $p=($this->compress) ? gzcompress($this->pages[$n]) : $this->pages[$n]; + $this->_newobj(); + $this->_out('<<'.$filter.'/Length '.strlen($p).'>>'); + $this->_putstream($p); + $this->_out('endobj'); + } + //Pages root + $this->offsets[1]=strlen($this->buffer); + $this->_out('1 0 obj'); + $this->_out('<_out($kids.']'); + $this->_out('/Count '.$nb); + $this->_out(sprintf('/MediaBox [0 0 %.2f %.2f]',$wPt,$hPt)); + $this->_out('>>'); + $this->_out('endobj'); + } + + function _putfonts() + { + $nf=$this->n; + foreach($this->diffs as $diff) + { + //Encodings + $this->_newobj(); + $this->_out('<>'); + $this->_out('endobj'); + } + $mqr=get_magic_quotes_runtime(); + set_magic_quotes_runtime(0); + foreach($this->FontFiles as $file=>$info) + { + //Font file embedding + $this->_newobj(); + $this->FontFiles[$file]['n']=$this->n; + $font=''; + $f=fopen($this->_getfontpath().$file,'rb',1); + if(!$f) + $this->Error('Font file not found'); + while(!feof($f)) + $font.=fread($f,8192); + fclose($f); + $compressed=(substr($file,-2)=='.z'); + if(!$compressed && isset($info['length2'])) + { + $header=(ord($font{0})==128); + if($header) + { + //Strip first binary header + $font=substr($font,6); + } + if($header && ord($font{$info['length1']})==128) + { + //Strip second binary header + $font=substr($font,0,$info['length1']).substr($font,$info['length1']+6); + } + } + $this->_out('<_out('/Filter /FlateDecode'); + $this->_out('/Length1 '.$info['length1']); + if(isset($info['length2'])) + $this->_out('/Length2 '.$info['length2'].' /Length3 0'); + $this->_out('>>'); + $this->_putstream($font); + $this->_out('endobj'); + } + set_magic_quotes_runtime($mqr); + foreach($this->fonts as $k=>$font) + { + //Font objects + $this->fonts[$k]['n']=$this->n+1; + $type=$font['type']; + $name=$font['name']; + if($type=='core') + { + //Standard font + $this->_newobj(); + $this->_out('<_out('/BaseFont /'.$name); + $this->_out('/Subtype /Type1'); + if($name!='Symbol' && $name!='ZapfDingbats') + $this->_out('/Encoding /WinAnsiEncoding'); + $this->_out('>>'); + $this->_out('endobj'); + } + elseif($type=='Type1' || $type=='TrueType') + { + //Additional Type1 or TrueType font + $this->_newobj(); + $this->_out('<_out('/BaseFont /'.$name); + $this->_out('/Subtype /'.$type); + $this->_out('/FirstChar 32 /LastChar 255'); + $this->_out('/Widths '.($this->n+1).' 0 R'); + $this->_out('/FontDescriptor '.($this->n+2).' 0 R'); + if($font['enc']) + { + if(isset($font['diff'])) + $this->_out('/Encoding '.($nf+$font['diff']).' 0 R'); + else + $this->_out('/Encoding /WinAnsiEncoding'); + } + $this->_out('>>'); + $this->_out('endobj'); + //Widths + $this->_newobj(); + $cw=&$font['cw']; + $s='['; + for($i=32;$i<=255;$i++) + $s.=$cw[chr($i)].' '; + $this->_out($s.']'); + $this->_out('endobj'); + //Descriptor + $this->_newobj(); + $s='<$v) + $s.=' /'.$k.' '.$v; + $file=$font['file']; + if($file) + $s.=' /FontFile'.($type=='Type1' ? '' : '2').' '.$this->FontFiles[$file]['n'].' 0 R'; + $this->_out($s.'>>'); + $this->_out('endobj'); + } + else + { + //Allow for additional types + $mtd='_put'.strtolower($type); + if(!method_exists($this,$mtd)) + $this->Error('Unsupported font type: '.$type); + $this->$mtd($font); + } + } + } + + function _putimages() + { + $filter=($this->compress) ? '/Filter /FlateDecode ' : ''; + reset($this->images); + while(list($file,$info)=each($this->images)) + { + $this->_newobj(); + $this->images[$file]['n']=$this->n; + $this->_out('<_out('/Subtype /Image'); + $this->_out('/Width '.$info['w']); + $this->_out('/Height '.$info['h']); + if($info['cs']=='Indexed') + $this->_out('/ColorSpace [/Indexed /DeviceRGB '.(strlen($info['pal'])/3-1).' '.($this->n+1).' 0 R]'); + else + { + $this->_out('/ColorSpace /'.$info['cs']); + if($info['cs']=='DeviceCMYK') + $this->_out('/Decode [1 0 1 0 1 0 1 0]'); + } + $this->_out('/BitsPerComponent '.$info['bpc']); + if(isset($info['f'])) + $this->_out('/Filter /'.$info['f']); + if(isset($info['parms'])) + $this->_out($info['parms']); + if(isset($info['trns']) && is_array($info['trns'])) + { + $trns=''; + for($i=0;$i_out('/Mask ['.$trns.']'); + } + $this->_out('/Length '.strlen($info['data']).'>>'); + $this->_putstream($info['data']); + unset($this->images[$file]['data']); + $this->_out('endobj'); + //Palette + if($info['cs']=='Indexed') + { + $this->_newobj(); + $pal=($this->compress) ? gzcompress($info['pal']) : $info['pal']; + $this->_out('<<'.$filter.'/Length '.strlen($pal).'>>'); + $this->_putstream($pal); + $this->_out('endobj'); + } + } + } + + function _putxobjectdict() + { + foreach($this->images as $image) + $this->_out('/I'.$image['i'].' '.$image['n'].' 0 R'); + } + + function _putresourcedict() + { + $this->_out('/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]'); + $this->_out('/Font <<'); + foreach($this->fonts as $font) + $this->_out('/F'.$font['i'].' '.$font['n'].' 0 R'); + $this->_out('>>'); + $this->_out('/XObject <<'); + $this->_putxobjectdict(); + $this->_out('>>'); + } + + function _putresources() + { + $this->_putfonts(); + $this->_putimages(); + //Resource dictionary + $this->offsets[2]=strlen($this->buffer); + $this->_out('2 0 obj'); + $this->_out('<<'); + $this->_putresourcedict(); + $this->_out('>>'); + $this->_out('endobj'); + } + + function _putinfo() + { + $this->_out('/Producer '.$this->_textstring('FPDF '.FPDF_VERSION)); + if(!empty($this->title)) + $this->_out('/Title '.$this->_textstring($this->title)); + if(!empty($this->subject)) + $this->_out('/Subject '.$this->_textstring($this->subject)); + if(!empty($this->author)) + $this->_out('/Author '.$this->_textstring($this->author)); + if(!empty($this->keywords)) + $this->_out('/Keywords '.$this->_textstring($this->keywords)); + if(!empty($this->creator)) + $this->_out('/Creator '.$this->_textstring($this->creator)); + $this->_out('/CreationDate '.$this->_textstring('D:'.date('YmdHis'))); + } + + function _putcatalog() + { + $this->_out('/Type /Catalog'); + $this->_out('/Pages 1 0 R'); + if($this->ZoomMode=='fullpage') + $this->_out('/OpenAction [3 0 R /Fit]'); + elseif($this->ZoomMode=='fullwidth') + $this->_out('/OpenAction [3 0 R /FitH null]'); + elseif($this->ZoomMode=='real') + $this->_out('/OpenAction [3 0 R /XYZ null null 1]'); + elseif(!is_string($this->ZoomMode)) + $this->_out('/OpenAction [3 0 R /XYZ null null '.($this->ZoomMode/100).']'); + if($this->LayoutMode=='single') + $this->_out('/PageLayout /SinglePage'); + elseif($this->LayoutMode=='continuous') + $this->_out('/PageLayout /OneColumn'); + elseif($this->LayoutMode=='two') + $this->_out('/PageLayout /TwoColumnLeft'); + } + + function _putheader() + { + $this->_out('%PDF-'.$this->PDFVersion); + } + + function _puttrailer() + { + $this->_out('/Size '.($this->n+1)); + $this->_out('/Root '.$this->n.' 0 R'); + $this->_out('/Info '.($this->n-1).' 0 R'); + } + + function _enddoc() + { + $this->_putheader(); + $this->_putpages(); + $this->_putresources(); + //Info + $this->_newobj(); + $this->_out('<<'); + $this->_putinfo(); + $this->_out('>>'); + $this->_out('endobj'); + //Catalog + $this->_newobj(); + $this->_out('<<'); + $this->_putcatalog(); + $this->_out('>>'); + $this->_out('endobj'); + //Cross-ref + $o=strlen($this->buffer); + $this->_out('xref'); + $this->_out('0 '.($this->n+1)); + $this->_out('0000000000 65535 f '); + for($i=1;$i<=$this->n;$i++) + $this->_out(sprintf('%010d 00000 n ',$this->offsets[$i])); + //Trailer + $this->_out('trailer'); + $this->_out('<<'); + $this->_puttrailer(); + $this->_out('>>'); + $this->_out('startxref'); + $this->_out($o); + $this->_out('%%EOF'); + $this->state=3; + } + + function _beginpage($orientation) + { + $this->page++; + $this->pages[$this->page]=''; + $this->state=2; + $this->x=$this->lMargin; + $this->y=$this->tMargin; + $this->FontFamily=''; + //Page orientation + if(!$orientation) + $orientation=$this->DefOrientation; + else + { + $orientation=strtoupper($orientation{0}); + if($orientation!=$this->DefOrientation) + $this->OrientationChanges[$this->page]=true; + } + if($orientation!=$this->CurOrientation) + { + //Change orientation + if($orientation=='P') + { + $this->wPt=$this->fwPt; + $this->hPt=$this->fhPt; + $this->w=$this->fw; + $this->h=$this->fh; + } + else + { + $this->wPt=$this->fhPt; + $this->hPt=$this->fwPt; + $this->w=$this->fh; + $this->h=$this->fw; + } + $this->PageBreakTrigger=$this->h-$this->bMargin; + $this->CurOrientation=$orientation; + } + } + + function _endpage() + { + //End of page contents + $this->state=1; + } + + function _newobj() + { + //Begin a new object + $this->n++; + $this->offsets[$this->n]=strlen($this->buffer); + $this->_out($this->n.' 0 obj'); + } + + function _dounderline($x,$y,$txt) + { + //Underline text + $up=$this->CurrentFont['up']; + $ut=$this->CurrentFont['ut']; + $w=$this->GetStringWidth($txt)+$this->ws*substr_count($txt,' '); + return sprintf('%.2f %.2f %.2f %.2f re f',$x*$this->k,($this->h-($y-$up/1000*$this->FontSize))*$this->k,$w*$this->k,-$ut/1000*$this->FontSizePt); + } + + function _parsejpg($file) + { + //Extract info from a JPEG file + $a=GetImageSize($file); + if(!$a) + $this->Error('Missing or incorrect image file: '.$file); + if($a[2]!=2) + $this->Error('Not a JPEG file: '.$file); + if(!isset($a['channels']) || $a['channels']==3) + $colspace='DeviceRGB'; + elseif($a['channels']==4) + $colspace='DeviceCMYK'; + else + $colspace='DeviceGray'; + $bpc=isset($a['bits']) ? $a['bits'] : 8; + //Read whole file + $f=fopen($file,'rb'); + $data=''; + while(!feof($f)) + $data.=fread($f,4096); + fclose($f); + return array('w'=>$a[0],'h'=>$a[1],'cs'=>$colspace,'bpc'=>$bpc,'f'=>'DCTDecode','data'=>$data); + } + + function _parsepng($file) + { + //Extract info from a PNG file + $f=fopen($file,'rb'); + if(!$f) + $this->Error('Can\'t open image file: '.$file); + //Check signature + if(fread($f,8)!=chr(137).'PNG'.chr(13).chr(10).chr(26).chr(10)) + $this->Error('Not a PNG file: '.$file); + //Read header chunk + fread($f,4); + if(fread($f,4)!='IHDR') + $this->Error('Incorrect PNG file: '.$file); + $w=$this->_freadint($f); + $h=$this->_freadint($f); + $bpc=ord(fread($f,1)); + if($bpc>8) + $this->Error('16-bit depth not supported: '.$file); + $ct=ord(fread($f,1)); + if($ct==0) + $colspace='DeviceGray'; + elseif($ct==2) + $colspace='DeviceRGB'; + elseif($ct==3) + $colspace='Indexed'; + else + $this->Error('Alpha channel not supported: '.$file); + if(ord(fread($f,1))!=0) + $this->Error('Unknown compression method: '.$file); + if(ord(fread($f,1))!=0) + $this->Error('Unknown filter method: '.$file); + if(ord(fread($f,1))!=0) + $this->Error('Interlacing not supported: '.$file); + fread($f,4); + $parms='/DecodeParms <>'; + //Scan chunks looking for palette, transparency and image data + $pal=''; + $trns=''; + $data=''; + do + { + $n=$this->_freadint($f); + $type=fread($f,4); + if($type=='PLTE') + { + //Read palette + $pal=fread($f,$n); + fread($f,4); + } + elseif($type=='tRNS') + { + //Read transparency info + $t=fread($f,$n); + if($ct==0) + $trns=array(ord(substr($t,1,1))); + elseif($ct==2) + $trns=array(ord(substr($t,1,1)),ord(substr($t,3,1)),ord(substr($t,5,1))); + else + { + $pos=strpos($t,chr(0)); + if($pos!==false) + $trns=array($pos); + } + fread($f,4); + } + elseif($type=='IDAT') + { + //Read image data block + $data.=fread($f,$n); + fread($f,4); + } + elseif($type=='IEND') + break; + else + fread($f,$n+4); + } + while($n); + if($colspace=='Indexed' && empty($pal)) + $this->Error('Missing palette in '.$file); + fclose($f); + return array('w'=>$w,'h'=>$h,'cs'=>$colspace,'bpc'=>$bpc,'f'=>'FlateDecode','parms'=>$parms,'pal'=>$pal,'trns'=>$trns,'data'=>$data); + } + + function _freadint($f) + { + //Read a 4-byte integer from file + $a=unpack('Ni',fread($f,4)); + return $a['i']; + } + + function _textstring($s) + { + //Format a text string + return '('.$this->_escape($s).')'; + } + + function _escape($s) + { + //Add \ before \, ( and ) + return str_replace(')','\\)',str_replace('(','\\(',str_replace('\\','\\\\',$s))); + } + + function _putstream($s) + { + $this->_out('stream'); + $this->_out($s); + $this->_out('endstream'); + } + + function _out($s) + { + //echo "out:$s
"; + //Add a line to the document + if($this->state==2) + $this->pages[$this->page].=$s."\n"; + else + $this->buffer.=$s."\n"; + } + + + //End of class + } + + //Handle special IE contype request + if(isset($_SERVER['HTTP_USER_AGENT']) && $_SERVER['HTTP_USER_AGENT']=='contype') + { + header('Content-Type: application/pdf'); + exit; + } + } +?> diff --git a/include/xslfo2pdf/fpdf/myfpdf.php b/include/xslfo2pdf/fpdf/myfpdf.php new file mode 100644 index 000000000..1744d4573 --- /dev/null +++ b/include/xslfo2pdf/fpdf/myfpdf.php @@ -0,0 +1,591 @@ + +FontFamily; + } + + function GetFontStyle() { + return $this->FontStyle; + } + + function GetFontSize() { + return $this->FontSize; + } + function GetFontSizePt() { + return $this->FontSizePt; + } + function GetDrawColor() { + return $this->DrawColor; + } + function GetFillColor() { + return $this->FillColor; + } + function GetTextColor() { + return $this->TextColor; + } + + function GetPageWidth() { + return $this->w-$this->rMargin-$this->lMargin; + } + + function GetLineWidth() { + return $this->LineWidth; + } + + function FontExists($family, $style='') { + $fontkey=$family.$style; + return isset($this->fonts[$fontkey]) || + isset($this->CoreFonts[$fontkey]); + } + + /** + * Methods to capture output + */ + function startCapture() { + if($this->state==2) { + $buf = $this->pages[$this->page]; + $this->pages[$this->page] = ""; + return $buf; + } + else { + $buf = $this->buffer; + $this->buffer = ""; + return $buf; + } + } + + function endCapture($buffer) { + if($this->state==2) { + $buf = $this->pages[$this->page]; + $this->pages[$this->page] = $buffer; + return $buf; + } + else { + $buf = $this->buffer; + $this->buffer = $buffer; + return $buf; + } + } + + function appendBuffer($buffer) { + if($this->state==2) { + $this->pages[$this->page] .= $buffer; + } + else { + $this->buffer .= $buffer; + } + + } + + /** + * Get the number of characters having space whithin the + * given width, respecting not to break words + */ + function GetNumberOfChars($width, $s) { + //Get width of a string in the current font + // $s=(string)$s; + $cw=&$this->CurrentFont['cw']; + $w=0; + $wordPos = 0; + $l=strlen($s); + $width = $width*1000/$this->FontSize; + for($i=0;$i<$l;$i++) { + $w+=$cw[$s{$i}]; + if ($s{$i} == ' ') { + $wordPos = $i; + } + if ($w >= $width) { + if ($wordPos > 0) { + return $wordPos; + } + else { + return -1; + } + } + } + return (($w <= $width)?$l:-1); + } + + /** + * Write string regarding to \n as line breaks + * Return an array containing number of line, width and height + * of this textual block. The align paramtere accepts L, R and C + * get values using: + * list($width, $height, $no, $firstX, $firstY, $lastX, $lastYl) = $pdf->Text2(); + **/ + function Text2($x, $y, $text, $align="L", $lineHeight=NULL, $xNewLine=NULL, $width=NULL) { + if (!$xNewLine) { + $xNewLine = $x; + } + + $lines = explode('\n', $text); + $height = ($lineHeight)?$lineHeight:$this->FontSize; + //oesi - add parameter width for set the content-width of fo:block + if($width!=NULL) + { + $pw = $x+$width; + } + else + $pw = $this->GetPageWidth(); + $nb = 0; + $maxWidth = 0; + $sx = $x; + $sy = $y; + foreach($lines as $line) + { + $width = $this->GetStringWidth($line); + do + { + $w=$this->w-$this->rMargin-$x; + //$wmax=($w-2*$this->cMargin)*1000/$this->FontSize; + $noc = $this->GetNumberOfChars($w, $line); + //echo "noc:$noc:$x:$w:".strlen($line).":$line
"; + if ($noc == -1) + { + if ($x == $xNewLine) + { + //word has not enough space on one line, draw it beyond borders + $noc = strlen($line); + } + else + { + if ($nb == 0) + { + $sy += $height; + $sx = $xNewLine; + } + //add newline and try again + $y += $height; + $nb++; + $x = $xNewLine; + continue; + } + } + + $showLine = substr($line, 0, $noc); + $textWidth = $this->GetStringWidth($showLine); + // echo "wmax:$nb:$x:$w:$textWidth:$showLine
"; + switch ($align) + { + case "R": + $tx = $pw-$textWidth; + break; + case "C": + $tx = ($pw-$x-$textWidth)/2 + $x; + break; + case "L": + default: + $tx = $x; + } + + $this->Text($tx, $y+$height, $showLine); + $line = trim(substr($line, $noc)); + $width = $this->GetStringWidth($line); + + if ($textWidth > $maxWidth) + { + $maxWidth = $textWidth; + } + $y += $height; + $nb++; + $x = $xNewLine; + } while ($width > 0); + } + //$this->y = $y; + $tot_height = $nb * $height; + + return array($maxWidth, $tot_height, $nb, $sx, $sy, $tx+$textWidth, $y-$height); + } + + /* + This extension allows to set a dash pattern and draw dashed lines or rectangles. + $pdf->SetDash(4,2); //4mm on, 2mm off + $pdf->Rect(20,30,170,20); + $pdf->SetDash(); //restore no dash + */ + function SetDash($black=false,$white=false) + { + if($black and $white) + $s=sprintf('[%.3f %.3f] 0 d',$black*$this->k,$white*$this->k); + else + $s='[] 0 d'; + $this->_out($s); + } + + /** + * Draw polygons + * $pdf->Polygon(array(50,115,150,115,100,20),'FD'); + **/ + function Polygon($points, $style='D') + { + //Draw a polygon + if($style=='F') + $op='f'; + elseif($style=='FD' or $style=='DF') + $op='b'; + else + $op='s'; + + $h = $this->h; + $k = $this->k; + + $points_string = ''; + for($i=0; $i_out($points_string . $op); + } + + /** + * Rounded rect + * $pdf->RoundedRect(70, 30, 68, 46, 3.5, 'DF'); + */ + function RoundedRect($x, $y, $w, $h,$r, $style = '') + { + $k = $this->k; + $hp = $this->h; + if($style=='F') + $op='f'; + elseif($style=='FD' or $style=='DF') + $op='B'; + else + $op='S'; + $MyArc = 4/3 * (sqrt(2) - 1); + $this->_out(sprintf('%.2f %.2f m',($x+$r)*$k,($hp-$y)*$k )); + $xc = $x+$w-$r ; + $yc = $y+$r; + $this->_out(sprintf('%.2f %.2f l', $xc*$k,($hp-$y)*$k )); + + $this->_Arc($xc + $r*$MyArc, $yc - $r, $xc + $r, $yc - $r*$MyArc, + $xc + $r, $yc); + $xc = $x+$w-$r ; + $yc = $y+$h-$r; + $this->_out(sprintf('%.2f %.2f l',($x+$w)*$k,($hp-$yc)*$k)); + $this->_Arc($xc + $r, $yc + $r*$MyArc, $xc + $r*$MyArc, $yc + $r, $xc, + $yc + $r); + $xc = $x+$r ; + $yc = $y+$h-$r; + $this->_out(sprintf('%.2f %.2f l',$xc*$k,($hp-($y+$h))*$k)); + $this->_Arc($xc - $r*$MyArc, $yc + $r, $xc - $r, $yc + $r*$MyArc, + $xc - $r, $yc); + $xc = $x+$r ; + $yc = $y+$r; + $this->_out(sprintf('%.2f %.2f l',($x)*$k,($hp-$yc)*$k )); + $this->_Arc($xc - $r, $yc - $r*$MyArc, $xc - $r*$MyArc, $yc - $r, $xc, + $yc - $r); + $this->_out($op); + } + + /** + * Rotate content. End rotation by call to Rotate(0) + * $pdf->Rotate($angle,$x,$y); + * $pdf->Text($x,$y,$txt); + * $pdf->Rotate(0); + */ + function Rotate($angle,$x=-1,$y=-1) { + if($x==-1) + $x=$this->x; + if($y==-1) + $y=$this->y; + if($this->angle!=0) + $this->_out('Q'); + $this->angle=$angle; + if($angle!=0) + { + $angle*=M_PI/180; + $c=cos($angle); + $s=sin($angle); + $cx=$x*$this->k; + $cy=($this->h-$y)*$this->k; + $this->_out(sprintf('q %.5f %.5f %.5f %.5f %.2f %.2f cm 1 0 0 1 %.2f %.2f cm',$c,$s,-$s,$c,$cx,$cy,-$cx,-$cy)); + } + } + + // Draws a cubic Bézier curve from last draw point + // Parameters: + // - x1, y1: Control point 1 + // - x2, y2: Control point 2 + // - x3, y3: End point + function CubicBezier($x1, $y1, $x2, $y2, $x3, $y3, $style='D') { + if($style=='F') + $op='f'; + elseif($style=='FD' or $style=='DF') + $op='B'; + else + $op='S'; + $this->_Curve($x1, $y1, $x2, $y2, $x3, $y3); + $this->_out($op); + } + + // Draws an ellipse + // Parameters: + // - x0, y0: Center point + // - rx, ry: Horizontal and vertical radius (if ry = 0, draws a circle) + // - angle: Orientation angle (anti-clockwise) + // - astart: Start angle + // - afinish: Finish angle + // - style: Style of ellipse (draw and/or fill: D, F, DF, FD, C (D + close)) + // - line_style: Line style for ellipse. Array like for SetLineStyle + // - fill_color: Fill color. Array with components (red, green, blue) + // - nSeg: Ellipse is made up of nSeg Bézier curves + function Ellipse($x0, $y0, $rx, $ry = 0, $angle = 0, $astart = 0, $afinish = 360, $style = '', $fill_color = null, $nSeg = 8) { + if ($rx) { + if (!(false === strpos($style, 'F')) && $fill_color) { + list($r, $g, $b) = $fill_color; + $this->SetFillColor($r, $g, $b); + } + switch ($style) { + case 'F': + $op = 'f'; + $line_style = null; + break; + case 'FD': case 'DF': + $op = 'B'; + break; + case 'C': + $op = 's'; // small 's' means closing the path as well + break; + default: + $op = 'S'; + break; + } + + if ($rx) { + if (!$ry) + $ry = $rx; + $rx *= $this->k; + $ry *= $this->k; + if ($nSeg < 2) + $nSeg = 2; + + $astart = deg2rad((float) $astart); + $afinish = deg2rad((float) $afinish); + $totalAngle = $afinish - $astart; + + $dt = $totalAngle/$nSeg; + $dtm = $dt/3; + + $x0 *= $this->k; + $y0 = ($this->h - $y0) * $this->k; + if ($angle != 0) { + $a = -deg2rad((float) $angle); + $this->_out(sprintf('q %.2f %.2f %.2f %.2f %.2f %.2f cm', cos($a), -1 * sin($a), sin($a), cos($a), $x0*10, $y0*10)); + $x0 = 0; + $y0 = 0; + } + + $t1 = $astart; + $a0 = $x0 + ($rx * cos($t1)); + $b0 = $y0 + ($ry * sin($t1)); + $c0 = -$rx * sin($t1); + $d0 = $ry * cos($t1); + $this->_Point($a0 / $this->k, $this->h - ($b0 / $this->k)); + for ($i = 1; $i <= $nSeg; $i++) { + // Draw this bit of the total curve + $t1 = ($i * $dt) + $astart; + $a1 = $x0 + ($rx * cos($t1)); + $b1 = $y0 + ($ry * sin($t1)); + $c1 = -$rx * sin($t1); + $d1 = $ry * cos($t1); + $this->_Curve(($a0 + ($c0 * $dtm)) / $this->k, + $this->h - (($b0 + ($d0 * $dtm)) / $this->k), + ($a1 - ($c1 * $dtm)) / $this->k, + $this->h - (($b1 - ($d1 * $dtm)) / $this->k), + $a1 / $this->k, + $this->h - ($b1 / $this->k)); + $a0 = $a1; + $b0 = $b1; + $c0 = $c1; + $d0 = $d1; + } + if ($angle !=0) { + $this->_out('Q'); + } + } + $this->_out($op); + } + } + + function ClosePath($style="D") { + if($style=='F') + $op='f'; + elseif($style=='FD' or $style=='DF') + $op='B'; + else + $op='S'; + + $this->_out(sprintf('h %s', $op)); + } + + function _Style($style="D") { + if($style=='F') + $op='f'; + elseif($style=='FD' or $style=='DF') + $op='B'; + else + $op='S'; + + $this->_out(sprintf('%s', $op)); + } + + // Draws a circle + // Parameters: + // - x0, y0: Center point + // - r: Radius + // - astart: Start angle + // - afinish: Finish angle + // - style: Style of circle (draw and/or fill) (D, F, DF, FD, C (D + close)) + // - line_style: Line style for circle. Array like for SetLineStyle + // - fill_color: Fill color. Array with components (red, green, blue) + // - nSeg: Ellipse is made up of nSeg Bézier curves + function Circle($x0, $y0, $r, $astart = 0, $afinish = 360, $style = '', $fill_color = null, $nSeg = 8) { + $this->Ellipse($x0, $y0, $r, 0, 0, $astart, $afinish, $style, $line_style, $fill_color, $nSeg); + } + + + // Sets a draw point + // Parameters: + // - x, y: Point + function _Point($x, $y) { + $this->_out(sprintf('%.2f %.2f m', $x * $this->k, ($this->h - $y) * $this->k)); + } + + // Draws a Bézier curve from last draw point + // Parameters: + // - x1, y1: Control point 1 + // - x2, y2: Control point 2 + // - x3, y3: End point + function _Curve($x1, $y1, $x2, $y2, $x3, $y3) { + $this->_out(sprintf('%.2f %.2f %.2f %.2f %.2f %.2f c', $x1 * $this->k, ($this->h - $y1) * $this->k, $x2 * $this->k, ($this->h - $y2) * $this->k, $x3 * $this->k, ($this->h - $y3) * $this->k)); + } + + + // Draws a cubic Bézier curve from last draw point + // Parameters: + // - x2, y2: Control point 2 + // - x3, y3: End point + + function _CurveRef1($x2, $y2, $x3, $y3) { + $this->_out(sprintf('%.2f %.2f %.2f %.2f v', $x2 * $this->k, ($this->h - $y2) * $this->k, $x3 * $this->k, ($this->h - $y3) * $this->k)); + } + + // Draws a cubic Bézier curve from last draw point + // Parameters: + // - x1, y1: Control point 1 + // - x3, y3: End point + + function _CurveRef2($x1, $y1, $x3, $y3) { + $this->_out(sprintf('%.2f %.2f %.2f %.2f y', $x1 * $this->k, ($this->h - $y1) * $this->k, $x3 * $this->k, ($this->h - $y3) * $this->k)); + } + + // Draws a line from last draw point + // Parameters: + // - x, y: End point + function _Line($x, $y) { + $this->_out(sprintf('%.2f %.2f l', $x * $this->k, ($this->h - $y) * $this->k)); + } + + + // Draws an ellipse + // Parameters: + // - x0, y0: Center point + // - rx, ry: Horizontal and vertical radius (if ry = 0, draws a circle) + // - angle: Orientation angle (anti-clockwise) + // - astart: Start angle + // - afinish: Finish angle + // - style: Style of ellipse (draw and/or fill: D, F, DF, FD, C (D + close)) + // - line_style: Line style for ellipse. Array like for SetLineStyle + // - fill_color: Fill color. Array with components (red, green, blue) + // - nSeg: Ellipse is made up of nSeg Bézier curves + function _Ellipse($x0, $y0, $rx, $ry = 0, $angle = 0, $astart = 0, $afinish = 360, $nSeg = 8) { + if ($rx) { + if (!$ry) + $ry = $rx; + $rx *= $this->k; + $ry *= $this->k; + if ($nSeg < 2) + $nSeg = 2; + + $astart = deg2rad((float) $astart); + $afinish = deg2rad((float) $afinish); + $totalAngle = $afinish - $astart; + + $dt = $totalAngle/$nSeg; + $dtm = $dt/3; + + $x0 *= $this->k; + $y0 = ($this->h - $y0) * $this->k; + if ($angle != 0) { + //$a = -deg2rad((float) $angle); + //$this->_out(sprintf('q %.2f %.2f %.2f %.2f %.2f %.2f cm', cos($a), -1 * sin($a), sin($a), cos($a), $x0*10, $y0*10)); + //echo "X:$x0:$y0:$a:".cos($a).":".sin($a)."
"; + //echo "X2:$x0:$y0
"; + //$x0 -= cos($a); + //$y0 -= $ry * sin($a); + } + + $t1 = $astart; + $a0 = $x0 + ($rx * cos($t1)); + $b0 = $y0 + ($ry * sin($t1)); + $c0 = -$rx * sin($t1); + $d0 = $ry * cos($t1); + //$this->_Point($a0 / $this->k, $this->h - ($b0 / $this->k)); + for ($i = 1; $i <= $nSeg; $i++) { + // Draw this bit of the total curve + $t1 = ($i * $dt) + $astart; + $a1 = $x0 + ($rx * cos($t1)); + $b1 = $y0 + ($ry * sin($t1)); + $c1 = -$rx * sin($t1); + $d1 = $ry * cos($t1); + $this->_Curve(($a0 + ($c0 * $dtm)) / $this->k, + $this->h - (($b0 + ($d0 * $dtm)) / $this->k), + ($a1 - ($c1 * $dtm)) / $this->k, + $this->h - (($b1 - ($d1 * $dtm)) / $this->k), + $a1 / $this->k, + $this->h - ($b1 / $this->k)); + $a0 = $a1; + $b0 = $b1; + $c0 = $c1; + $d0 = $d1; + } + if ($angle !=0) { + //$this->_out('Q'); + } + } + } + +} + +?> \ No newline at end of file diff --git a/include/xslfo2pdf/index.php b/include/xslfo2pdf/index.php new file mode 100644 index 000000000..216e3907b --- /dev/null +++ b/include/xslfo2pdf/index.php @@ -0,0 +1,93 @@ + +generatePdf($buffer, $_GET["file"], "D")) { + echo "Failed parsing file:".$_GET["file"]."
"; + } + } + else if ($_FILES["file"]) { + $buffer = file_get_contents($_FILES['file']['tmp_name']); + require_once("xslfo2pdf.php"); + $fo2pdf = new XslFo2Pdf(); + if (!$fo2pdf->generatePdf($buffer, $_FILES['file']['name'], "D")) { + echo "Failed parsing file:".$_FILES['file']['name']."
"; + //store file in specific directory that failed document may be checked by the developer team + file_put_contents("failed/".basename($_FILES['file']['name'])); + echo "Stored file for inspection"; + } + } + else { + ?> +
+ +

+Browse a local file to process: +

+ + + +
+

+

+Or choose one of the predefined examples
+'.$file.'(.xml)
'); + } + } + +function addDir($dirname) { + $dir = dir($dirname); + $files = array(); + while ($file = $dir->read()) { + if($file != "." && $file != "..") { + if (!is_dir($dirname."/".$file)) { + $path_parts = pathinfo($file); + + if ($path_parts['extension'] == "xml" || + $path_parts['extension'] == "fo") { + $files[$file] = $dirname . "/" . $file; + } + } + else { + $files += addDir($dirname."/".$file); + } + } + } + $dir->close(); + asort($files); + return $files; +} +?> +

+

XPMT is kindly hosted on
+ SourceForge.net Logo +

+
+ diff --git a/include/xslfo2pdf/svg_circle.php b/include/xslfo2pdf/svg_circle.php new file mode 100644 index 000000000..211113d70 --- /dev/null +++ b/include/xslfo2pdf/svg_circle.php @@ -0,0 +1,39 @@ + +initLocalSizeAttribute($node, "cx"); + $this->initLocalSizeAttribute($node, "cy"); + $this->initLocalSizeAttribute($node, "r"); + $y = $this->getContext("yOrig") + $this->getContext("cy"); + $x = $this->getContext("xOrig") + $this->getContext("cx"); + $rd = $this->getContext("r"); + + //echo "Circle:$x:$y:$rd:$sargs
"; + $pdf = $this->getPdf(); + $pdf->Circle($x, $y, $rd, 0, 360, $sargs); + } +} +?> \ No newline at end of file diff --git a/include/xslfo2pdf/svg_ellipse.php b/include/xslfo2pdf/svg_ellipse.php new file mode 100644 index 000000000..6a98d5261 --- /dev/null +++ b/include/xslfo2pdf/svg_ellipse.php @@ -0,0 +1,41 @@ + +initLocalSizeAttribute($node, "cx"); + $this->initLocalSizeAttribute($node, "cy"); + $this->initLocalSizeAttribute($node, "rx"); + $this->initLocalSizeAttribute($node, "ry"); + $y = $this->getContext("yOrig") + $this->getContext("cy"); + $x = $this->getContext("xOrig") + $this->getContext("cx"); + $rx = $this->getContext("rx"); + $ry = $this->getContext("ry"); + + //echo "Circle:$x:$y:$rd:$sargs
"; + $pdf = $this->getPdf(); + $pdf->Ellipse($x, $y, $rx, $ry, $sargs); + } +} +?> \ No newline at end of file diff --git a/include/xslfo2pdf/svg_g.php b/include/xslfo2pdf/svg_g.php new file mode 100644 index 000000000..8965b1e25 --- /dev/null +++ b/include/xslfo2pdf/svg_g.php @@ -0,0 +1,80 @@ + +initLocalSizeAttribute($node, "transform"); + $transform = $this->getContext("transform"); + + $index = strpos($transform, "("); + $func = substr($transform, 0, $index); + $paramStr = substr($transform, $index+1, strlen($transform)-$index-2); + $params = explode(",", $paramStr); + $pdf = $this->getPdf(); + $xOrig = $this->getContext("xOrig"); + $yOrig = $this->getContext("yOrig"); + + if ($func) { + switch ($func) { + case "translate": + $xdiff = $this->calcInternalValue($params[0]); + $ydiff = $this->calcInternalValue($params[1]); + $this->setContext("xOrig", $xOrig+$xdiff); + $this->setContext("yOrig", $yOrig+$ydiff ); + //echo "translate:".$xdiff.":".$ydiff."
"; + break; + case "rotate": + $angle = $params[0] * -1; + if (sizeof($params) > 1) { + $pdf->Rotate($angle, $params[1], $params[2]); + } + else { + $x = $this->getContext("x")+$xOrig; + $y = $this->getContext("y")+$yOrig; + $pdf->Rotate($angle, $x, $y); + } + break; + // case "skewX": + // case "skewY": + default: + echo "Function not supported:$func
"; + } + } + $this->processChildNodes($node, FO_SVG::$CHILDNODES); + + //restore group options + switch ($func) { + case "translate": + $this->setContext("xOrig", $xOrig); + $this->setContext("yOrig", $yOrig); + break; + case "rotate": + $pdf->Rotate(0); + break; + // case "skewX": + // case "skewY": + } + } +} +?> \ No newline at end of file diff --git a/include/xslfo2pdf/svg_line.php b/include/xslfo2pdf/svg_line.php new file mode 100644 index 000000000..90480dee7 --- /dev/null +++ b/include/xslfo2pdf/svg_line.php @@ -0,0 +1,39 @@ + +initLocalSizeAttribute($node, "x1"); + $this->initLocalSizeAttribute($node, "y1"); + $this->initLocalSizeAttribute($node, "x2"); + $this->initLocalSizeAttribute($node, "y2"); + $y1 = $this->getContext("yOrig") + $this->getContext("y1"); + $x1 = $this->getContext("xOrig") + $this->getContext("x1"); + $y2 = $this->getContext("yOrig") + $this->getContext("y2"); + $x2 = $this->getContext("xOrig") + $this->getContext("x2"); + $pdf = $this->getPdf(); + $pdf->Line($x1, $y1, $x2, $y2); + } +} +?> \ No newline at end of file diff --git a/include/xslfo2pdf/svg_path.php b/include/xslfo2pdf/svg_path.php new file mode 100644 index 000000000..e2ad55cd3 --- /dev/null +++ b/include/xslfo2pdf/svg_path.php @@ -0,0 +1,362 @@ + +initLocalAttribute($node, "d"); + $xOrig = $this->getContext("xOrig"); + $yOrig = $this->getContext("yOrig"); + + $d = $this->getContext("d"); + //replace spacial characters + $d = preg_replace("/[\n,]/i", " ", $d); + //add spaces except on points + $d = preg_replace("/([AMLZHVCSQTA])([\d-]+)/i", "\${1} \${2}", $d); + $d = preg_replace("/(\d+)([AMLZHVCSQTA])/i", "\${1} \${2}", $d); + $d = preg_replace("/\s\s/i", " ", $d); + $params = explode(" " , $d); + $x = $xOrig+$this->getContext("x"); + $y = $yOrig+$this->getContext("y"); + $ix = $x; + $iy = $y; + $pdf = $this->getPdf(); + $pdf->_Point($x, $y); + $buf = $pdf->startCapture(); + for($i=0; $igetSize($params[$i+1])+$xOrig; + $y = $this->getSize($params[$i+2])+$yOrig; + $pdf->_Point($x, $y); + $ix = $x; + $iy = $y; + $i += 3; + break; + case "m": + //move relative + $x += $this->getSize($params[$i+1]); + $y += $this->getSize($params[$i+2]); + $pdf->_Point($x, $y); + $ix = $x; + $iy = $y; + $i += 3; + break; + case "z": + case "Z": + //closepath + $pdf->ClosePath($sargs); + $x = $ix; + $y = $iy; + ++$i; + break; + case "L": + //absolute lineto + $x2 = $this->getSize($params[$i+1])+$xOrig; + $y2 = $this->getSize($params[$i+2])+$yOrig; + //echo "Line:$x:$y:$x2:$y2:$sargs
"; + $pdf->_Line($x2, $y2); + $x = $x2; + $y = $y2; + $i += 3; + break; + case "l": + //relative lineto + $x2 = $this->getSize($params[$i+1])+$x; + $y2 = $this->getSize($params[$i+2])+$y; + $pdf->_Line($x2, $y2); + $x = $x2; + $y = $y2; + $i += 3; + break; + case "H": + //absolute horizontal lineto + $x2 = $this->getSize($params[$i+1])+$xOrig; + $pdf->_Line($x2, $y); + $x = $x2; + $i += 2; + break; + case "h": + //relative horizontal lineto + $x2 = $this->getSize($params[$i+1]); + $pdf->_Line($x+$x2, $y); + $x += $x2; + $i += 2; + break; + case "V": + //absolute vertical lineto + $y2 = $this->getSize($params[$i+1])+$yOrig; + $pdf->_Line($x, $y2); + $y = $y2; + $i += 2; + break; + case "v": + //relative vertical lineto + $y2 = $this->getSize($params[$i+1]); + $pdf->_Line($x, $y+$y2); + $y += $y2; + $i += 2; + break; + case "C": + //absolute cubic bezier + $x1 = $this->getSize($params[$i+1])+$xOrig; + $y1 = $this->getSize($params[$i+2])+$yOrig; + $x2 = $this->getSize($params[$i+3])+$xOrig; + $y2 = $this->getSize($params[$i+4])+$yOrig; + $x = $this->getSize($params[$i+5])+$xOrig; + $y = $this->getSize($params[$i+6])+$yOrig; + $pdf->_Curve($x1, $y1, $x2, $y2, $x, $y); + $i += 7; + break; + case "c": + //relative cubic bezier + $x1 = $this->getSize($params[$i+1])+$x; + $y1 = $this->getSize($params[$i+2])+$y; + $x2 = $this->getSize($params[$i+3])+$x; + $y2 = $this->getSize($params[$i+4])+$y; + $x += $this->getSize($params[$i+5]); + $y += $this->getSize($params[$i+6]); + $pdf->_Curve($x1, $y1, $x2, $y2, $x, $y); + $i += 7; + break; + case "S": + //TODO: fix + //absolute cubic bezier with first control reflection + $x2 = $this->getSize($params[$i+1])+$xOrig; + $y2 = $this->getSize($params[$i+2])+$yOrig; + $x = $this->getSize($params[$i+3])+$xOrig; + $y = $this->getSize($params[$i+4])+$yOrig; + $pdf->_CurveRef1($x2, $y2, $x, $y); + $i += 5; + break; + case "s": + //TODO: fix + //relative cubic bezier with first control point reflection + $x2 = $this->getSize($params[$i+1])+$x; + $y2 = $this->getSize($params[$i+2])+$y; + $x += $this->getSize($params[$i+3]); + $y += $this->getSize($params[$i+4]); + $pdf->_CurveRef1($x2, $y2, $x, $y); + $i += 5; + break; + case "Q": + //absolute quadratic bezier + $x1 = $this->getSize($params[$i+1])+$xOrig; + $y1 = $this->getSize($params[$i+2])+$yOrig; + $ex = $this->getSize($params[$i+3])+$xOrig; + $ey = $this->getSize($params[$i+4])+$yOrig; + list($x1, $y1, $x2, $y2, $x, $y) = + $this->quadratic2CubicBezier($x, $y, $x1, $y1, $ex, $ey); + //echo "q2c:$x,$y,$x1,$y2,$ex,$ey => $x1,$y1,$x2,$y2,$x,$y
"; + $pdf->_Curve($x1, $y1, $x2, $y2, $x, $y); + $i += 5; + break; + case "q": + //relative quadratic bezier + $x1 = $this->getSize($params[$i+1])+$x; + $y1 = $this->getSize($params[$i+2])+$y; + $ex = $x+$this->getSize($params[$i+3]); + $ey = $y+$this->getSize($params[$i+4]); + list($x1, $y2, $x2, $y2, $x, $y) = + $this->quadratic2CubixBezier($x, $y, $x1, $y2, $ex, $ey); + $pdf->_Curve($x1, $y1, $x2, $y2, $x, $y); + $i += 5; + break; + case "T": + //absolute cubic bezier with first control reflection + //TODO: implement + $i += 3; + break; + case "t": + //relative cubic bezier with first control point reflection + //TODO: implement + $i += 3; + break; + case "A": + $rx = $this->getSize($params[$i+1]); + $ry = $this->getSize($params[$i+2]); + $anglex = -$params[$i+3]; + $fa = $params[$i+4]; + $fs = $params[$i+5]; + $ex = $this->getSize($params[$i+6])+$xOrig; + $ey = $this->getSize($params[$i+7])+$yOrig; + //only draw arcs if a difference between begin and endpoint + if ($ex-$x != 0 || $ey-$y != 0) { + //echo "Arc:x=$x:y=$y:ex=$ex:ey=$ey:fa=$fa:fs=$fs:angle=$anglex:rx=$rx:ry=$ry
"; + list($cx, $cy, $rx, $ry, $alpha_x, $start_angle, $delta_angle) = + $this->endpoint2Centric($x, $y, $ex, $ey, $fa, $fs, $anglex, $rx, $ry); + $pdf->_Ellipse($cx, $cy, $rx, $ry, $alpha_x, $start_angle, + $delta_angle+$start_angle); + } + $x = $ex; + $y = $ey; + $i += 8; + break; + case "a": + $rx = $this->getSize($params[$i+1]); + $ry = $this->getSize($params[$i+2]); + $anglex = -$params[$i+3]; + $fa = $params[$i+4]; + $fs = $params[$i+5]; + $ex = $x+$this->getSize($params[$i+6]); + $ey = $y+$this->getSize($params[$i+7]); + //only draw arcs if a difference between begin and endpoint + if ($ex-$x != 0 || $ey-$y != 0) { + //echo "Arc:x=$x:y=$y:ex=$ex:ey=$ey:fa=$fa:fa=$fs:angle=$anglex:rx=$rx:ry=$ry
"; + list($cx, $cy, $rx, $ry, $alpha_x, $start_angle, $delta_angle) = + $this->endpoint2Centric($x, $y, $ex, $ey, $fa, $fs, 0, $rx, $ry); + //echo "Arc2:$cx:$cy:$rx:$ry:$alpha_x:$start_angle:$delta_angle
"; + //$pdf->Rotate($anglex); + //TODO: fix rotation to x axis + $pdf->_Ellipse($cx, $cy, $rx, $ry, $alpha_x, $start_angle, + $delta_angle+$start_angle); + //$pdf->Rotate(0); + } + $x = $ex; + $y = $ey; + $i += 8; + break; + default: + if ($lastParam) { + //echo "useLast:$lastParam:".$params[$i-1].":".$params[$i]."
"; + //add previous command again + $i--; + $params[$i] = $lastParam; + } + else { + $this->NotYetSupported("Pathdata:".$params[$i]); + } + } + $lastParam = $params[$lastI]; + } + $pdf->_Style($sargs); + $buf = $pdf->endCapture($buf); + //echo $buf."
"; + $pdf->appendBuffer($buf); + } + + /** + * This function converts from a quadratic to a cubis bezier + * It returns an array of + * array($x1, $y1, $x2, $y2, $endx, $endy) + **/ + private function quadratic2CubicBezier($startx, $starty, $x1, $y1, $endx, $endy) { + $cx1 = ($x1 - $startx) * 2/3 + $startx; + $cy1 = ($y1 - $starty) * 2/3 + $starty; + $cx2 = $endx - ($endx - $x1)*2/3; + $cy2 = $endy - ($endy - $y1)*2/3; + return array($cx1, $cy1, $cx2, $cy2, $endx, $endy); + } + + /** + * For an explenation see + * + * An array consisting of the following elements will be returned + * array(cx, cy, rx, ry, alpha_x, start_angle, delta_angle) + **/ + private function endpoint2Centric($x1, $y1, $x2, $y2, $fa, $fs, $angle, $rx, $ry) { + $angler = deg2rad($angle); + //initialization + $cosa = cos($angler); + $sina = sin($angler); + + //step 1 + $xd = ($x1-$x2)/2; + $yd = ($y1-$y2)/2; + $x_ = $cosa*$xd + $sina*$yd; + $y_ = $cosa*$yd - $sina*$xd; + //echo "1:$x_:$y_
"; + + //step2 + $rxq = $rx*$rx; + $ryq = $ry*$ry; + $y_q = $y_*$y_; + $x_q = $x_*$x_; + $val = ($rxq*$ryq-$rxq*$y_q-$ryq*$x_q)/ + ($rxq*$y_q+$ryq*$x_q); + if ($val >= 0) { + $c = sqrt($val); + } + else { + //TODO: check how to proceed if negative number + $c = sqrt(-$val); + } + if ($fa == $fs) { + $c *= -1; + } + $cx_ = $c * (($rx*$y_)/$ry); + $cy_ = $c * -(($ry*$x_)/$rx); + //echo "2:$cx_:$cy_
"; + + //step3 + $cx = $cosa*$cx_ - $sina*$cy_ + ($x1+$x2)/2; + $cy = $sina*$cx_ + $cosa*$cy_ + ($y1+$y2)/2; + //echo "3:$cx:$cy
"; + + //step 4 + $fx = ($x_-$cx_)/$rx; + $fy = ($y_-$cy_)/$ry; + $angle1 = $this->vectorAngle(1, 0, $fx, $fy); + $angle2 = $this->vectorAngle($fx, $fy, (-$x_-$cx_)/$rx, (-$y_-$cy_)/$ry); + $angle2 %= 360; + if ($fs == 0 && $angle2 > 0) { + $angle2 -= 360; + } + else if ($fs == 1 && $angle2 < 0) { + $angle2 += 360; + } + //echo "4:$angle:$angle2
"; + return array($cx, $cy, $rx, $ry, $angle, -$angle1, -$angle2); + } + + /** + * Calculate angle between two vectors + */ + private function vectorAngle($ux, $uy, $vx, $vy) { + if ($ux + $uy == 0 || $vx + $vy == 0) { + return 0; + } + $uxq = $ux*$ux; + $uyq = $uy*$uy; + $vxq = $vx*$vx; + $vyq = $vy*$vy; + $val = ($ux*$vx+$uy*$vy)/ + (sqrt($uxq+$uyq)*sqrt($vxq+$vyq)); + $angle = rad2deg(acos($val)); + if ($ux*$vy-$uy*$vx < 0) { + $angle *= -1; + } + return $angle; + } + + private function getSize($param) { + return $this->calcInternalValue($param); + } +} +?> \ No newline at end of file diff --git a/include/xslfo2pdf/svg_polygon.php b/include/xslfo2pdf/svg_polygon.php new file mode 100644 index 000000000..5b91c2b3e --- /dev/null +++ b/include/xslfo2pdf/svg_polygon.php @@ -0,0 +1,43 @@ + +initLocalAttribute($node, "points"); + + $yOrig = $this->getContext("yOrig"); + $xOrig = $this->getContext("xOrig"); + + $points = explode(" ", $this->getContext("points")); + $pdf = $this->getPdf(); + $pointsArray = array(); + foreach($points as $point) { + $coords = explode(",", $point); + $pointsArray[] = $this->calcInternalValue($coords[0], "mm", "pt")+$xOrig; + $pointsArray[] = $this->calcInternalValue($coords[1], "mm", "pt")+$yOrig; + } + $pdf->Polygon($pointsArray, $sargs); + } +} +?> \ No newline at end of file diff --git a/include/xslfo2pdf/svg_rect.php b/include/xslfo2pdf/svg_rect.php new file mode 100644 index 000000000..578911b82 --- /dev/null +++ b/include/xslfo2pdf/svg_rect.php @@ -0,0 +1,40 @@ + +initLocalSizeAttribute($node, "rx"); + $y = $this->getContext("yOrig") + $this->getContext("y"); + $x = $this->getContext("xOrig") + $this->getContext("x"); + $width = $this->getContext("width"); + $height = $this->getContext("height"); + $rx = $this->getContext("rx"); + if (!$rx) { + $rx = 0; + } + $pdf = $this->getPdf(); + $pdf->RoundedRect($x, $y, $width, $height, $rx, $sargs); + } +} +?> \ No newline at end of file diff --git a/include/xslfo2pdf/svg_text.php b/include/xslfo2pdf/svg_text.php new file mode 100644 index 000000000..b5c20a644 --- /dev/null +++ b/include/xslfo2pdf/svg_text.php @@ -0,0 +1,60 @@ + +initLocalSizeAttribute($node, "font-size", "pt"); + $this->initLocalAttribute($node, "font-family"); + $this->initLocalAttribute($node, "font-style"); + $y = $this->getContext("yOrig") + $this->getContext("y"); + $x = $this->getContext("xOrig") + $this->getContext("x"); + $width = $this->getContext("width"); + $height = $this->getContext("height"); + $fontFamily = $this->getContext("font-family"); + $fontStyle = $this->getContext("font-style"); + $fontSize = $this->getContext("font-size"); + + $pdf = $this->getPdf(); + $oldFontFamily = $pdf->GetFontFamily(); + $oldFontStyle = $pdf->GetFontStyle(); + $oldFontSize = $pdf->GetFontSize(); + $txt = $node->nodeValue; + + if ($pdf->FontExists($fontFamily, $fontStyle)) { + $pdf->SetFont($fontFamily, $fontStyle, $fontSize); + } + else if($pdf->FontExists($oldFontFamily, $fontStyle)) { + $pdf->SetFont($oldFontFamily, $fontStyle, $fontSize); + } + else { + $pdf->SetFont($oldFontFamily, $oldFontStyle, $fontSize); + } + + $pdf->Text($x, $y, $txt); + + //reset font + $pdf->SetFont($oldFontFamily, $oldFontStyle, $oldFontSize); + } +} +?> \ No newline at end of file diff --git a/include/xslfo2pdf/xslfo2pdf.php b/include/xslfo2pdf/xslfo2pdf.php new file mode 100644 index 000000000..11901a309 --- /dev/null +++ b/include/xslfo2pdf/xslfo2pdf.php @@ -0,0 +1,132 @@ + +"; + return false; + } + //get the only child + foreach($doc->childNodes as $child) { + if ($child != NULL && + $child->nodeName == "fo:root") { + $rootNode = $child; + } + } + if ($rootNode == null) { + echo "Didn't find root node
"; + return false; + } + + $pdf = new MyPDF(); + $root = new FO_Root($pdf); + $this->initDefaults($pdf, $root); + if ($root->parse($rootNode) === false) { + echo "Parsing failed
"; + return false; + } + + if (strpos($name, ".pdf")===false) { + $name = $name.".pdf"; + } + $pdf->Output($name, $dest); + } + + private function initDefaults(FPDF $pdf, FO_Root $root) { + $pdf->SetFont('Arial','',14); + $pdf->SetAutoPageBreak(true); + $root->setContext("page-width", "21"); + } +} + +class FO_Factory { + private static $factory = array("fo:layout-master-set" => 'FO_LayoutMasterSet', + "fo:block" => 'FO_Block', + "fo:page-sequence" => 'FO_PageSequence', + "fo:flow" => 'FO_Flow', + "fo:block-container" => 'FO_BlockContainer', + "fo:list-block" => 'FO_ListBlock', + "fo:table-and-caption" => 'FO_TableAndCaption', + "fo:table" => 'FO_Table', + "fo:table-caption" => 'FO_TableCaption', + "fo:table-header" => 'FO_TableHeader', + "fo:table-footer" => 'FO_TableFooter', + "fo:table-body" => 'FO_TableBody', + "fo:table-row" => 'FO_TableRow', + "fo:table-column" => 'FO_TableColumn', + "fo:table-cell" => 'FO_TableCell', + "fo:inline" => 'FO_Inline', + "fo:instream-foreign-object" => + 'FO_InstreamForeignObject', + "fo:basic-link" => 'FO_BasicLink', + "fo:external-graphic" => 'FO_ExternalGraphic', + "svg:svg" => 'FO_SVG', + "svg:circle" => 'SVG_Circle', + "svg:rect" => 'SVG_Rect', + "svg:ellipse" => 'SVG_Ellipse', + "svg:line" => 'SVG_Line', + "svg:polygon" => 'SVG_Polygon', + "svg:polyline" => 'SVG_Polygon', + "svg:g" => 'SVG_G', + "svg:text" => 'SVG_Text', + "svg:path" => 'SVG_Path' + ); + + private static $names = NULL; + + public static function createFOObject(DOMNode $node, FO_Container $container, + FPDF $pdf, FO_Context &$context, + $filter) { + $obj = self::$factory[$node->nodeName]; + if (!$obj) { + return NULL; + } + if (!$filter || !in_array($obj, $filter)) { + echo "ignore due to filter:$obj
"; + return NULL; + } + //echo "Create:$obj
"; + return new $obj($container, $pdf, $context); + } +} + + +?> diff --git a/include/xslfo2pdf/xslfo2pdf_example.php b/include/xslfo2pdf/xslfo2pdf_example.php new file mode 100644 index 000000000..fc7010de5 --- /dev/null +++ b/include/xslfo2pdf/xslfo2pdf_example.php @@ -0,0 +1,61 @@ + +generatePdf($buffer, $_GET["file"], "D")) { + echo "Failed parsing file:".$_GET["file"]."
"; + } + } + else { + $files = addDir("examples"); + foreach ($files as $file) { + echo(''.$file.'
'); + } + } + +function addDir($dirname) { + $dir = dir($dirname); + $files = array(); + while ($file = $dir->read()) { + if($file != "." && $file != "..") { + if (!is_dir($dirname."/".$file)) { + $path_parts = pathinfo($file); + + if ($path_parts['extension'] == "xml" || + $path_parts['extension'] == "fo") { + $files[] = $dirname . "/" . $file; + } + } + else { + $files += addDir($dirname."/".$file); + } + } + } + $dir->close(); + asort($files); + return $files; +} +?>