KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > embedding > intermediate > ExampleConcat


1 /*
2  * Licensed to the Apache Software Foundation (ASF) under one or more
3  * contributor license agreements. See the NOTICE file distributed with
4  * this work for additional information regarding copyright ownership.
5  * The ASF licenses this file to You under the Apache License, Version 2.0
6  * (the "License"); you may not use this file except in compliance with
7  * the License. You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */

17
18 /* $Id: ExampleDOM2PDF.java 332791 2005-11-12 15:58:07Z jeremias $ */
19  
20 package embedding.intermediate;
21
22 import java.io.File JavaDoc;
23 import java.io.IOException JavaDoc;
24 import java.io.OutputStream JavaDoc;
25
26 import javax.xml.transform.Result JavaDoc;
27 import javax.xml.transform.Source JavaDoc;
28 import javax.xml.transform.Transformer JavaDoc;
29 import javax.xml.transform.TransformerException JavaDoc;
30 import javax.xml.transform.TransformerFactory JavaDoc;
31 import javax.xml.transform.sax.SAXResult JavaDoc;
32 import javax.xml.transform.stream.StreamSource JavaDoc;
33
34 import org.apache.fop.apps.FOPException;
35 import org.apache.fop.apps.FOUserAgent;
36 import org.apache.fop.apps.Fop;
37 import org.apache.fop.apps.FopFactory;
38 import org.apache.fop.apps.MimeConstants;
39 import org.apache.fop.area.AreaTreeModel;
40 import org.apache.fop.area.AreaTreeParser;
41 import org.apache.fop.area.RenderPagesModel;
42 import org.apache.fop.fonts.FontInfo;
43 import org.apache.fop.render.Renderer;
44 import org.apache.fop.render.xml.XMLRenderer;
45 import org.xml.sax.SAXException JavaDoc;
46
47 import embedding.ExampleObj2XML;
48 import embedding.model.ProjectMember;
49 import embedding.model.ProjectTeam;
50
51 /**
52  * Example for the intermediate format that demonstrates the concatenation of two documents
53  * renderered to the intermediate format. A single PDF file is generated from the two intermediate
54  * files.
55  */

