Print Builder

From PlcWiki

(Difference between revisions)
Jump to: navigation, search
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
-
* Způsob "vše v jednom" - zkopírování servletu do webového projektu včetně knihoven atp.
+
* 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 paramentry URL, kde potom klíčem je tag a hodnotou je text
+
* 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:
-
  http://localhost:8080/PrintBuilder/?templatename=my_template
+
  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("food[0]", new String[] { "milk", "egg" });
-
map.put("vehicle[0]", new String[] { "renault", "mercedes" });
+
map.put("vehicle[0]", new String[] { "renault", "mercedes" });
-
map.put("food[1]", new String[] { "onion", "potato" });
+
map.put("food[1]", new String[] { "onion", "potato" });
-
map.put("vehicle[1]", new String[] { "fiat", "subaru" });
+
map.put("vehicle[1]", new String[] { "fiat", "subaru" });
</java>
</java>
Line 48: Line 59:
</xml>
</xml>
-
== Fonty ==
+
'''Tag "list" představuje jednu stránku v PDF a tag "part" je výčet hodnot.'''
-
fop.xconf
+
V šabloně by se iterovalo přibližně takto:
<xml>
<xml>
-
   <fonts>
+
<xsl:for-each select="list">
-
   <directory>/Users/johndoe/fonts</directory>
+
   <xsl:value-of select="singleTAG"/>
-
   </fonts>
+
   <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.

Odkazy

Personal tools