1 17 18 19 20 package embedding; 21 22 import java.io.BufferedOutputStream ; 24 import java.io.BufferedReader ; 25 import java.io.File ; 26 import java.io.FileOutputStream ; 27 import java.io.IOException ; 28 import java.io.OutputStream ; 29 30 import javax.xml.transform.Transformer ; 32 import javax.xml.transform.TransformerException ; 33 import javax.xml.transform.TransformerFactory ; 34 import javax.xml.transform.Source ; 35 import javax.xml.transform.Result ; 36 import javax.xml.transform.stream.StreamSource ; 37 import javax.xml.transform.sax.SAXResult ; 38 39 import org.apache.commons.io.IOUtils; 41 import org.apache.fop.apps.FOUserAgent; 42 import org.apache.fop.apps.Fop; 43 import org.apache.fop.apps.FOPException; 44 import org.apache.fop.apps.FopFactory; 45 import org.apache.fop.apps.FormattingResults; 46 import org.apache.fop.apps.MimeConstants; 47 import org.apache.fop.apps.PageSequenceResults; 48 49 55 public class MultipleFO2PDF { 56 57 private FopFactory fopFactory = FopFactory.newInstance(); 59 60 private TransformerFactory factory = TransformerFactory.newInstance(); 62 63 72 public FormattingResults convertFO2PDF(File fo, File pdf) 73 throws TransformerException , IOException , FOPException { 74 75 OutputStream out = null; 76 Fop fop; 77 78 try { 79 FOUserAgent foUserAgent = fopFactory.newFOUserAgent(); 80 82 out = new FileOutputStream (pdf); 85 out = new BufferedOutputStream (out); 86 87 fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent, out); 89 90 Transformer transformer = factory.newTransformer(); 93 Source src = new StreamSource (fo); 95 96 Result res = new SAXResult (fop.getDefaultHandler()); 98 99 transformer.transform(src, res); 101 } finally { 102 IOUtils.closeQuietly(out); 103 } 104 105 return fop.getResults(); 106 } 107 108 112 public void listen() { 113 114 File baseDir = new File ("."); 116 File outDir = new File (baseDir, "out"); 117 outDir.mkdirs(); 118 BufferedReader in = new BufferedReader (new java.io.InputStreamReader (System.in)); 119 120 while (true) { 121 try { 122 System.out.print("Input XSL-FO file ('quit' to stop): "); 124 String foname = in.readLine(); 125 if (foname == null) { 126 System.out.println("Null input, quitting"); 127 return; 128 } 129 foname.trim(); 130 if (foname.equals("quit")) { 131 System.out.println("Quitting"); 132 return; 133 } 134 File fofile = new File (baseDir, foname); 135 String pdfname = foname; 136 int p = foname.lastIndexOf('.'); 137 pdfname = foname.substring(0, p) + ".pdf"; 138 File pdffile = new File (outDir, pdfname); 139 140 System.out.print("Transforming " + fofile + " to PDF file " + pdffile + "..."); 142 FormattingResults foResults = convertFO2PDF(fofile, pdffile); 143 System.out.println("done!"); 144 145 java.util.List pageSequences = foResults.getPageSequences(); 147 for (java.util.Iterator it = pageSequences.iterator(); it.hasNext();) { 148 PageSequenceResults pageSequenceResults = (PageSequenceResults)it.next(); 149 System.out.println("PageSequence " 150 + (String.valueOf(pageSequenceResults.getID()).length() > 0 151 ? pageSequenceResults.getID() : "<no id>") 152 + " generated " + pageSequenceResults.getPageCount() + " pages."); 153 } 154 System.out.println("Generated " + foResults.getPageCount() + " pages in total."); 155 156 } catch (Exception e) { 157 System.out.println("failure!"); 158 e.printStackTrace(System.out); 159 } finally { 160 System.out.println(""); 161 } 162 } 163 } 164 165 169 public static void main(String [] args) { 170 System.out.println("FOP MultipleFO2PDF\n"); 171 System.out.println("Preparing..."); 172 MultipleFO2PDF m = new MultipleFO2PDF(); 173 m.listen(); 174 } 175 176 } 177 | Popular Tags |