56 public class ExampleConcat {
57
58     // configure fopFactory as desired
59
private FopFactory fopFactory = FopFactory.newInstance();
60
61     /**
62      * Creates a sample ProjectTeam instance for this demo.
63      * @return ProjectTeam the newly created ProjectTeam instance
64      */

65     public static ProjectTeam createAnotherProjectTeam() {
66         ProjectTeam team = new ProjectTeam();
67         team.setProjectName("The Dynamic Duo");
68         team.addMember(new ProjectMember(
69                 "Batman", "lead", "batman@heroes.org"));
70         team.addMember(new ProjectMember(
71                 "Robin", "aid", "robin@heroes.org"));
72         return team;
73     }
74
75     /**
76      * Converts an XSL-FO document to an intermediate file.
77      * @param src the source file
78      * @param xslt the stylesheet file
79      * @param intermediate the target intermediate file (area tree XML)
80      * @throws IOException In case of an I/O problem
81      * @throws FOPException In case of a FOP problem
82      * @throws TransformerException In case of a XSL transformation problem
83      */

84     public void convertToIntermediate(Source JavaDoc src, Source JavaDoc xslt, File JavaDoc intermediate)
85                 throws IOException JavaDoc, FOPException, TransformerException JavaDoc {
86         
87         //Create a user agent
88
FOUserAgent userAgent = fopFactory.newFOUserAgent();
89         
90         //Create an instance of the target renderer so the XMLRenderer can use its font setup
91
Renderer targetRenderer = userAgent.getRendererFactory().createRenderer(
92                 userAgent, MimeConstants.MIME_PDF);
93         
94         //Create the XMLRenderer to create the intermediate format (area tree XML)
95
XMLRenderer xmlRenderer = new XMLRenderer();
96         xmlRenderer.setUserAgent(userAgent);
97         
98         //Tell the XMLRenderer to mimic the target renderer
99
xmlRenderer.mimicRenderer(targetRenderer);
100         
101         //Make sure the prepared XMLRenderer is used
102
userAgent.setRendererOverride(xmlRenderer);
103         
104         // Setup output
105
OutputStream JavaDoc out = new java.io.FileOutputStream JavaDoc(intermediate);
106         out = new java.io.BufferedOutputStream JavaDoc(out);
107         try {
108             // Construct fop (the MIME type here is unimportant due to the override
109
// on the user agent)
110
Fop fop = fopFactory.newFop(null, userAgent, out);
111
112             // Setup XSLT
113
TransformerFactory JavaDoc factory = TransformerFactory.newInstance();
114             Transformer JavaDoc transformer;
115             if (xslt != null) {
116                 transformer = factory.newTransformer(xslt);
117             } else {
118                 transformer = factory.newTransformer();
119             }
120         
121             // Resulting SAX events (the generated FO) must be piped through to FOP
122
Result JavaDoc res = new SAXResult JavaDoc(fop.getDefaultHandler());
123
124             // Start XSLT transformation and FOP processing
125
transformer.transform(src, res);
126         } finally {
127             out.close();
128         }
129     }
130
131     /**
132      * Concatenates an array of intermediate files to a single PDF file.
133      * @param files the array of intermediate files (area tree XML)
134      * @param pdffile the target PDF file
135      * @throws IOException In case of an I/O problem
136      * @throws TransformerException In case of a XSL transformation problem
137      * @throws SAXException In case of an XML-related problem
138      */

139     public void concatToPDF(File JavaDoc[] files, File JavaDoc pdffile)
140             throws IOException JavaDoc, TransformerException JavaDoc, SAXException JavaDoc {
141         // Setup output
142
OutputStream JavaDoc out = new java.io.FileOutputStream JavaDoc(pdffile);
143         out = new java.io.BufferedOutputStream JavaDoc(out);
144         try {
145             //Setup fonts and user agent
146
FontInfo fontInfo = new FontInfo();
147             FOUserAgent userAgent = fopFactory.newFOUserAgent();
148
149             //Construct the AreaTreeModel that will received the individual pages
150
AreaTreeModel treeModel = new RenderPagesModel(userAgent,
151                     MimeConstants.MIME_PDF, fontInfo, out);
152             
153             //Iterate over all intermediate files
154
AreaTreeParser parser = new AreaTreeParser();
155             for (int i = 0; i < files.length; i++) {
156                 Source JavaDoc src = new StreamSource JavaDoc(files[i]);
157                 parser.parse(src, treeModel, userAgent);
158             }
159             
160             //Signal the end of the processing. The renderer can finalize the target document.
161
treeModel.endDocument();
162         } finally {
163             out.close();
164         }
165     }
166     
167     /**
168      * Main method.
169      * @param args command-line arguments
170      */

171     public static void main(String JavaDoc[] args) {
172         try {
173             System.out.println("FOP ExampleConcat\n");
174             
175             //Setup directories
176
File JavaDoc baseDir = new File JavaDoc(".");
177             File JavaDoc outDir = new File JavaDoc(baseDir, "out");
178             outDir.mkdirs();
179             
180             //Setup output file
181
File JavaDoc xsltfile = new File JavaDoc(baseDir, "xml/xslt/projectteam2fo.xsl");
182             File JavaDoc[] files = new File JavaDoc[] {
183                     new File JavaDoc(outDir, "team1.at.xml"),
184                     new File JavaDoc(outDir, "team2.at.xml")};
185             File JavaDoc pdffile = new File JavaDoc(outDir, "ResultConcat.pdf");
186             for (int i = 0; i < files.length; i++) {
187                 System.out.println("Intermediate file " + (i + 1) + ": "
188                         + files[i].getCanonicalPath());
189             }
190             System.out.println("PDF Output File: " + pdffile.getCanonicalPath());
191             System.out.println();
192             
193
194             ProjectTeam team1 = ExampleObj2XML.createSampleProjectTeam();
195             ProjectTeam team2 = createAnotherProjectTeam();
196             
197             ExampleConcat app = new ExampleConcat();
198             
199             //Create intermediate files
200
app.convertToIntermediate(
201                     team1.getSourceForProjectTeam(),
202                     new StreamSource JavaDoc(xsltfile), files[0]);
203             app.convertToIntermediate(
204                     team2.getSourceForProjectTeam(),
205                     new StreamSource JavaDoc(xsltfile), files[1]);
206             
207             //Concatenate the individual intermediate files to one document
208
app.concatToPDF(files, pdffile);
209             
210             System.out.println("Success!");
211             
212         } catch (Exception JavaDoc e) {
213             e.printStackTrace(System.err);
214             System.exit(-1);
215         }
216     }
217
218 }
219
Popular Tags