/**
*
*/
package preprocessing;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.List;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.sax.SAXResult;
import javax.xml.transform.stream.StreamSource;
import org.apache.avalon.framework.logger.ConsoleLogger;
import org.apache.avalon.framework.logger.Logger;
import org.apache.fop.apps.Driver;
import org.apache.fop.messaging.MessageHandler;
import org.apache.log4j.DailyRollingFileAppender;
import org.apache.log4j.Level;
import org.apache.log4j.PatternLayout;
import core.DirectoryScanner;
import core.FileExtension;
/**
*
* Erstellt aus allen in dem Verzeichnis angegeben xml-Dateien mit der xsl-Vorlage ein pdf-Dokument
*
*
* @author Jan
* @see StartPdfCreator
* @see TestPdfCreator
*/
public class PdfCreator {
private List<File> listFiles;
private Driver driver;
private File xslFile;
private org.apache.log4j.Logger log;
public PdfCreator(String directory, String xslFile){
this.setUpLogger();
this.log.info("Lade Dateien des Verzeichnis \"" + directory + "\".");
this.getFilesToConvert(new File(directory));
this.log.info("Dateien des Verzeichnis geladen.");
this.xslFile = new File(xslFile);
this.driver = new Driver();
}
private void getFilesToConvert(File directory){
DirectoryScanner scanner = new DirectoryScanner(FileExtension.XML);
this.listFiles = scanner.getFilesFromDirectory(directory);
}
private void setUpLogger() {
try {
this.log = org.apache.log4j.Logger.getRootLogger();
PatternLayout layout = new PatternLayout( "%d{ISO8601} %-5p [%t] %c: %m%n" );
DailyRollingFileAppender fileAppender =
new DailyRollingFileAppender( layout, "PdfCreator.log", "'.'yyyy-MM-dd_HH-mm" );
this.log.addAppender(fileAppender);
this.log.setLevel(Level.ALL);
} catch (IOException e) {
e.printStackTrace();
}
}
public void create() {
// 09.11.2006 - 07:35:09 Jan: Logger
Logger logger = new ConsoleLogger(ConsoleLogger.LEVEL_DEBUG);
this.driver.setLogger(logger);
MessageHandler.setScreenLogger(logger);
// 09.11.2006 - 08:35:34 Jan: Ausgabe als PDF
this.driver.setRenderer(Driver.RENDER_PDF);
// 09.11.2006 - 07:36:40 Jan: Transformer Factory
TransformerFactory factory = TransformerFactory.newInstance();
// 09.11.2006 - 08:33:47 Jan: Transformieren der XSL
Transformer transformer;
try {
transformer = factory.newTransformer(new StreamSource(this.xslFile));
for (File file : this.listFiles) {
try {
String fileName = file.getName().replace("xml", "pdf");
this.log.info("Verarbeite " + file.getAbsolutePath() + " zu PDF.");
OutputStream out = new FileOutputStream(file.getParent() + "/" + fileName);
this.driver.setOutputStream(out);
Source source = new StreamSource(file);
Result result = new SAXResult(this.driver.getContentHandler());
transformer.transform(source, result);
this.log.info("Verarbeitung von " + file.getAbsolutePath() + " erfolgreich.");
out.close();
} catch (TransformerException e) {
e.printStackTrace();
this.log.error("Verarbeitung von " + file.getAbsolutePath() + " fehlgeschlagen.");
this.log.error(e.getMessage());
} catch (FileNotFoundException e) {
e.printStackTrace();
this.log.error("Verarbeitung von " + file.getAbsolutePath() + " fehlgeschlagen.");
this.log.error(e.getMessage());
} catch (IOException e) {
e.printStackTrace();
this.log.error("Verarbeitung von " + file.getAbsolutePath() + " fehlgeschlagen.");
this.log.error(e.getMessage());
}
}
this.log.info("Verarbeitung der XML Dateien abgeschlossen.");
} catch (TransformerConfigurationException e) {
e.printStackTrace();
this.log.fatal(e.getMessage());
this.log.fatal("Die XSL Vorlage konnte nicht kompiliert werden. Bitte überprüfen!");
}
}
}