You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xmlgraphics.apache.org by bu...@apache.org on 2012/12/04 16:59:44 UTC
svn commit: r840735 [19/19] - in
/websites/staging/xmlgraphics/trunk/content: ./ batik/ batik/dev/
batik/tools/ batik/using/ batik/using/scripting/ commons/ fop/ fop/0.95/
fop/1.0/ fop/1.1/ fop/trunk/
Modified: websites/staging/xmlgraphics/trunk/content/fop/trunk/servlets.html
==============================================================================
--- websites/staging/xmlgraphics/trunk/content/fop/trunk/servlets.html (original)
+++ websites/staging/xmlgraphics/trunk/content/fop/trunk/servlets.html Tue Dec 4 15:59:34 2012
@@ -362,63 +362,63 @@ This example servlet should not be used
<p>This section assumes you are familiar with <a href="embedding.html">embedding FOP</a> .</p>
<h3 id="a-minimal-servlet-wzxhzdk15wzxhzdk16">A minimal Servlet <a id="minimal-servlet"></a></h3>
<p>Here is a minimal code snippet to demonstrate the basics:</p>
-<div class="codehilite"><pre><span class="n">private</span> <span class="n">FopFactory</span> <span class="n">fopFactory</span> <span class="o">=</span> <span class="n">FopFactory</span><span class="o">.</span><span class="n">newInstance</span><span class="p">();</span>
-<span class="n">private</span> <span class="n">TransformerFactory</span> <span class="n">tFactory</span> <span class="o">=</span> <span class="n">TransformerFactory</span><span class="o">.</span><span class="n">newInstance</span><span class="p">();</span>
+<div class="codehilite"><pre><span class="kd">private</span> <span class="n">FopFactory</span> <span class="n">fopFactory</span> <span class="o">=</span> <span class="n">FopFactory</span><span class="o">.</span><span class="na">newInstance</span><span class="o">();</span>
+<span class="kd">private</span> <span class="n">TransformerFactory</span> <span class="n">tFactory</span> <span class="o">=</span> <span class="n">TransformerFactory</span><span class="o">.</span><span class="na">newInstance</span><span class="o">();</span>
-<span class="n">public</span> <span class="n">void</span> <span class="n">doGet</span><span class="p">(</span><span class="n">HttpServletRequest</span> <span class="n">request</span><span class="p">,</span>
- <span class="n">HttpServletResponse</span> <span class="n">response</span><span class="p">)</span> <span class="n">throws</span> <span class="n">ServletException</span> <span class="p">{</span>
- <span class="n">try</span> <span class="p">{</span>
- <span class="n">response</span><span class="o">.</span><span class="n">setContentType</span><span class="p">(</span><span class="s">"application/pdf"</span><span class="p">);</span>
- <span class="n">Fop</span> <span class="n">fop</span> <span class="o">=</span> <span class="n">fopFactory</span><span class="o">.</span><span class="n">newFop</span><span class="p">(</span><span class="n">MimeConstants</span><span class="o">.</span><span class="n">MIME_PDF</span><span class="p">,</span> <span class="n">response</span><span class="o">.</span><span class="n">getOutputStream</span><span class="p">());</span>
- <span class="n">Transformer</span> <span class="n">transformer</span> <span class="o">=</span> <span class="n">tFactory</span><span class="o">.</span><span class="n">newTransformer</span><span class="p">();</span>
- <span class="n">Source</span> <span class="n">src</span> <span class="o">=</span> <span class="k">new</span> <span class="n">StreamSource</span><span class="p">(</span><span class="s">"foo.fo"</span><span class="p">);</span>
- <span class="n">Result</span> <span class="n">res</span> <span class="o">=</span> <span class="k">new</span> <span class="n">SAXResult</span><span class="p">(</span><span class="n">fop</span><span class="o">.</span><span class="n">getDefaultHandler</span><span class="p">());</span>
- <span class="n">transformer</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span><span class="n">src</span><span class="p">,</span> <span class="n">res</span><span class="p">);</span>
- <span class="p">}</span> <span class="n">catch</span> <span class="p">(</span><span class="n">Exception</span> <span class="n">ex</span><span class="p">)</span> <span class="p">{</span>
- <span class="n">throw</span> <span class="k">new</span> <span class="n">ServletException</span><span class="p">(</span><span class="n">ex</span><span class="p">);</span>
- <span class="p">}</span>
-<span class="p">}</span>
+<span class="kd">public</span> <span class="kt">void</span> <span class="nf">doGet</span><span class="o">(</span><span class="n">HttpServletRequest</span> <span class="n">request</span><span class="o">,</span>
+ <span class="n">HttpServletResponse</span> <span class="n">response</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">ServletException</span> <span class="o">{</span>
+ <span class="k">try</span> <span class="o">{</span>
+ <span class="n">response</span><span class="o">.</span><span class="na">setContentType</span><span class="o">(</span><span class="s">"application/pdf"</span><span class="o">);</span>
+ <span class="n">Fop</span> <span class="n">fop</span> <span class="o">=</span> <span class="n">fopFactory</span><span class="o">.</span><span class="na">newFop</span><span class="o">(</span><span class="n">MimeConstants</span><span class="o">.</span><span class="na">MIME_PDF</span><span class="o">,</span> <span class="n">response</span><span class="o">.</span><span class="na">getOutputStream</span><span class="o">());</span>
+ <span class="n">Transformer</span> <span class="n">transformer</span> <span class="o">=</span> <span class="n">tFactory</span><span class="o">.</span><span class="na">newTransformer</span><span class="o">();</span>
+ <span class="n">Source</span> <span class="n">src</span> <span class="o">=</span> <span class="k">new</span> <span class="n">StreamSource</span><span class="o">(</span><span class="s">"foo.fo"</span><span class="o">);</span>
+ <span class="n">Result</span> <span class="n">res</span> <span class="o">=</span> <span class="k">new</span> <span class="n">SAXResult</span><span class="o">(</span><span class="n">fop</span><span class="o">.</span><span class="na">getDefaultHandler</span><span class="o">());</span>
+ <span class="n">transformer</span><span class="o">.</span><span class="na">transform</span><span class="o">(</span><span class="n">src</span><span class="o">,</span> <span class="n">res</span><span class="o">);</span>
+ <span class="o">}</span> <span class="k">catch</span> <span class="o">(</span><span class="n">Exception</span> <span class="n">ex</span><span class="o">)</span> <span class="o">{</span>
+ <span class="k">throw</span> <span class="k">new</span> <span class="nf">ServletException</span><span class="o">(</span><span class="n">ex</span><span class="o">);</span>
+ <span class="o">}</span>
+<span class="o">}</span>
</pre></div>
<p>There are numerous problems with the code snippet above. Its purpose is only to demonstrate the basic concepts. See below for details.</p>
<h3 id="adding-xsl-tranformation-xslt-wzxhzdk17wzxhzdk18">Adding XSL tranformation (XSLT) <a id="xslt"></a></h3>
<p>A common requirement is to transform an XML source to XSL-FO using an XSL transformation. It is recommended to use JAXP for this task. The following snippet shows the basic code:</p>
-<div class="codehilite"><pre><span class="n">private</span> <span class="n">FopFactory</span> <span class="n">fopFactory</span> <span class="o">=</span> <span class="n">FopFactory</span><span class="o">.</span><span class="n">newInstance</span><span class="p">();</span>
-<span class="n">private</span> <span class="n">TransformerFactory</span> <span class="n">tFactory</span> <span class="o">=</span> <span class="n">TransformerFactory</span><span class="o">.</span><span class="n">newInstance</span><span class="p">();</span>
+<div class="codehilite"><pre><span class="kd">private</span> <span class="n">FopFactory</span> <span class="n">fopFactory</span> <span class="o">=</span> <span class="n">FopFactory</span><span class="o">.</span><span class="na">newInstance</span><span class="o">();</span>
+<span class="kd">private</span> <span class="n">TransformerFactory</span> <span class="n">tFactory</span> <span class="o">=</span> <span class="n">TransformerFactory</span><span class="o">.</span><span class="na">newInstance</span><span class="o">();</span>
-<span class="n">public</span> <span class="n">void</span> <span class="n">init</span><span class="p">()</span> <span class="n">throws</span> <span class="n">ServletException</span> <span class="p">{</span>
- <span class="sr">//</span><span class="n">Optionally</span> <span class="n">customize</span> <span class="n">the</span> <span class="n">FopFactory</span> <span class="ow">and</span> <span class="n">TransformerFactory</span> <span class="n">here</span>
-<span class="p">}</span>
+<span class="kd">public</span> <span class="kt">void</span> <span class="nf">init</span><span class="o">()</span> <span class="kd">throws</span> <span class="n">ServletException</span> <span class="o">{</span>
+ <span class="c1">//Optionally customize the FopFactory and TransformerFactory here</span>
+<span class="o">}</span>
-<span class="p">[</span><span class="o">..</span><span class="p">]</span>
+<span class="o">[..]</span>
-<span class="sr">//</span><span class="n">Setup</span> <span class="n">a</span> <span class="n">buffer</span> <span class="n">to</span> <span class="n">obtain</span> <span class="n">the</span> <span class="n">content</span> <span class="nb">length</span>
-<span class="n">ByteArrayOutputStream</span> <span class="n">out</span> <span class="o">=</span> <span class="k">new</span> <span class="n">ByteArrayOutputStream</span><span class="p">();</span>
+<span class="c1">//Setup a buffer to obtain the content length</span>
+<span class="n">ByteArrayOutputStream</span> <span class="n">out</span> <span class="o">=</span> <span class="k">new</span> <span class="n">ByteArrayOutputStream</span><span class="o">();</span>
-<span class="sr">//</span><span class="n">Setup</span> <span class="n">FOP</span>
-<span class="n">Fop</span> <span class="n">fop</span> <span class="o">=</span> <span class="n">fopFactory</span><span class="o">.</span><span class="n">newFop</span><span class="p">(</span><span class="n">MimeConstants</span><span class="o">.</span><span class="n">MIME_PDF</span><span class="p">,</span> <span class="n">out</span><span class="p">);</span>
+<span class="c1">//Setup FOP</span>
+<span class="n">Fop</span> <span class="n">fop</span> <span class="o">=</span> <span class="n">fopFactory</span><span class="o">.</span><span class="na">newFop</span><span class="o">(</span><span class="n">MimeConstants</span><span class="o">.</span><span class="na">MIME_PDF</span><span class="o">,</span> <span class="n">out</span><span class="o">);</span>
-<span class="sr">//</span><span class="n">Setup</span> <span class="n">Transformer</span>
-<span class="n">Source</span> <span class="n">xsltSrc</span> <span class="o">=</span> <span class="k">new</span> <span class="n">StreamSource</span><span class="p">(</span><span class="k">new</span> <span class="n">File</span><span class="p">(</span><span class="s">"foo-xml2fo.xsl"</span><span class="p">));</span>
-<span class="n">Transformer</span> <span class="n">transformer</span> <span class="o">=</span> <span class="n">tFactory</span><span class="o">.</span><span class="n">newTransformer</span><span class="p">(</span><span class="n">xsltSrc</span><span class="p">);</span>
+<span class="c1">//Setup Transformer</span>
+<span class="n">Source</span> <span class="n">xsltSrc</span> <span class="o">=</span> <span class="k">new</span> <span class="n">StreamSource</span><span class="o">(</span><span class="k">new</span> <span class="n">File</span><span class="o">(</span><span class="s">"foo-xml2fo.xsl"</span><span class="o">));</span>
+<span class="n">Transformer</span> <span class="n">transformer</span> <span class="o">=</span> <span class="n">tFactory</span><span class="o">.</span><span class="na">newTransformer</span><span class="o">(</span><span class="n">xsltSrc</span><span class="o">);</span>
-<span class="sr">//</span><span class="n">Make</span> <span class="n">sure</span> <span class="n">the</span> <span class="n">XSL</span> <span class="n">transformation</span><span class="err">'</span><span class="n">s</span> <span class="n">result</span> <span class="n">is</span> <span class="n">piped</span> <span class="n">through</span> <span class="n">to</span> <span class="n">FOP</span>
-<span class="n">Result</span> <span class="n">res</span> <span class="o">=</span> <span class="k">new</span> <span class="n">SAXResult</span><span class="p">(</span><span class="n">fop</span><span class="o">.</span><span class="n">getDefaultHandler</span><span class="p">());</span>
+<span class="c1">//Make sure the XSL transformation's result is piped through to FOP</span>
+<span class="n">Result</span> <span class="n">res</span> <span class="o">=</span> <span class="k">new</span> <span class="n">SAXResult</span><span class="o">(</span><span class="n">fop</span><span class="o">.</span><span class="na">getDefaultHandler</span><span class="o">());</span>
-<span class="sr">//</span><span class="n">Setup</span> <span class="n">input</span>
-<span class="n">Source</span> <span class="n">src</span> <span class="o">=</span> <span class="k">new</span> <span class="n">StreamSource</span><span class="p">(</span><span class="k">new</span> <span class="n">File</span><span class="p">(</span><span class="s">"foo.xml"</span><span class="p">));</span>
+<span class="c1">//Setup input</span>
+<span class="n">Source</span> <span class="n">src</span> <span class="o">=</span> <span class="k">new</span> <span class="n">StreamSource</span><span class="o">(</span><span class="k">new</span> <span class="n">File</span><span class="o">(</span><span class="s">"foo.xml"</span><span class="o">));</span>
-<span class="sr">//</span><span class="n">Start</span> <span class="n">the</span> <span class="n">transformation</span> <span class="ow">and</span> <span class="n">rendering</span> <span class="n">process</span>
-<span class="n">transformer</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span><span class="n">src</span><span class="p">,</span> <span class="n">res</span><span class="p">);</span>
+<span class="c1">//Start the transformation and rendering process</span>
+<span class="n">transformer</span><span class="o">.</span><span class="na">transform</span><span class="o">(</span><span class="n">src</span><span class="o">,</span> <span class="n">res</span><span class="o">);</span>
-<span class="sr">//</span><span class="n">Prepare</span> <span class="n">response</span>
-<span class="n">response</span><span class="o">.</span><span class="n">setContentType</span><span class="p">(</span><span class="s">"application/pdf"</span><span class="p">);</span>
-<span class="n">response</span><span class="o">.</span><span class="n">setContentLength</span><span class="p">(</span><span class="n">out</span><span class="o">.</span><span class="n">size</span><span class="p">());</span>
+<span class="c1">//Prepare response</span>
+<span class="n">response</span><span class="o">.</span><span class="na">setContentType</span><span class="o">(</span><span class="s">"application/pdf"</span><span class="o">);</span>
+<span class="n">response</span><span class="o">.</span><span class="na">setContentLength</span><span class="o">(</span><span class="n">out</span><span class="o">.</span><span class="na">size</span><span class="o">());</span>
-<span class="sr">//</span><span class="n">Send</span> <span class="n">content</span> <span class="n">to</span> <span class="n">Browser</span>
-<span class="n">response</span><span class="o">.</span><span class="n">getOutputStream</span><span class="p">()</span><span class="o">.</span><span class="nb">write</span><span class="p">(</span><span class="n">out</span><span class="o">.</span><span class="n">toByteArray</span><span class="p">());</span>
-<span class="n">response</span><span class="o">.</span><span class="n">getOutputStream</span><span class="p">()</span><span class="o">.</span><span class="n">flush</span><span class="p">();</span>
+<span class="c1">//Send content to Browser</span>
+<span class="n">response</span><span class="o">.</span><span class="na">getOutputStream</span><span class="o">().</span><span class="na">write</span><span class="o">(</span><span class="n">out</span><span class="o">.</span><span class="na">toByteArray</span><span class="o">());</span>
+<span class="n">response</span><span class="o">.</span><span class="na">getOutputStream</span><span class="o">().</span><span class="na">flush</span><span class="o">();</span>
</pre></div>
@@ -432,7 +432,7 @@ The <code>Source</code> instance used ab
<p>There are several options to consider:</p>
<ul>
<li>
-<p>Instead of java.io.ByteArrayOutputStream consider using the ByteArrayOutputStream implementation from the <a href="http://commons.apache.org/io/">Jakarta Commons IO project</a> which allocates less memory. The full class name is: <code>org.apache.commons.io.output.ByteArrayOutputStream</code> </p>
+<p>Instead of java.io.ByteArrayOutputStream consider using the ByteArrayOutputStream implementation from the <a href="http://commons.apache.org/io/">Jakarta Commons IO project</a> which allocates less memory. The full class name is: <code>org.apache.commons.io.output.ByteArrayOutputStream</code></p>
</li>
<li>
<p>In certain cases it can help to write the generated PDF to a temporary file so you can quickly reuse the file. This is especially useful, if Internet Explorer calls the servlet multiple times with the same request or if you often generate equal PDFs.</p>
@@ -442,13 +442,13 @@ The <code>Source</code> instance used ab
<h3 id="accessing-resources-in-your-web-application-wzxhzdk23wzxhzdk24">Accessing resources in your web application <a id="uriresolver"></a></h3>
<p>Often, you will want to use resources (stylesheets, images etc.) which are bundled with your web application. FOP provides a URIResolver implementation that lets you access files via the Servlet's ServletContext. The class is called <code>org.apache.fop.servlet.ServletContextURIResolver</code> .</p>
<p>Here's how to set it up in your servlet. Instantiate a new instance in the servlet's init() method:</p>
-<div class="codehilite"><pre><span class="sr">/** URIResolver for use by this servlet */</span>
-<span class="n">protected</span> <span class="n">URIResolver</span> <span class="n">uriResolver</span><span class="p">;</span>
+<div class="codehilite"><pre><span class="cm">/** URIResolver for use by this servlet */</span>
+<span class="kd">protected</span> <span class="n">URIResolver</span> <span class="n">uriResolver</span><span class="o">;</span>
-<span class="n">public</span> <span class="n">void</span> <span class="n">init</span><span class="p">()</span> <span class="n">throws</span> <span class="n">ServletException</span> <span class="p">{</span>
- <span class="n">this</span><span class="o">.</span><span class="n">uriResolver</span> <span class="o">=</span> <span class="k">new</span> <span class="n">ServletContextURIResolver</span><span class="p">(</span><span class="n">getServletContext</span><span class="p">());</span>
- <span class="p">[</span><span class="o">..</span><span class="p">]</span>
-<span class="p">}</span>
+<span class="kd">public</span> <span class="kt">void</span> <span class="nf">init</span><span class="o">()</span> <span class="kd">throws</span> <span class="n">ServletException</span> <span class="o">{</span>
+ <span class="k">this</span><span class="o">.</span><span class="na">uriResolver</span> <span class="o">=</span> <span class="k">new</span> <span class="n">ServletContextURIResolver</span><span class="o">(</span><span class="n">getServletContext</span><span class="o">());</span>
+ <span class="o">[..]</span>
+<span class="o">}</span>
</pre></div>
@@ -466,23 +466,23 @@ The <code>Source</code> instance used ab
</li>
</ul>
<p>Here are some example snippets:</p>
-<div class="codehilite"><pre><span class="sr">//</span><span class="n">Setting</span> <span class="n">up</span> <span class="n">the</span> <span class="n">JAXP</span> <span class="n">TransformerFactory</span>
-<span class="n">this</span><span class="o">.</span><span class="n">transFactory</span> <span class="o">=</span> <span class="n">TransformerFactory</span><span class="o">.</span><span class="n">newInstance</span><span class="p">();</span>
-<span class="n">this</span><span class="o">.</span><span class="n">transFactory</span><span class="o">.</span><span class="n">setURIResolver</span><span class="p">(</span><span class="n">this</span><span class="o">.</span><span class="n">uriResolver</span><span class="p">);</span>
-
-<span class="p">[</span><span class="o">..</span><span class="p">]</span>
-
-<span class="sr">//</span><span class="n">Setting</span> <span class="n">up</span> <span class="n">the</span> <span class="n">FOP</span> <span class="n">factory</span>
-<span class="n">this</span><span class="o">.</span><span class="n">fopFactory</span> <span class="o">=</span> <span class="n">FopFactory</span><span class="o">.</span><span class="n">newInstance</span><span class="p">();</span>
-<span class="n">this</span><span class="o">.</span><span class="n">fopFactory</span><span class="o">.</span><span class="n">setURIResolver</span><span class="p">(</span><span class="n">this</span><span class="o">.</span><span class="n">uriResolver</span><span class="p">);</span>
-
-<span class="p">[</span><span class="o">..</span><span class="p">]</span>
-
-<span class="sr">//</span><span class="n">The</span> <span class="n">stylesheet</span> <span class="k">for</span> <span class="n">the</span> <span class="n">JAXP</span> <span class="n">Transfomer</span>
-<span class="n">Source</span> <span class="n">xsltSrc</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">uriResolver</span><span class="o">.</span><span class="n">resolve</span><span class="p">(</span>
- <span class="s">"servlet-context:/xslt/mystylesheet.xsl"</span><span class="p">,</span> <span class="n">null</span><span class="p">);</span>
-<span class="n">Transformer</span> <span class="n">transformer</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">transFactory</span><span class="o">.</span><span class="n">newTransformer</span><span class="p">(</span><span class="n">xsltSrc</span><span class="p">);</span>
-<span class="n">transformer</span><span class="o">.</span><span class="n">setURIResolver</span><span class="p">(</span><span class="n">this</span><span class="o">.</span><span class="n">uriResolver</span><span class="p">);</span>
+<div class="codehilite"><pre><span class="c1">//Setting up the JAXP TransformerFactory</span>
+<span class="k">this</span><span class="o">.</span><span class="na">transFactory</span> <span class="o">=</span> <span class="n">TransformerFactory</span><span class="o">.</span><span class="na">newInstance</span><span class="o">();</span>
+<span class="k">this</span><span class="o">.</span><span class="na">transFactory</span><span class="o">.</span><span class="na">setURIResolver</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="na">uriResolver</span><span class="o">);</span>
+
+<span class="o">[..]</span>
+
+<span class="c1">//Setting up the FOP factory</span>
+<span class="k">this</span><span class="o">.</span><span class="na">fopFactory</span> <span class="o">=</span> <span class="n">FopFactory</span><span class="o">.</span><span class="na">newInstance</span><span class="o">();</span>
+<span class="k">this</span><span class="o">.</span><span class="na">fopFactory</span><span class="o">.</span><span class="na">setURIResolver</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="na">uriResolver</span><span class="o">);</span>
+
+<span class="o">[..]</span>
+
+<span class="c1">//The stylesheet for the JAXP Transfomer</span>
+<span class="n">Source</span> <span class="n">xsltSrc</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="na">uriResolver</span><span class="o">.</span><span class="na">resolve</span><span class="o">(</span>
+ <span class="s">"servlet-context:/xslt/mystylesheet.xsl"</span><span class="o">,</span> <span class="kc">null</span><span class="o">);</span>
+<span class="n">Transformer</span> <span class="n">transformer</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="na">transFactory</span><span class="o">.</span><span class="na">newTransformer</span><span class="o">(</span><span class="n">xsltSrc</span><span class="o">);</span>
+<span class="n">transformer</span><span class="o">.</span><span class="na">setURIResolver</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="na">uriResolver</span><span class="o">);</span>
</pre></div>
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: commits-help@xmlgraphics.apache.org