Dokumentenformate / Formatting Objects / FOP mit ANT

FOP mit ANT

FOP mit ANT

Um XML mit Hilfe von XSL nach PDF (png, rtf, tiff, png, txt, ps, pcl) transformieren zu können, ist zunächst eine Konvertierung in das Zwischenformat "FO" erforderlich.

Die Transformation von FO-Dateien in PDF, PS und anderen Ausgabeformaten ist keine Standard-ANT-Task; hierfür muß ein eigener ANT-Task angelegt werden, der jedoch in https://xmlgraphics.apache.org/fop/2.2/anttask.html gut beschrieben ist.

Hierzu müssen die erforderlichen jar-Dateien eingebunden und eine taskdef für fop erstellt werden. Nicht zwingend erforderlich, aber ungemein hilfreich ist die Deklaration von Properties (z.B. "fop_path"), die später an geeigneten Stellen wieder aufgerufen werden können


 <property name="fop_path" value="C:/wg/fop-2.2"/>
 <path id="run-classpath">
  <fileset dir="${fop_path}/lib">
   <include name="*.jar" />
  </fileset>
  <pathelement location="${fop_path}/build/fop.jar" />
 </path>
 <taskdef name="fop" 
          classname="org.apache.fop.tools.anttasks.Fop" 
          classpathref="run-classpath" />

Es gibt verschiedene Möglichkeiten, die Transformation aufzurufen:

"runAllFOP" transformiert alle FO-Dateien (z.B. "ABC.fo") in einem Verzeichnis in PDF-Dateien mit entsprechenden Namen ("ABC.pdf") in dasselbe Verzeichnis. Durch force="true" werden dabei eventuell schon vorhandene PDF-Dateien überschrieben.


 <target name="runAllFOP">
  <fop format="application/pdf"  
       outdir="${verzeichnis}" 
       messagelevel="warn" 
       relativebase="true" 
       throwexceptions="false" 
       force="true">
   <fileset dir="${verzeichnis}">
    <include name="**/*.fo"/>
   </fileset>
  </fop>
 </target>

Aufgerufen wird "runAllFOP" dann in einem anderen target, z.B. mit:


 <antcall target="runAllFOP">
  <param name="verzeichnis" 
         value="${fop_path}/examples/fo/graphics" />
 </antcall>

"runSingleFOP" transformiert eine einzelne FO-Datei in eine einzelne PDF-Datei. Hierbei habe ich unterschiedliche Dateinamen (für "fofile" und "outfile") vorgesehen, so daß eine flexiblere Definition möglich ist. Durch force="true" wird auch hier eine eventuell schon vorhandene PDF-Datei überschrieben.


 <target name="runSingleFOP">  
  <fop format="application/pdf" 
       fofile="${fodatei}" 
       outfile="${out}"
       messagelevel="warn" 
       force="true" 
       throwexceptions="false" />
 </target>

Aufgerufen wird "runSingleFOP" dann in einem anderen target, z.B. mit:


 <antcall target="runSingleFOP">
  <param name="fodatei" 
         value="${fop_path}/examples/fo/tables/borders.fo" />
  <param name="out" 
         value="${fop_path}/examples/fo/tables/borders.pdf" />
 </antcall>

wg / 2. Januar 2018



Fragen? Anmerkungen? Tips?

Bitte nehmen Sie Kontakt zu mir auf:

Vorname
Nachname
Mailadresse







Vielen Dank für Ihr Interesse an meiner Arbeit.


V.i.S.d.P.: Wilfried Grupe * Klus 6 * 37643 Negenborn

Mobil: 0151. 750 360 61 * eMail: info2018@wilfried-grupe.de

www.wilfried-grupe.de/FO1_1.html