{"id":336,"date":"2009-06-01T14:00:00","date_gmt":"2009-06-01T14:00:00","guid":{"rendered":"http:\/\/www.tutego.de\/blog\/javainsel\/?p=336"},"modified":"2009-06-01T14:00:00","modified_gmt":"2009-06-01T14:00:00","slug":"openoffice-draw-xforms-export-itext-pdf","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2009\/06\/openoffice-draw-xforms-export-itext-pdf\/","title":{"rendered":"OpenOffice Draw + XForms Export + iText = PDF"},"content":{"rendered":"<p>F\u00fcr unseren Seminarbetrieb erstellen wir nach dem Seminarabschluss aus einer XML-Datei die Rechnung und Zertifikate f\u00fcr den Kunden. Die Vorlagen sind in OpenOffice verfasst und k\u00f6nnen ohne Probleme ver\u00e4ndert werden. Ein gro\u00dfer Vorteil ist weiterhin, dass OO einen PDF Exporter mitbringt.<\/p>\n<p>Der Nachteil der L\u00f6sung, OpenOffice f\u00fcr die PDF-Erzeugung fernzusteuern ist, dass es sehr schwergewichtig. OO muss installiert und gestartet werden. Das ist auf einem Server, etwa einem einfachen Servlet-Container oder sogar der Google App Engine for Java nat\u00fcrlich nicht denkbar.<\/p>\n<p>Ein anderer Weg ist daher, zwar weiterhin OpenOffice f\u00fcr die Erstellung einer Vorlage zu verwenden, aber beim PDF-Export anders vorzugehen. Die L\u00f6sungen k\u00f6nnen <a href=\"http:\/\/en.wikipedia.org\/wiki\/Portable_Document_Format#Interactive_elements\">Acrobat Forms (Acroforms)<\/a> bieten, also eigentlich interaktive Felder, die man sp\u00e4ter \u00fcber ein Programm f\u00fcllen kann. Im ersten Schritt erzeugt man daher mit OpenOffice Draw eine Formular. (Das wird etwa beschrieben unter <a title=\"http:\/\/www.devx.com\/opensource\/Article\/38178\/\" href=\"http:\/\/www.devx.com\/opensource\/Article\/38178\/\">http:\/\/www.devx.com\/opensource\/Article\/38178\/<\/a>.) Dann exportiert man das Dokument in PDF unter Erhaltung der Formulareigenschaften. Dieses PDF l\u00e4sst sich nun mit iText auslesen, die Formularzellen f\u00fcllen und wieder als PDF schreiben. Dabei kann die \u201cFormulareigenschaft\u201d wegfallen, dass man sp\u00e4ter bei dem PDF-Dokument nichts mehr von interaktiven Elementen sieht.<\/p>\n<p>import java.io.FileOutputStream;<br \/>import com.lowagie.text.pdf.*;<\/p>\n<p>public class FillInPdfForm<br \/>{<br \/>&nbsp; public static void main(String[] args) throws Exception<br \/>&nbsp; {<br \/>&nbsp;&nbsp;&nbsp; PdfReader reader = new PdfReader(&#8222;c:\/rein.pdf&#8220;);<br \/>&nbsp;&nbsp;&nbsp; PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(&#8222;c:\/raus.pdf&#8220;));<br \/>&nbsp;&nbsp;&nbsp; BaseFont font = BaseFont.createFont(&#8222;c:\\\\windows\\\\fonts\\\\Calibri.ttf&#8220;, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);<br \/>&nbsp;&nbsp;&nbsp; AcroFields form = stamper.getAcroFields();<br \/>&nbsp;&nbsp;&nbsp; for( Object o : reader.getAcroForm().getFields() )<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; form.setFieldProperty( ((PRAcroForm.FieldInformation) o).getName(), &#8222;textfont&#8220;, font, null);<br \/>&nbsp;&nbsp;&nbsp; form.setField(&#8222;name&#8220;, &#8222;Christian Ullenboom&#8220;);<br \/>&nbsp;&nbsp;&nbsp; form.setField(&#8222;content&#8220;, &#8222;Brav sein\\nLieb sein&#8220;);<br \/>&nbsp;&nbsp;&nbsp; stamper.setFormFlattening(true);<br \/>&nbsp;&nbsp;&nbsp; stamper.close();<br \/>&nbsp; }<br \/>} <\/p>\n<p>Etwas l\u00e4stig ist, dass beim Ausf\u00fcllen der in OO zugewiesen Font fl\u00f6ten geht. Daher muss man diesen neu zuweisen. Sonst ist es Arial\/Helvetica.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>F\u00fcr unseren Seminarbetrieb erstellen wir nach dem Seminarabschluss aus einer XML-Datei die Rechnung und Zertifikate f\u00fcr den Kunden. Die Vorlagen sind in OpenOffice verfasst und k\u00f6nnen ohne Probleme ver\u00e4ndert werden. Ein gro\u00dfer Vorteil ist weiterhin, dass OO einen PDF Exporter mitbringt. Der Nachteil der L\u00f6sung, OpenOffice f\u00fcr die PDF-Erzeugung fernzusteuern ist, dass es sehr schwergewichtig. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[4],"tags":[],"class_list":["post-336","post","type-post","status-publish","format-standard","hentry","category-open-source"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/336","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/comments?post=336"}],"version-history":[{"count":0,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/336\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=336"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=336"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=336"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}