changed package names to be consistent with other cdmlib projects
[cdmlib.git] / cdmlib-print / src / main / java / eu / etaxonomy / cdm / print / out / pdf / PdfOutputModule.java
1 // $Id$
2 /**
3 * Copyright (C) 2007 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
6 *
7 * The contents of this file are subject to the Mozilla Public License Version 1.1
8 * See LICENSE.TXT at the top of this package for the full license terms.
9 */
10
11 package eu.etaxonomy.cdm.print.out.pdf;
12
13 import java.io.File;
14 import java.io.FileOutputStream;
15 import java.io.InputStream;
16 import java.io.OutputStream;
17
18 import javax.xml.transform.Result;
19 import javax.xml.transform.Transformer;
20 import javax.xml.transform.TransformerFactory;
21 import javax.xml.transform.sax.SAXResult;
22 import javax.xml.transform.stream.StreamSource;
23
24 import org.apache.fop.apps.FOUserAgent;
25 import org.apache.fop.apps.Fop;
26 import org.apache.fop.apps.FopFactory;
27 import org.apache.fop.apps.MimeConstants;
28 import org.apache.log4j.Logger;
29 import org.jdom.Document;
30 import org.jdom.transform.JDOMSource;
31
32 import eu.etaxonomy.cdm.print.NotificationMediator;
33 import eu.etaxonomy.cdm.print.out.AbstractPublishOutputModule;
34
35 /**
36 * This output module will create a <a href="http://www.adobe.com/products/acrobat/adobepdf.html">PDF</a> document
37 * with a predefined output for quick printing.
38 *
39 * @author n.hoffmann
40 * @created Jul 20, 2010
41 * @version 1.0
42 */
43 public class PdfOutputModule extends AbstractPublishOutputModule {
44 private static final Logger logger = Logger
45 .getLogger(PdfOutputModule.class);
46
47 public static String STYLESHEET_RESOURCE_DEFAULT = "/eu/etaxonomy/printpublisher/out/pdf/cdmToPdf.xsl";
48
49 /*
50 * (non-Javadoc)
51 * @see eu.etaxonomy.printpublisher.out.IPublishOutputModule#output(org.jdom.Document, java.io.File, eu.etaxonomy.printpublisher.NotificationMediator)
52 */
53 public void output(Document document, File exportFolder, NotificationMediator notificationMediator) {
54
55 super.output(document, exportFolder, notificationMediator);
56
57 try{
58
59 // configure fopFactory as desired
60 FopFactory fopFactory = FopFactory.newInstance();
61
62 FOUserAgent foUserAgent = fopFactory.newFOUserAgent();
63 // configure foUserAgent as desired
64
65
66 // Setup output
67 String filePath = getFilePath(exportFolder);
68 OutputStream out = new FileOutputStream(filePath);
69 out = new java.io.BufferedOutputStream(out);
70
71 try{
72
73 // Construct fop with desired output format
74 Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent, out);
75
76 // Setup XSLT
77 InputStream xslt = PdfOutputModule.class.getResourceAsStream(STYLESHEET_RESOURCE_DEFAULT);
78 TransformerFactory factory = TransformerFactory.newInstance();
79 Transformer transformer = factory.newTransformer(new StreamSource(xslt));
80
81 // Setup input for XSLT transformation
82 JDOMSource source = new JDOMSource(document);
83
84 // Resulting SAX events (the generated FO) must be piped through to FOP
85 Result result = new SAXResult(fop.getDefaultHandler());
86
87 // Start XSLT transformation and FOP processing
88 transformer.transform(source, result);
89 } finally {
90 out.close();
91 logger.info("PDF file created: " + filePath);
92 }
93
94 }catch (Exception e) {
95 logger.error("Could not generate document", e);
96 }
97 }
98
99 public String getOutputFileSuffix() {
100 return "pdf";
101 }
102 }