Print Builder
From PlcWiki
m (→Vytvoření PDF) |
m (→Fonty) |
||
(27 intermediate revisions not shown) | |||
Line 2: | Line 2: | ||
Webové řešení tvorby souborů PDF postavené na základě projektu Apache FOP (Formatting Objects Processor). | Webové řešení tvorby souborů PDF postavené na základě projektu Apache FOP (Formatting Objects Processor). | ||
+ | |||
+ | svn+ssh://user@oko.clever.cz: java/PrintBuilder | ||
+ | |||
+ | '''Cílem je umožnit tvorbu HTML formulářů, jejichž položky se pouze odešlou jako URL parametry na servlet a "voilá" dokument PDF je hotov a připraven k vytisknutí.''' | ||
== Integrace == | == Integrace == | ||
Line 7: | Line 11: | ||
Příklady použití | Příklady použití | ||
- | * Volání servletu metodou POST, který je nasazen samostatně na nějakém dostupném serveru | + | * Volání servletu metodou POST, který je nasazen samostatně na nějakém dostupném serveru |
- | * | + | * Integrace pomocí forwardu - RequestDispatcher (obě aplikace jsou nasazeny na stejném Tomcatu) |
+ | |||
+ | context.xml | ||
+ | <xml> | ||
+ | <Context crossContext="true"> | ||
+ | </xml> | ||
== Vytvoření PDF == | == Vytvoření PDF == | ||
Line 14: | Line 23: | ||
* Vytvoření šablony XSL a její umístění do adresáře na který se odkazuje web.xml parametrem "templatedir" | * Vytvoření šablony XSL a její umístění do adresáře na který se odkazuje web.xml parametrem "templatedir" | ||
* Název šablony (název souboru) figuruje v parametru URL "templatename" (bez extenze) | * Název šablony (název souboru) figuruje v parametru URL "templatename" (bez extenze) | ||
- | * Data určená k vyplnění šablony se posílají buď přímo v URL paramentru "xmldata" formou xml dokumentu, nebo jsou použity | + | * Data určená k vyplnění šablony se posílají buď přímo v URL paramentru "xmldata" formou xml dokumentu, nebo jsou použity všechny parametry URL, kde potom '''klíčem je tag a hodnotou je text''' |
Příklad URL: | Příklad URL: | ||
- | + | localhost:8080/PrintBuilder/Untitled?templatename=my_template | |
&singleTAG=first&singleTAG=second | &singleTAG=first&singleTAG=second | ||
&food[0]=milk&food[0]=egg&vehicle[0]=renault&vehicle[0]=mercedes | &food[0]=milk&food[0]=egg&vehicle[0]=renault&vehicle[0]=mercedes | ||
&food[1]=onion&food[1]=potato&vehicle[1]=fiat&vehicle[1]=subaru | &food[1]=onion&food[1]=potato&vehicle[1]=fiat&vehicle[1]=subaru | ||
+ | |||
+ | Ilustrace jak by toto URL vypadalo v Javě: | ||
<java> | <java> | ||
map.put("singleTAG", new String[] { "first", "second" }); | map.put("singleTAG", new String[] { "first", "second" }); | ||
- | + | map.put("food[0]", new String[] { "milk", "egg" }); | |
- | + | map.put("vehicle[0]", new String[] { "renault", "mercedes" }); | |
- | + | map.put("food[1]", new String[] { "onion", "potato" }); | |
- | + | map.put("vehicle[1]", new String[] { "fiat", "subaru" }); | |
</java> | </java> | ||
Line 48: | Line 59: | ||
</xml> | </xml> | ||
- | + | '''Tag "list" představuje jednu stránku v PDF a tag "part" je výčet hodnot.''' | |
- | + | V šabloně by se iterovalo přibližně takto: | |
<xml> | <xml> | ||
- | < | + | <xsl:for-each select="list"> |
- | < | + | <xsl:value-of select="singleTAG"/> |
- | </ | + | <xsl:for-each select="part"> |
+ | <xsl:value-of select="vehicle"/> | ||
+ | ... | ||
+ | </xsl:for-each> | ||
+ | </xsl:for-each> | ||
</xml> | </xml> | ||
+ | |||
+ | === Fonty === | ||
+ | |||
+ | Aby fungovala správně česká diakritika, musí konfigurační soubor '''fop.xconf''' (odkazuje se na něj web.xml) obsahovat správné cesty k TTF fontům OS a popis jejich metrik včetně příslušných xml souborů. Pokud používáte Linux a nemáte české TTF fonty, můžete si je stáhnout z adresy http://corefonts.sourceforge.net/. | ||
+ | |||
+ | Příklad odkazu na konfiguraci FOPu - web.xml | ||
+ | <xml> | ||
+ | <init-param> | ||
+ | <param-name>fopconfig</param-name> | ||
+ | <param-value>conf/fop.xconf</param-value> | ||
+ | </init-param> | ||
+ | </xml> | ||
+ | |||
+ | Příklad cest k fontům v systému MS Windows ve fop.xconf | ||
+ | |||
+ | <xml> | ||
+ | <!ENTITY fop.home "file:///C:/Program Files/Apache Software Foundation/Tomcat 7.0/webapps/PrintBuilder/"> | ||
+ | <!ENTITY fonts.dir "file:///c:/Windows/Fonts"> | ||
+ | </xml> | ||
+ | |||
+ | První řádek říká FOPu kde má hledat adresář ''conf'' se soubory metrik. | ||
+ | |||
+ | === Odkazy === | ||
+ | |||
+ | * http://www.kosek.cz/xml/xslt/vyrazy.htm | ||
+ | * http://xmlgraphics.apache.org/fop/examples.html |
Current revision as of 13:00, 5 June 2012
Contents |
Popis
Webové řešení tvorby souborů PDF postavené na základě projektu Apache FOP (Formatting Objects Processor).
svn+ssh://user@oko.clever.cz: java/PrintBuilder
Cílem je umožnit tvorbu HTML formulářů, jejichž položky se pouze odešlou jako URL parametry na servlet a "voilá" dokument PDF je hotov a připraven k vytisknutí.
Integrace
Příklady použití
- Volání servletu metodou POST, který je nasazen samostatně na nějakém dostupném serveru
- Integrace pomocí forwardu - RequestDispatcher (obě aplikace jsou nasazeny na stejném Tomcatu)
context.xml
<Context crossContext="true">
Vytvoření PDF
- Vytvoření šablony XSL a její umístění do adresáře na který se odkazuje web.xml parametrem "templatedir"
- Název šablony (název souboru) figuruje v parametru URL "templatename" (bez extenze)
- Data určená k vyplnění šablony se posílají buď přímo v URL paramentru "xmldata" formou xml dokumentu, nebo jsou použity všechny parametry URL, kde potom klíčem je tag a hodnotou je text
Příklad URL:
localhost:8080/PrintBuilder/Untitled?templatename=my_template &singleTAG=first&singleTAG=second &food[0]=milk&food[0]=egg&vehicle[0]=renault&vehicle[0]=mercedes &food[1]=onion&food[1]=potato&vehicle[1]=fiat&vehicle[1]=subaru
Ilustrace jak by toto URL vypadalo v Javě:
map.put("singleTAG", new String[] { "first", "second" }); map.put("food[0]", new String[] { "milk", "egg" }); map.put("vehicle[0]", new String[] { "renault", "mercedes" }); map.put("food[1]", new String[] { "onion", "potato" }); map.put("vehicle[1]", new String[] { "fiat", "subaru" });
Výsledné XML na serveru:
<root> <list> <singleTAG>first</singleTAG> <part><vehicle>fiat</vehicle><food>onion</food></part> <part><food>milk</food><vehicle>renault</vehicle></part> </list> <list> <singleTAG>second</singleTAG> <part><vehicle>subaru</vehicle><food>potato</food></part> <part><food>egg</food><vehicle>mercedes</vehicle></part> </list> </root>
Tag "list" představuje jednu stránku v PDF a tag "part" je výčet hodnot.
V šabloně by se iterovalo přibližně takto:
<xsl:for-each select="list"> <xsl:value-of select="singleTAG"/> <xsl:for-each select="part"> <xsl:value-of select="vehicle"/> ... </xsl:for-each> </xsl:for-each>
Fonty
Aby fungovala správně česká diakritika, musí konfigurační soubor fop.xconf (odkazuje se na něj web.xml) obsahovat správné cesty k TTF fontům OS a popis jejich metrik včetně příslušných xml souborů. Pokud používáte Linux a nemáte české TTF fonty, můžete si je stáhnout z adresy http://corefonts.sourceforge.net/.
Příklad odkazu na konfiguraci FOPu - web.xml
<init-param> <param-name>fopconfig</param-name> <param-value>conf/fop.xconf</param-value> </init-param>
Příklad cest k fontům v systému MS Windows ve fop.xconf
<!ENTITY fop.home "file:///C:/Program Files/Apache Software Foundation/Tomcat 7.0/webapps/PrintBuilder/"> <!ENTITY fonts.dir "file:///c:/Windows/Fonts">
První řádek říká FOPu kde má hledat adresář conf se soubory metrik.