Project

General

Profile

Download (3.26 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2007 EDIT
3
* European Distributed Institute of Taxonomy
4
* http://www.e-taxonomy.eu
5
*
6
* The contents of this file are subject to the Mozilla Public License Version 1.1
7
* See LICENSE.TXT at the top of this package for the full license terms.
8
*/
9

    
10
package eu.etaxonomy.cdm.print.out.pdf;
11

    
12
import java.io.File;
13
import java.io.FileOutputStream;
14
import java.io.InputStream;
15
import java.io.OutputStream;
16

    
17
import javax.xml.transform.Result;
18
import javax.xml.transform.Transformer;
19
import javax.xml.transform.TransformerFactory;
20
import javax.xml.transform.sax.SAXResult;
21
import javax.xml.transform.stream.StreamSource;
22

    
23
import org.apache.fop.apps.FOUserAgent;
24
import org.apache.fop.apps.Fop;
25
import org.apache.fop.apps.FopFactory;
26
import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
27
import org.jdom.Document;
28
import org.jdom.transform.JDOMSource;
29

    
30
import eu.etaxonomy.cdm.common.monitor.IProgressMonitor;
31
import eu.etaxonomy.cdm.print.out.PublishOutputModuleBase;
32

    
33
/**
34
 * This output module will create a <a href="http://www.adobe.com/products/acrobat/adobepdf.html">PDF</a> document
35
 * with a predefined output for quick printing.
36
 *
37
 * @author n.hoffmann
38
 * @since Jul 20, 2010
39
 */
40
public class PdfOutputModule extends PublishOutputModuleBase {
41

    
42
	private static final Logger logger = LogManager.getLogger(PdfOutputModule.class);
43

    
44
	public static String STYLESHEET_RESOURCE_DEFAULT = "/stylesheets/pdf/cdmToPdf.xsl";
45

    
46
	@Override
47
    public void output(Document document, File exportFolder, IProgressMonitor progressMonitor) {
48

    
49
		super.output(document, exportFolder, progressMonitor);
50

    
51
		try{
52

    
53
			 // configure fopFactory as desired
54
		    File dummyFile = null;  //FIXME
55
			FopFactory fopFactory = FopFactory.newInstance(dummyFile);  //was FopFactory.newInstance() before switching to FOP v2.5
56

    
57
			FOUserAgent foUserAgent = fopFactory.newFOUserAgent();
58
			 // configure foUserAgent as desired
59

    
60
			// Setup output
61
			String filePath = getFilePath(exportFolder);
62
			OutputStream out = new FileOutputStream(filePath);
63
			out = new java.io.BufferedOutputStream(out);
64

    
65
			try{
66

    
67
				// Construct fop with desired output format
68
	            Fop fop = fopFactory.newFop(org.apache.xmlgraphics.util.MimeConstants.MIME_PDF, foUserAgent, out);
69

    
70
	            // Setup XSLT
71
	            InputStream xslt = getXsltInputStream();
72
	            TransformerFactory factory = TransformerFactory.newInstance();
73
	            Transformer transformer = factory.newTransformer(new StreamSource(xslt));
74

    
75
	            // Setup input for XSLT transformation
76
	            JDOMSource source = new JDOMSource(document);
77

    
78
	            // Resulting SAX events (the generated FO) must be piped through to FOP
79
	            Result result = new SAXResult(fop.getDefaultHandler());
80

    
81
	            // Start XSLT transformation and FOP processing
82
	            transformer.transform(source, result);
83
            } finally {
84
                out.close();
85
                logger.info("PDF file created: " + filePath);
86
            }
87

    
88
		}catch (Exception e) {
89
			logger.error("Could not generate document", e);
90
		}
91
	}
92

    
93
	@Override
94
    public String getOutputFileSuffix() {
95
		return "pdf";
96
	}
97

    
98
	@Override
99
    public InputStream getDefaultXsltInputStream(){
100
		return PdfOutputModule.class.getResourceAsStream(STYLESHEET_RESOURCE_DEFAULT);
101
	}
102
}
    (1-1/1)