Project

General

Profile

Download (3.29 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.fop.apps.MimeConstants;
27
import org.apache.log4j.Logger;
28
import org.jdom.Document;
29
import org.jdom.transform.JDOMSource;
30

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

    
34
/**
35
 * This output module will create a <a href="http://www.adobe.com/products/acrobat/adobepdf.html">PDF</a> document 
36
 * with a predefined output for quick printing.
37
 * 
38
 * @author n.hoffmann
39
 * @since Jul 20, 2010
40
 * @version 1.0
41
 */
42
public class PdfOutputModule extends PublishOutputModuleBase {
43
	private static final Logger logger = Logger
44
			.getLogger(PdfOutputModule.class);
45
	
46
	public static String STYLESHEET_RESOURCE_DEFAULT = "/stylesheets/pdf/cdmToPdf.xsl";
47
		
48
	/*
49
	 * (non-Javadoc)
50
	 * @see eu.etaxonomy.printpublisher.out.IPublishOutputModule#output(org.jdom.Document, java.io.File, eu.etaxonomy.printpublisher.NotificationMediator)
51
	 */
52
	public void output(Document document, File exportFolder, IProgressMonitor progressMonitor) {
53
		
54
		super.output(document, exportFolder, progressMonitor);
55
		
56
		try{
57
		
58
			 // configure fopFactory as desired
59
			FopFactory fopFactory = FopFactory.newInstance();
60
				
61
			FOUserAgent foUserAgent = fopFactory.newFOUserAgent();
62
			 // configure foUserAgent as desired
63
		
64
			// Setup output
65
			String filePath = getFilePath(exportFolder);
66
			OutputStream out = new FileOutputStream(filePath);
67
			out = new java.io.BufferedOutputStream(out);
68
		
69
			try{
70
			
71
				// Construct fop with desired output format
72
	            Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent, out);
73

    
74
	            // Setup XSLT
75
	            InputStream xslt = getXsltInputStream();
76
	            TransformerFactory factory = TransformerFactory.newInstance();
77
	            Transformer transformer = factory.newTransformer(new StreamSource(xslt));
78

    
79
	            // Setup input for XSLT transformation
80
	            JDOMSource source = new JDOMSource(document);
81

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

    
85
	            // Start XSLT transformation and FOP processing
86
	            transformer.transform(source, result);
87
            } finally {
88
                out.close();
89
                logger.info("PDF file created: " + filePath);
90
            }
91
			
92
		}catch (Exception e) {
93
			logger.error("Could not generate document", e);
94
		}
95
	}
96

    
97
	public String getOutputFileSuffix() {
98
		return "pdf";
99
	}
100
	
101
	public InputStream getDefaultXsltInputStream(){
102
		return PdfOutputModule.class.getResourceAsStream(STYLESHEET_RESOURCE_DEFAULT);
103
	}
104
}
    (1-1/1)