bugfix in expression parsing
[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.*;
35 import javax.servlet.http.*;
36
37 import mircoders.global.*;
38
39 import org.apache.fop.apps.* ;
40 import org.xml.sax.InputSource;
41 import org.xml.sax.XMLReader;
42 import org.apache.log.*;
43
44 public class PDFUtil {
45     
46   public static void makePDF(String foFilePath,Object pdfDestination,String stylesheetPath) throws Exception
47   {
48     try{
49       Driver driver = new Driver();
50       
51       //stupid logging that fop wants to use, needs to be changed
52       Hierarchy hierarchy = Hierarchy.getDefaultHierarchy();
53       Logger fopLog=null;
54       fopLog = hierarchy.getLoggerFor("fop");
55       fopLog.setPriority(Priority.WARN);
56       driver.setLogger(fopLog);
57       
58       driver.setRenderer(Driver.RENDER_PDF);
59   
60       File foFile=new File(foFilePath);
61       
62       String html2foStyleSheetPath;
63       if (stylesheetPath == "FROMCONFIG"){
64         html2foStyleSheetPath=MirGlobal.getConfigProperty("Home") 
65           + MirGlobal.getConfigProperty("HTMLTemplateProcessor.Dir")
66           + "/" 
67           + MirGlobal.getConfigProperty("Producer.PrintableContent.html2foStyleSheetName"); 
68       }
69       else {
70           html2foStyleSheetPath=stylesheetPath;
71       }
72       File html2foStyleSheet=new File(html2foStyleSheetPath);
73       InputHandler inputHandler =
74         new XSLTInputHandler(foFile, html2foStyleSheet);
75       XMLReader parser = inputHandler.getParser();
76       
77       if (pdfDestination instanceof String) {
78         String filePath = (String) pdfDestination;
79         driver.setOutputStream(new FileOutputStream(filePath));
80         driver.render(parser, inputHandler.getInputSource());
81       }
82       else if (pdfDestination instanceof HttpServletResponse){
83         HttpServletResponse res = (HttpServletResponse) pdfDestination; 
84         ByteArrayOutputStream out = new ByteArrayOutputStream();
85         driver.setOutputStream(out);
86         res.setContentType("application/pdf");
87         
88         driver.render(parser, inputHandler.getInputSource());
89         
90         byte[] content = out.toByteArray();
91         res.setContentLength(content.length);
92         res.getOutputStream().write(content);
93         res.getOutputStream().flush();
94       }
95       else {
96         throw new Exception("I'm sorry but I don't know how to output a pdf to an object of type" + pdfDestination.getClass().getName());
97       }
98     }
99   
100     catch (Exception ex){
101         throw(ex);
102     }
103   }
104 }
105
106
107