Mir goes GPL
[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) 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=MirGlobal.getConfigProperty("Home") 
63           + MirGlobal.getConfigProperty("HTMLTemplateProcessor.Dir")
64           + "/" 
65           + MirGlobal.getConfigProperty("Producer.PrintableContent.html2foStyleSheetName"); 
66       File html2foStyleSheet=new File(html2foStyleSheetPath);
67       InputHandler inputHandler =
68           new XSLTInputHandler(foFile, html2foStyleSheet);
69       XMLReader parser = inputHandler.getParser();
70       
71       if (pdfDestination instanceof String) {
72         String filePath = (String) pdfDestination;
73         driver.setOutputStream(new FileOutputStream(filePath));
74         driver.render(parser, inputHandler.getInputSource());
75       }
76       else if (pdfDestination instanceof HttpServletResponse){
77         HttpServletResponse res = (HttpServletResponse) pdfDestination; 
78         ByteArrayOutputStream out = new ByteArrayOutputStream();
79         driver.setOutputStream(out);
80         res.setContentType("application/pdf");
81         
82         driver.render(parser, inputHandler.getInputSource());
83         
84         byte[] content = out.toByteArray();
85         res.setContentLength(content.length);
86         res.getOutputStream().write(content);
87         res.getOutputStream().flush();
88       }
89       else {
90         throw new Exception("I'm sorry but I don't know how to output a pdf to an object of type" + pdfDestination.getClass().getName());
91       }
92     }
93   
94     catch (Exception ex){
95         throw(ex);
96     }
97   }
98 }
99
100
101