You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

AWTCommandLine.java 7.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  1. package org.apache.fop.apps;
  2. /*
  3. originally contributed by
  4. Juergen Verwohlt: Juergen.Verwohlt@jCatalog.com,
  5. Rainer Steinkuhle: Rainer.Steinkuhle@jCatalog.com,
  6. Stanislav Gorkhover: Stanislav.Gorkhover@jCatalog.com
  7. */
  8. import org.apache.fop.messaging.MessageHandler;
  9. import org.apache.fop.viewer.*;
  10. import org.apache.fop.render.awt.*;
  11. import javax.swing.UIManager;
  12. import java.awt.*;
  13. // SAX
  14. import org.xml.sax.XMLReader;
  15. import org.xml.sax.InputSource;
  16. import org.xml.sax.SAXException;
  17. import org.xml.sax.SAXParseException;
  18. // Java
  19. import java.io.FileReader;
  20. import java.io.File;
  21. import java.io.FileWriter;
  22. import java.io.PrintWriter;
  23. import java.io.IOException;
  24. import java.io.FileNotFoundException;
  25. import java.io.FileInputStream;
  26. import java.io.InputStream;
  27. import java.net.URL;
  28. import java.util.*;
  29. /**
  30. * initialize AWT previewer
  31. */
  32. public class AWTCommandLine {
  33. public static String TRANSLATION_PATH = "/org/apache/fop/viewer/resources/";
  34. private Translator resource;
  35. public AWTCommandLine(String srcFile, String language) {
  36. if (language == null)
  37. language = System.getProperty("user.language");
  38. resource = getResourceBundle(TRANSLATION_PATH + "resources." +
  39. language);
  40. UserMessage.setTranslator(
  41. getResourceBundle(TRANSLATION_PATH + "messages." +
  42. language));
  43. resource.setMissingEmphasized(false);
  44. AWTRenderer renderer = new AWTRenderer(resource);
  45. PreviewDialog frame = createPreviewDialog(renderer, resource);
  46. renderer.setProgressListener(frame);
  47. renderer.setComponent(frame);
  48. MessageHandler.setOutputMethod(MessageHandler.EVENT);
  49. MessageHandler.addListener(frame);
  50. //init parser
  51. frame.progress(resource.getString("Init parser") + " ...");
  52. XMLReader parser = createParser();
  53. if (parser == null) {
  54. MessageHandler.errorln("ERROR: Unable to create SAX parser");
  55. System.exit(1);
  56. }
  57. // setting the necessary parser features
  58. try {
  59. parser.setFeature("http://xml.org/sax/features/namespace-prefixes",
  60. true);
  61. } catch (SAXException e) {
  62. MessageHandler.errorln("Error in setting up parser feature namespace-prefixes");
  63. MessageHandler.errorln("You need a parser which supports SAX version 2");
  64. System.exit(1);
  65. }
  66. try {
  67. Driver driver = new Driver();
  68. driver.setRenderer(renderer);
  69. // init mappings: time
  70. frame.progress(resource.getString("Init mappings") + " ...");
  71. driver.addElementMapping("org.apache.fop.fo.StandardElementMapping");
  72. driver.addElementMapping("org.apache.fop.svg.SVGElementMapping");
  73. driver.addPropertyList("org.apache.fop.fo.StandardPropertyListMapping");
  74. driver.addPropertyList("org.apache.fop.svg.SVGPropertyListMapping");
  75. // build FO tree: time
  76. frame.progress(resource.getString("Build FO tree") + " ...");
  77. driver.buildFOTree(parser, fileInputSource(srcFile));
  78. // layout FO tree: time
  79. frame.progress(resource.getString("Layout FO tree") + " ...");
  80. driver.format();
  81. // render: time
  82. frame.progress(resource.getString("Render") + " ...");
  83. driver.render();
  84. frame.progress(resource.getString("Show"));
  85. frame.showPage();
  86. } catch (Exception e) {
  87. MessageHandler.errorln("FATAL ERROR: " + e.getMessage());
  88. e.printStackTrace();
  89. System.exit(1);
  90. }
  91. }
  92. static XMLReader createParser() {
  93. String parserClassName = System.getProperty("org.xml.sax.parser");
  94. if (parserClassName == null) {
  95. parserClassName = "org.apache.xerces.parsers.SAXParser";
  96. }
  97. MessageHandler.logln("using SAX parser " + parserClassName);
  98. try {
  99. return (XMLReader) Class.forName(
  100. parserClassName).newInstance();
  101. } catch (ClassNotFoundException e) {
  102. MessageHandler.errorln("Could not find " + parserClassName);
  103. }
  104. catch (InstantiationException e) {
  105. MessageHandler.errorln("Could not instantiate " +
  106. parserClassName);
  107. }
  108. catch (IllegalAccessException e) {
  109. MessageHandler.errorln("Could not access " + parserClassName);
  110. }
  111. catch (ClassCastException e) {
  112. MessageHandler.errorln(parserClassName + " is not a SAX driver");
  113. }
  114. return null;
  115. }
  116. protected PreviewDialog createPreviewDialog(AWTRenderer renderer,
  117. Translator res) {
  118. PreviewDialog frame = new PreviewDialog(renderer, res);
  119. frame.validate();
  120. // center window
  121. Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
  122. Dimension frameSize = frame.getSize();
  123. if (frameSize.height > screenSize.height)
  124. frameSize.height = screenSize.height;
  125. if (frameSize.width > screenSize.width)
  126. frameSize.width = screenSize.width;
  127. frame.setLocation((screenSize.width - frameSize.width) / 2,
  128. (screenSize.height - frameSize.height) / 2);
  129. frame.setVisible(true);
  130. return frame;
  131. }
  132. /**
  133. * create an InputSource from a file name
  134. *
  135. * @param filename the name of the file
  136. * @return the InputSource created
  137. */
  138. protected static InputSource fileInputSource(String filename) {
  139. /* this code adapted from James Clark's in XT */
  140. File file = new File(filename);
  141. String path = file.getAbsolutePath();
  142. String fSep = System.getProperty("file.separator");
  143. if (fSep != null && fSep.length() == 1)
  144. path = path.replace(fSep.charAt(0), '/');
  145. if (path.length() > 0 && path.charAt(0) != '/')
  146. path = '/' + path;
  147. try {
  148. return new InputSource(new URL("file", null, path).toString());
  149. } catch (java.net.MalformedURLException e) {
  150. throw new Error("unexpected MalformedURLException");
  151. }
  152. }
  153. private SecureResourceBundle getResourceBundle(String path) {
  154. InputStream in = null;
  155. try {
  156. URL url = getClass().getResource(path);
  157. in = url.openStream();
  158. } catch (Exception ex) {
  159. MessageHandler.logln("Can't find URL to: <" + path + "> " +
  160. ex.getMessage());
  161. }
  162. return new SecureResourceBundle(in);
  163. }
  164. /* main
  165. */
  166. public static void main(String[] args) {
  167. try {
  168. UIManager.setLookAndFeel(
  169. new javax.swing.plaf.metal.MetalLookAndFeel());
  170. } catch (Exception e) {
  171. e.printStackTrace();
  172. }
  173. String srcPath = null;
  174. String language = null;
  175. String imageDir = null;
  176. MessageHandler.errorln(Version.getVersion());
  177. if (args.length < 1 || args.length > 3) {
  178. MessageHandler.errorln("usage: java AWTCommandLine " + "formatting-object-file [language] ");
  179. System.exit(1);
  180. }
  181. srcPath = args[0];
  182. if (args.length > 1) {
  183. language = args[1];
  184. }
  185. new AWTCommandLine(srcPath, language);
  186. } // main
  187. } // AWTCommandLine