some small changes delting unneeded imports. two new exceptions in mir.storage. usage...
[mir.git] / source / mir / misc / PDFUtil.java
1 /*
2  * Copyright (C) 2001, 2002  The Mir-coders group
3  *
4  * This file is part of Mir.
5  *
6  * Mir is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * Mir is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with Mir; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  *
20  * In addition, as a special exception, The Mir-coders gives permission to link
21  * the code of this program with the com.oreilly.servlet library, any library
22  * licensed under the Apache Software License, The Sun (tm) Java Advanced
23  * Imaging library (JAI), The Sun JIMI library (or with modified versions of
24  * the above that use the same license as the above), and distribute linked
25  * combinations including the two.  You must obey the GNU General Public
26  * License in all respects for all of the code used other than the above
27  * mentioned libraries.  If you modify this file, you may extend this exception
28  * to your version of the file, but you are not obligated to do so.  If you do
29  * not wish to do so, delete this exception statement from your version.
30  */
31
32 package mir.misc;
33
34 import java.io.ByteArrayOutputStream;
35 import java.io.File;
36 import java.io.FileOutputStream;
37
38 import javax.servlet.http.HttpServletResponse;
39
40 import mircoders.global.MirGlobal;
41
42 import org.apache.fop.apps.Driver;
43 import org.apache.fop.apps.InputHandler;
44 import org.apache.fop.apps.XSLTInputHandler;
45 import org.apache.log.Hierarchy;
46 import org.apache.log.Logger;
47 import org.apache.log.Priority;
48 import org.xml.sax.XMLReader;
49
50 public class PDFUtil {
51     
52   public static void makePDF(String foFilePath,Object pdfDestination,String stylesheetPath) throws Exception
53   {
54     try{
55       Driver driver = new Driver();
56       
57       //stupid logging that fop wants to use, needs to be changed
58       Hierarchy hierarchy = Hierarchy.getDefaultHierarchy();
59       Logger fopLog=null;
60       fopLog = hierarchy.getLoggerFor("fop");
61       fopLog.setPriority(Priority.WARN);
62       driver.setLogger(fopLog);
63       
64       driver.setRenderer(Driver.RENDER_PDF);
65   
66       File foFile=new File(foFilePath);
67       
68       String html2foStyleSheetPath;
69       if (stylesheetPath == "FROMCONFIG"){
70         html2foStyleSheetPath=MirGlobal.getConfigProperty("Home") 
71           + MirGlobal.getConfigProperty("HTMLTemplateProcessor.Dir")
72           + "/" 
73           + MirGlobal.getConfigProperty("Producer.PrintableContent.html2foStyleSheetName"); 
74       }
75       else {
76           html2foStyleSheetPath=stylesheetPath;
77       }
78       File html2foStyleSheet=new File(html2foStyleSheetPath);
79       InputHandler inputHandler =
80         new XSLTInputHandler(foFile, html2foStyleSheet);
81       XMLReader parser = inputHandler.getParser();
82       
83       if (pdfDestination instanceof String) {
84         String filePath = (String) pdfDestination;
85         driver.setOutputStream(new FileOutputStream(filePath));
86         driver.render(parser, inputHandler.getInputSource());
87       }
88       else if (pdfDestination instanceof HttpServletResponse){
89         HttpServletResponse res = (HttpServletResponse) pdfDestination; 
90         ByteArrayOutputStream out = new ByteArrayOutputStream();
91         driver.setOutputStream(out);
92         res.setContentType("application/pdf");
93         
94         driver.render(parser, inputHandler.getInputSource());
95         
96         byte[] content = out.toByteArray();
97         res.setContentLength(content.length);
98         res.getOutputStream().write(content);
99         res.getOutputStream().flush();
100       }
101       else {
102         throw new Exception("I'm sorry but I don't know how to output a pdf to an object of type" + pdfDestination.getClass().getName());
103       }
104     }
105   
106     catch (Exception ex){
107         throw(ex);
108     }
109   }
110 }
111
112
113