dims 01/08/03 03:36:28 Modified: xdocs pdf-serializer.xml Log: Patch from John Morrison for fo2pdf doc. Revision Changes Path 1.5 +139 -20 xml-cocoon2/xdocs/pdf-serializer.xml Index: pdf-serializer.xml =================================================================== RCS file: /home/cvs/xml-cocoon2/xdocs/pdf-serializer.xml,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- pdf-serializer.xml 2001/07/19 14:20:23 1.4 +++ pdf-serializer.xml 2001/08/03 10:36:28 1.5 @@ -1,28 +1,147 @@ <?xml version="1.0"?> <!DOCTYPE document SYSTEM "dtd/document-v10.dtd"> <document> - <header> - <title>PDF Serializer</title> - <subtitle>in @doctitle@</subtitle> - <version>0.9</version> - <type>Technical document</type> - <authors> - <person name="Carsten Ziegeler" email="[EMAIL PROTECTED]"/> - </authors> - <abstract>This document describes the pdf serializer of @docname@.</abstract> - </header> - <body> - <s1 title="PDF Serializer"> - <p>The pdf serializer takes fo xml events as input. By using the + <header> + <title>PDF Serializer</title> + <subtitle>in @doctitle@</subtitle> + <version>0.9</version> + <type>Technical document</type> + <authors> + <person name="Carsten Ziegeler" email="[EMAIL PROTECTED]"/> + <person name="John Morrison" email="[EMAIL PROTECTED]"/> + </authors> + <abstract>This document describes the pdf serializer of @docname@.</abstract> + </header> + <body> + <s1 title="PDF Serializer"> + <p>The pdf serializer takes fo xml events as input. By using the FOP project it creates pdf out of the sax events.</p> <p>This serializer is optional and requires the fop package in the lib directory when building cocoon 2. However, the distribution includes this package already.</p> - <ul> - <li>Name : fo2pdf</li> - <li>Class: org.apache.cocoon.serialization.FOPSerializer</li> - <li>Cacheable: yes.</li> - </ul> - </s1> - </body> + <ul> + <li>Name : fo2pdf</li> + <li>Class: org.apache.cocoon.serialization.FOPSerializer</li> + <li>Cacheable: yes.</li> + </ul> + </s1> + <s1 title="FOP and Embedding Fonts"> + <p>Dynamically generating a pdf file (with embeded fonts) in @docname@ + is basically 8 steps:</p> + <ol> + <li>Create the font(s) metric file(s).</li> + <li>Create a custom configuration file for FOP (@docname@s PDF renderer) + which tells it what fonts are available and where to find them.</li> + <li>Create your xml (left as an exercise for the reader ;)</li> + <li>Create your xslt (again, up to you)</li> + <li>In the sitemap, tell the fo2pdf serializer where your custom + configuration file is located.</li> + <li>Add a match for your pdf (I'm sure you can do the rest...).</li> + <li>Start @docname@.</li> + <li>Request your pdf.</li> + </ol> + <p>Easy yeah? OK. Step-by-step...</p> + + <s2 title="Create the font(s) metric file(s)."> + <note>All java calls have nothing else in the + classpath OR ext directory also, instructions which have wrapped + should be entered as one single instruction.</note> + <p>The instruction to generate a font metric file is:</p> + <p>Windows:</p> + <source> + java -cp fop.jar;xerces.jar;xalan.jar;batik.jar org.apache.fop.fonts.apps.TTFReader %PATH_TO_FONT% %PATH_TO_METRICS_DIR%\%FONT_NAME%.xml + </source> + <p>Unix:</p> + <source> + java -cp fop.jar:xerces.jar:xalan.jar:batik.jar org.apache.fop.fonts.apps.TTFReader $PATH_TO_FONT $PATH_TO_METRICS_DIR/$FONT_NAME.xml + </source> + + <p>For the sake of this tutorial, I'm going to be using windows, + converting the Arial family of fonts and storing the metrics files in + the location <code>D:\fop-fonts</code>.</p> + <p>My ttf files are located in <code>C:\WINNT\Fonts</code>. If you are + running on linux/windows 9x/windows ME please alter as + appropriate.</p> + + <note>I normally use Cygwin; a unix shell + environment which runs on windows. If I slip some unix into here, + please excuse me (although I'd welcome the feedback...).</note> + + <s3 title="Generating the Arial metrics"> + <p>Start a command session (as appropriate to your env) then change + to @docname@ libs directory.</p> + <source>$ cd cocoon\lib</source> + <p>create the metrics directory (D:\fop-fonts)</p> + <source>$ mkdir d:\fop-fonts</source> + <p>create the metrics for arial.ttf, arialb.ttf, arialbi.ttf, + ariali.ttf</p> + <source> + $ java -cp fop.jar;xerces.jar;xalan.jar;batik.jar org.apache.fop.fonts.apps.TTFReader C:\WINNT\Fonts\arial.ttf D:\fop-fonts\arial.ttf.xml + $ java -cp fop.jar;xerces.jar;xalan.jar;batik.jar org.apache.fop.fonts.apps.TTFReader C:\WINNT\Fonts\arialb.ttf D:\fop-fonts\arialb.ttf.xml + $ java -cp fop.jar;xerces.jar;xalan.jar;batik.jar org.apache.fop.fonts.apps.TTFReader C:\WINNT\Fonts\arialbi.ttf D:\fop-fonts\arialbi.ttf.xml + $ java -cp fop.jar;xerces.jar;xalan.jar;batik.jar org.apache.fop.fonts.apps.TTFReader C:\WINNT\Fonts\ariali.ttf D:\fop-fonts\ariali.ttf.xml + </source> + <p>If everything went to plan, you should now have the metrics for + the Arial fonts in your fop-fonts directory.</p> + </s3> + </s2> + <s2 title="Create a custom configuration file"> + <p>I normally store this with the metrics file in the fop-fonts + directory (called config.xml (ensure there's not a font called + config ;)) although I fully qualify all the filenames just incase I + move it ;)</p> + <p>I also find it useful to retain the <code>.ttf</code> as it is also + possible to add other types of fonts (if you want to read the FOP + docs) and the ttf tells me where to locate the font.</p> + <source><![CDATA[ +<configuration> + <fonts> + <font metrics-file="D:/fop-fonts/arial.ttf.xml" kerning="yes" embed-file="C:/WINNT/Fonts/arial.ttf"> + <font-triplet name="Arial" style="normal" weight="normal"/> + <font-triplet name="ArialMT" style="normal" weight="normal"/> + </font> + <font metrics-file="D:/fop-fonts/arialb.ttf.xml" kerning="yes" embed-file="C:/WINNT/Fonts/arialb.ttf"> + <font-triplet name="Arial" style="normal" weight="bold"/> + <font-triplet name="ArialMT" style="normal" weight="bold"/> + </font> + <font metrics-file="D:/fop-fonts/arialbi.ttf.xml" kerning="yes" embed-file="C:/WINNT/Fonts/arialbi.ttf"> + <font-triplet name="Arial" style="italic" weight="bold"/> + <font-triplet name="ArialMT" style="italic" weight="bold"/> + </font> + <font metrics-file="D:/fop-fonts/ariali.ttf.xml" kerning="yes" embed-file="C:/WINNT/Fonts/ariali.ttf"> + <font-triplet name="Arial" style="italic" weight="normal"/> + <font-triplet name="ArialMT" style="italic" weight="normal"/> + </font> + </fonts> +</configuration> + ]]></source> + <p>There are other things you can add to this file, look at the FOP + documentation for further information.</p> + <p>If you are wondering why each font has been added twice it's to do + with the font lookup. If the font is specified as 'Arial' and the + weight is 'bold' then FOP searches for a + <code><![CDATA[<font-triplet/>]]></code> which matches then uses + the parent <code><![CDATA[<font/>]]></code> tag to get the actual + font information. If the font is specified as 'ArialMT' (it's proper + name) it will still work. Think of it as an alias capability.</p> + </s2> + <s2 title="Sitemap and fo2pdf serializer."> + <p>All that remains is to tell the serializer where your config file is + located. Find the line in your sitemap which looks + like:</p> + <source><![CDATA[ +<map:serializer name="fo2pdf" src="org.apache.cocoon.serialization.FOPSerializer" mime-type="application/pdf"/> + ]]></source> + <p>and replace it with...</p> + <source><![CDATA[ +<map:serializer name="fo2pdf" src="org.apache.cocoon.serialization.FOPSerializer" mime-type="application/pdf"> + <user-config src="D:/fop-fonts/config.xml"/> +</map:serializer> + ]]></source> + </s2> + <p>And that's it. Oh, one final thing to remember: the cache isn't aware + of your config file. <strong>Always</strong> delete your cache-dir + after modifying your config file.</p> + </s1> + </body> </document> ---------------------------------------------------------------------- In case of troubles, e-mail: [EMAIL PROTECTED] To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]