List of usage examples for javax.xml.transform Transformer setParameter
public abstract void setParameter(String name, Object value);
From source file:org.pentaho.di.trans.steps.dom.xslt.DOMXslt.java
public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException { meta = (DOMXsltMeta) smi;/* w w w . ja va2s . c o m*/ data = (DOMXsltData) sdi; Object[] row = getRow(); if (row == null) { // no more input to be expected... setOutputDone(); return false; } if (first) { first = false; data.outputRowMeta = getInputRowMeta().clone(); meta.getFields(data.outputRowMeta, getStepname(), null, null, this, repository, metaStore); // Check if The result field is given if (Const.isEmpty(meta.getResultfieldname())) { // Result Field is missing ! logError(BaseMessages.getString(PKG, "Xslt.Log.ErrorResultFieldMissing")); throw new KettleStepException( BaseMessages.getString(PKG, "Xslt.Exception.ErrorResultFieldMissing")); } // Check if The XML field is given if (Const.isEmpty(meta.getFieldname())) { // Result Field is missing ! logError(BaseMessages.getString(PKG, "Xslt.Exception.ErrorXMLFieldMissing")); throw new KettleStepException(BaseMessages.getString(PKG, "Xslt.Exception.ErrorXMLFieldMissing")); } // Try to get XML Field index data.fieldposition = getInputRowMeta().indexOfValue(meta.getFieldname()); // Let's check the Field if (data.fieldposition < 0) { // The field is unreachable ! logError(BaseMessages.getString(PKG, "Xslt.Log.ErrorFindingField") + "[" + meta.getFieldname() + "]"); throw new KettleStepException( BaseMessages.getString(PKG, "Xslt.Exception.CouldnotFindField", meta.getFieldname())); } // Check if the XSL Filename is contained in a column if (meta.useXSLField()) { if (Const.isEmpty(meta.getXSLFileField())) { // The field is missing // Result field is missing ! logError(BaseMessages.getString(PKG, "Xslt.Log.ErrorXSLFileFieldMissing")); throw new KettleStepException( BaseMessages.getString(PKG, "Xslt.Exception.ErrorXSLFileFieldMissing")); } // Try to get Field index data.fielxslfiledposition = getInputRowMeta().indexOfValue(meta.getXSLFileField()); // Let's check the Field if (data.fielxslfiledposition < 0) { // The field is unreachable ! logError(BaseMessages.getString(PKG, "Xslt.Log.ErrorXSLFileFieldFinding") + "[" + meta.getXSLFileField() + "]"); throw new KettleStepException(BaseMessages.getString(PKG, "Xslt.Exception.ErrorXSLFileFieldFinding", meta.getXSLFileField())); } } else { if (Const.isEmpty(meta.getXslFilename())) { logError(BaseMessages.getString(PKG, "Xslt.Log.ErrorXSLFile")); throw new KettleStepException(BaseMessages.getString(PKG, "Xslt.Exception.ErrorXSLFile")); } // Check if XSL File exists! data.xslfilename = environmentSubstitute(meta.getXslFilename()); FileObject file = null; try { file = KettleVFS.getFileObject(data.xslfilename); if (!file.exists()) { logError(BaseMessages.getString(PKG, "Xslt.Log.ErrorXSLFileNotExists", data.xslfilename)); throw new KettleStepException(BaseMessages.getString(PKG, "Xslt.Exception.ErrorXSLFileNotExists", data.xslfilename)); } if (file.getType() != FileType.FILE) { logError(BaseMessages.getString(PKG, "Xslt.Log.ErrorXSLNotAFile", data.xslfilename)); throw new KettleStepException( BaseMessages.getString(PKG, "Xslt.Exception.ErrorXSLNotAFile", data.xslfilename)); } } catch (Exception e) { throw new KettleStepException(e); } finally { try { if (file != null) { file.close(); } } catch (Exception e) { /* Ignore */ } } } // Check output parameters int nrOutputProps = meta.getOutputPropertyName() == null ? 0 : meta.getOutputPropertyName().length; if (nrOutputProps > 0) { data.outputProperties = new Properties(); for (int i = 0; i < nrOutputProps; i++) { data.outputProperties.put(meta.getOutputPropertyName()[i], environmentSubstitute(meta.getOutputPropertyValue()[i])); } data.setOutputProperties = true; } // Check parameters data.nrParams = meta.getParameterField() == null ? 0 : meta.getParameterField().length; if (data.nrParams > 0) { data.indexOfParams = new int[data.nrParams]; data.nameOfParams = new String[data.nrParams]; for (int i = 0; i < data.nrParams; i++) { String name = environmentSubstitute(meta.getParameterName()[i]); String field = environmentSubstitute(meta.getParameterField()[i]); if (Const.isEmpty(field)) { throw new KettleStepException( BaseMessages.getString(PKG, "Xslt.Exception.ParameterFieldMissing", name, i)); } data.indexOfParams[i] = getInputRowMeta().indexOfValue(field); if (data.indexOfParams[i] < 0) { throw new KettleStepException( BaseMessages.getString(PKG, "Xslt.Exception.ParameterFieldNotFound", name)); } data.nameOfParams[i] = name; } data.useParameters = true; } data.factory = TransformerFactory.newInstance(); if (meta.getXSLFactory().equals("SAXON")) { // Set the TransformerFactory to the SAXON implementation. data.factory = new net.sf.saxon.TransformerFactoryImpl(); } try { data.builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); } catch (ParserConfigurationException e) { e.printStackTrace(); throw new KettleStepException(e); } } // end if first // Get the field value Document xmlValue = (Document) row[data.fieldposition]; if (meta.useXSLField()) { // Get the value data.xslfilename = getInputRowMeta().getString(row, data.fielxslfiledposition); if (log.isDetailed()) { logDetailed(BaseMessages.getString(PKG, "Xslt.Log.XslfileNameFromFied", data.xslfilename, meta.getXSLFileField())); } } try { if (log.isDetailed()) { if (meta.isXSLFieldIsAFile()) { logDetailed(BaseMessages.getString(PKG, "Xslt.Log.Filexsl") + data.xslfilename); } else { logDetailed(BaseMessages.getString(PKG, "Xslt.Log.XslStream", data.xslfilename)); } } // Get the template from the cache Transformer transformer = data.getTemplate(data.xslfilename, data.xslIsAfile); // Do we need to set output properties? if (data.setOutputProperties) { transformer.setOutputProperties(data.outputProperties); } // Do we need to pass parameters? if (data.useParameters) { for (int i = 0; i < data.nrParams; i++) { transformer.setParameter(data.nameOfParams[i], row[data.indexOfParams[i]]); } } Source source = new DOMSource(xmlValue); // Prepare output stream Document doc = data.builder.newDocument(); // transform xml source DOMResult result = new DOMResult(doc); transformer.transform(source, result); //By default the DOMResult object creates a Document node to hold the output: Document outputDocument = (Document) result.getNode(); if (log.isDetailed()) { logDetailed(BaseMessages.getString(PKG, "Xslt.Log.FileResult")); //logDetailed( xmlString ); } Object[] outputRowData = RowDataUtil.addValueData(row, getInputRowMeta().size(), outputDocument); if (log.isRowLevel()) { logRowlevel( BaseMessages.getString(PKG, "Xslt.Log.ReadRow") + " " + getInputRowMeta().getString(row)); } // add new values to the row. putRow(data.outputRowMeta, outputRowData); // copy row to output rowset(s); } catch (Exception e) { String errorMessage = e.getMessage(); StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); DefaultErrorHandler.printLocation(pw, e); pw.close(); errorMessage = sw.toString() + "\n" + errorMessage; if (getStepMeta().isDoingErrorHandling()) { // Simply add this row to the error row putError(getInputRowMeta(), row, 1, errorMessage, meta.getResultfieldname(), "XSLT01"); } else { logError(BaseMessages.getString(PKG, "Xslt.ErrorProcesing" + " : " + errorMessage)); throw new KettleStepException(BaseMessages.getString(PKG, "Xslt.ErrorProcesing"), e); } } return true; }
From source file:org.pentaho.di.trans.steps.xslt.Xslt.java
public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException { meta = (XsltMeta) smi;/*from w ww.java 2 s . c o m*/ data = (XsltData) sdi; Object[] row = getRow(); if (row == null) { // no more input to be expected... setOutputDone(); return false; } if (first) { first = false; data.outputRowMeta = getInputRowMeta().clone(); meta.getFields(data.outputRowMeta, getStepname(), null, null, this, repository, metaStore); // Check if The result field is given if (Const.isEmpty(meta.getResultfieldname())) { // Result Field is missing ! logError(BaseMessages.getString(PKG, "Xslt.Log.ErrorResultFieldMissing")); throw new KettleStepException( BaseMessages.getString(PKG, "Xslt.Exception.ErrorResultFieldMissing")); } // Check if The XML field is given if (Const.isEmpty(meta.getFieldname())) { // Result Field is missing ! logError(BaseMessages.getString(PKG, "Xslt.Exception.ErrorXMLFieldMissing")); throw new KettleStepException(BaseMessages.getString(PKG, "Xslt.Exception.ErrorXMLFieldMissing")); } // Try to get XML Field index data.fieldposition = getInputRowMeta().indexOfValue(meta.getFieldname()); // Let's check the Field if (data.fieldposition < 0) { // The field is unreachable ! logError(BaseMessages.getString(PKG, "Xslt.Log.ErrorFindingField") + "[" + meta.getFieldname() + "]"); throw new KettleStepException( BaseMessages.getString(PKG, "Xslt.Exception.CouldnotFindField", meta.getFieldname())); } // Check if the XSL Filename is contained in a column if (meta.useXSLField()) { if (Const.isEmpty(meta.getXSLFileField())) { // The field is missing // Result field is missing ! logError(BaseMessages.getString(PKG, "Xslt.Log.ErrorXSLFileFieldMissing")); throw new KettleStepException( BaseMessages.getString(PKG, "Xslt.Exception.ErrorXSLFileFieldMissing")); } // Try to get Field index data.fielxslfiledposition = getInputRowMeta().indexOfValue(meta.getXSLFileField()); // Let's check the Field if (data.fielxslfiledposition < 0) { // The field is unreachable ! logError(BaseMessages.getString(PKG, "Xslt.Log.ErrorXSLFileFieldFinding") + "[" + meta.getXSLFileField() + "]"); throw new KettleStepException(BaseMessages.getString(PKG, "Xslt.Exception.ErrorXSLFileFieldFinding", meta.getXSLFileField())); } } else { if (Const.isEmpty(meta.getXslFilename())) { logError(BaseMessages.getString(PKG, "Xslt.Log.ErrorXSLFile")); throw new KettleStepException(BaseMessages.getString(PKG, "Xslt.Exception.ErrorXSLFile")); } // Check if XSL File exists! data.xslfilename = environmentSubstitute(meta.getXslFilename()); FileObject file = null; try { file = KettleVFS.getFileObject(data.xslfilename); if (!file.exists()) { logError(BaseMessages.getString(PKG, "Xslt.Log.ErrorXSLFileNotExists", data.xslfilename)); throw new KettleStepException(BaseMessages.getString(PKG, "Xslt.Exception.ErrorXSLFileNotExists", data.xslfilename)); } if (file.getType() != FileType.FILE) { logError(BaseMessages.getString(PKG, "Xslt.Log.ErrorXSLNotAFile", data.xslfilename)); throw new KettleStepException( BaseMessages.getString(PKG, "Xslt.Exception.ErrorXSLNotAFile", data.xslfilename)); } } catch (Exception e) { throw new KettleStepException(e); } finally { try { if (file != null) { file.close(); } } catch (Exception e) { /* Ignore */ } } } // Check output parameters int nrOutputProps = meta.getOutputPropertyName() == null ? 0 : meta.getOutputPropertyName().length; if (nrOutputProps > 0) { data.outputProperties = new Properties(); for (int i = 0; i < nrOutputProps; i++) { data.outputProperties.put(meta.getOutputPropertyName()[i], environmentSubstitute(meta.getOutputPropertyValue()[i])); } data.setOutputProperties = true; } // Check parameters data.nrParams = meta.getParameterField() == null ? 0 : meta.getParameterField().length; if (data.nrParams > 0) { data.indexOfParams = new int[data.nrParams]; data.nameOfParams = new String[data.nrParams]; for (int i = 0; i < data.nrParams; i++) { String name = environmentSubstitute(meta.getParameterName()[i]); String field = environmentSubstitute(meta.getParameterField()[i]); if (Const.isEmpty(field)) { throw new KettleStepException( BaseMessages.getString(PKG, "Xslt.Exception.ParameterFieldMissing", name, i)); } data.indexOfParams[i] = getInputRowMeta().indexOfValue(field); if (data.indexOfParams[i] < 0) { throw new KettleStepException( BaseMessages.getString(PKG, "Xslt.Exception.ParameterFieldNotFound", name)); } data.nameOfParams[i] = name; } data.useParameters = true; } data.factory = TransformerFactory.newInstance(); if (meta.getXSLFactory().equals("SAXON")) { // Set the TransformerFactory to the SAXON implementation. data.factory = new net.sf.saxon.TransformerFactoryImpl(); } } // end if first // Get the field value String xmlValue = getInputRowMeta().getString(row, data.fieldposition); if (meta.useXSLField()) { // Get the value data.xslfilename = getInputRowMeta().getString(row, data.fielxslfiledposition); if (log.isDetailed()) { logDetailed(BaseMessages.getString(PKG, "Xslt.Log.XslfileNameFromFied", data.xslfilename, meta.getXSLFileField())); } } try { if (log.isDetailed()) { if (meta.isXSLFieldIsAFile()) { logDetailed(BaseMessages.getString(PKG, "Xslt.Log.Filexsl") + data.xslfilename); } else { logDetailed(BaseMessages.getString(PKG, "Xslt.Log.XslStream", data.xslfilename)); } } // Get the template from the cache Transformer transformer = data.getTemplate(data.xslfilename, data.xslIsAfile); // Do we need to set output properties? if (data.setOutputProperties) { transformer.setOutputProperties(data.outputProperties); } // Do we need to pass parameters? if (data.useParameters) { for (int i = 0; i < data.nrParams; i++) { transformer.setParameter(data.nameOfParams[i], row[data.indexOfParams[i]]); } } Source source = new StreamSource(new StringReader(xmlValue)); // Prepare output stream StreamResult result = new StreamResult(new StringWriter()); // transform xml source transformer.transform(source, result); String xmlString = result.getWriter().toString(); if (log.isDetailed()) { logDetailed(BaseMessages.getString(PKG, "Xslt.Log.FileResult")); logDetailed(xmlString); } Object[] outputRowData = RowDataUtil.addValueData(row, getInputRowMeta().size(), xmlString); if (log.isRowLevel()) { logRowlevel( BaseMessages.getString(PKG, "Xslt.Log.ReadRow") + " " + getInputRowMeta().getString(row)); } // add new values to the row. putRow(data.outputRowMeta, outputRowData); // copy row to output rowset(s); } catch (Exception e) { String errorMessage = e.getMessage(); StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); DefaultErrorHandler.printLocation(pw, e); pw.close(); errorMessage = sw.toString() + "\n" + errorMessage; if (getStepMeta().isDoingErrorHandling()) { // Simply add this row to the error row putError(getInputRowMeta(), row, 1, errorMessage, meta.getResultfieldname(), "XSLT01"); } else { logError(BaseMessages.getString(PKG, "Xslt.ErrorProcesing" + " : " + errorMessage)); throw new KettleStepException(BaseMessages.getString(PKG, "Xslt.ErrorProcesing"), e); } } return true; }
From source file:org.pentaho.platform.util.xml.XmlHelper.java
/** * Use the transform specified by xslSrc and transform the document specified by docSrc, and return the resulting * document./*from ww w . j a v a2 s . co m*/ * * @param xslSrc * StreamSrc containing the xsl transform * @param docSrc * StreamSrc containing the document to be transformed * @param params * Map of properties to set on the transform * @param resolver * URIResolver instance to resolve URI's in the output document. * * @return StringBuffer containing the XML results of the transform * @throws TransformerConfigurationException * if the TransformerFactory fails to create a Transformer. * @throws TransformerException * if actual transform fails. */ protected static final StringBuffer transformXml(final StreamSource xslSrc, final StreamSource docSrc, final Map params, final URIResolver resolver) throws TransformerConfigurationException, TransformerException { StringBuffer sb = null; StringWriter writer = new StringWriter(); TransformerFactory tf = TransformerFactory.newInstance(); if (null != resolver) { tf.setURIResolver(resolver); } // TODO need to look into compiling the XSLs... Transformer t = tf.newTransformer(xslSrc); // can throw // TransformerConfigurationException // Start the transformation if (params != null) { Set keys = params.keySet(); Iterator it = keys.iterator(); String key, val; while (it.hasNext()) { key = (String) it.next(); val = (String) params.get(key); if (val != null) { t.setParameter(key, val); } } } t.transform(docSrc, new StreamResult(writer)); // can throw // TransformerException sb = writer.getBuffer(); return sb; }
From source file:org.pepstock.jem.ant.validator.transformer.TransformerValidator.java
/** * Inits the transformer, load the xslt and validate it, load jem properties * During the transformation, the transformer onbject is locked, so the file * listner is inhibited to do a refresh. * //from w w w . ja va 2 s .co m * @param xsltvalidatorFile the xslt file * @return the transformer * @throws ValidationException the validation exception */ private Transformer createTransformer(String xsltvalidatorFile) throws ValidationException { Transformer t = null; // Instantiate a TransformerFactory TransformerFactory tFactory = TransformerFactory.newInstance(); // add error listner to capture validation error. ErrorListener tfel = new TransformerFactoryErrorListener(); tFactory.setErrorListener(tfel); // check the transformer compliant if (!tFactory.getFeature(SAXTransformerFactory.FEATURE)) { throw new ValidationException(AntMessage.JEMA050E.toMessage().getFormattedMessage()); } // activate xalan extension NodeInfo to map source xml code position tFactory.setAttribute(TransformerFactoryImpl.FEATURE_SOURCE_LOCATION, Boolean.TRUE); StreamSource ss = new StreamSource(xsltvalidatorFile); try { // A Transformer may be used multiple times. // Parameters and output properties are preserved across // transformations. t = tFactory.newTransformer(ss); } catch (TransformerConfigurationException e) { throw new ValidationException(AntMessage.JEMA047E.toMessage().getFormattedMessage(e.getMessage()), e); } // add custom error listener, necessary to avoid internal catch // of exception throwed by xslt ErrorListener el = new TransformerErrorListener(); t.setErrorListener(el); // pass the parameter list to the xslt for (Object key : System.getProperties().keySet()) { String keyString = key.toString(); String value = System.getProperty(keyString); t.setParameter(keyString, value); } for (String key : System.getenv().keySet()) { String value = System.getenv().get(key); t.setParameter(key, value); } return t; }
From source file:org.portletbridge.portlet.PortletBridgePortlet.java
public void render(RenderRequest request, RenderResponse response) throws PortletException, IOException { try {//from w w w.j a va 2s .c om super.render(request, response); } catch (Throwable exception) { // getPortletConfig().getPortletContext().log(exception.getMessage(), exception); // using this instead because pluto doesn't seem to print out portletcontext logs log.warn(exception, exception); response.setContentType("text/html"); try { Transformer transformer = errorTemplates.newTransformer(); transformer.setParameter("portlet", new PortletFunctions(request, response)); transformer.setParameter("exception", exception); transformer.transform(new StreamSource(new StringReader("<xml/>")), new StreamResult(response.getWriter())); } catch (TransformerConfigurationException e) { throw new PortletException(e); } catch (TransformerException e) { throw new PortletException(e); } catch (IOException e) { throw new PortletException(e); } } }
From source file:org.projectforge.framework.renderer.PdfRenderer.java
public byte[] render(final String stylesheet, final String groovyXml, final Map<String, Object> data) { final PFUserDO user = ThreadLocalUserContext.getUser(); data.put("createdLabel", ThreadLocalUserContext.getLocalizedString("created")); data.put("loggedInUser", user); data.put("baseDir", configurationService.getResourceDir()); data.put("logoFile", configurationService.getResourceDir() + "/images/" + logoFileName); data.put("appId", AppVersion.APP_ID); data.put("appVersion", AppVersion.NUMBER); data.put("organization", StringUtils.defaultString( Configuration.getInstance().getStringValue(ConfigurationParam.ORGANIZATION), AppVersion.APP_ID)); final ByteArrayOutputStream baos = new ByteArrayOutputStream(); log.info("stylesheet=" + stylesheet + ", jellyXml=" + groovyXml + ", baseDir=" + configurationService.getResourceDir() + ", fontBaseDir=" + getFontResourcePath()); // configure fopFactory as desired final FopFactory fopFactory = FopFactory.newInstance(); try {/* w w w. ja v a 2 s. c o m*/ fopFactory.getFontManager().setFontBaseURL(getFontResourcePath()); } catch (final MalformedURLException ex) { log.error(ex.getMessage(), ex); } final FOUserAgent foUserAgent = fopFactory.newFOUserAgent(); try { foUserAgent.getFactory().getFontManager().setFontBaseURL(getFontResourcePath()); } catch (final MalformedURLException ex) { log.error(ex.getMessage(), ex); } // configure foUserAgent as desired InputStream xsltInputStream = null; try { // Construct fop with desired output format final Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent, baos); // Setup XSLT final TransformerFactory factory = TransformerFactory.newInstance(); Object[] result = configurationService.getResourceAsInputStream(stylesheet); xsltInputStream = (InputStream) result[0]; final StreamSource xltStreamSource = new StreamSource(xsltInputStream); final String url = (String) result[1]; if (url == null) { log.error("Url of xsl resource is null."); throw new InternalErrorException(); } xltStreamSource.setSystemId(url); final Transformer transformer = factory.newTransformer(xltStreamSource); // Set the value of a <param> in the stylesheet for (final Map.Entry<String, Object> entry : data.entrySet()) { transformer.setParameter(entry.getKey(), entry.getValue()); } // First run jelly through xmlData: result = configurationService.getResourceContentAsString(groovyXml); final GroovyEngine groovyEngine = new GroovyEngine(configurationService, data, ThreadLocalUserContext.getLocale(), ThreadLocalUserContext.getTimeZone()); final String groovyXmlInput = groovyEngine.preprocessGroovyXml((String) result[0]); final String xmlData = groovyEngine.executeTemplate(groovyXmlInput); // Setup input for XSLT transformation final StringReader xmlDataReader = new StringReader(xmlData); final Source src = new StreamSource(xmlDataReader); // Resulting SAX events (the generated FO) must be piped through to FOP final Result res = new SAXResult(fop.getDefaultHandler()); // Start XSLT transformation and FOP processing transformer.transform(src, res); } catch (final FOPException ex) { log.error(ex.getMessage(), ex); throw new RuntimeException(ex); } catch (final TransformerConfigurationException ex) { log.error(ex.getMessage(), ex); throw new RuntimeException(ex); } catch (final TransformerException ex) { log.error(ex.getMessage(), ex); throw new RuntimeException(ex); } finally { try { baos.close(); } catch (final IOException ex) { log.error(ex.getMessage(), ex); throw new RuntimeException(ex); } IOUtils.closeQuietly(xsltInputStream); } return baos.toByteArray(); }
From source file:org.projectforge.renderer.PdfRenderer.java
public byte[] render(final String stylesheet, final String groovyXml, final Map<String, Object> data) { // initialize(); final PFUserDO user = PFUserContext.getUser(); data.put("createdLabel", PFUserContext.getLocalizedString("created")); data.put("loggedInUser", user); data.put("baseDir", configXml.getResourcePath()); data.put("appId", AppVersion.APP_ID); data.put("appVersion", AppVersion.NUMBER); data.put("organization", StringUtils.defaultString( Configuration.getInstance().getStringValue(ConfigurationParam.ORGANIZATION), AppVersion.APP_ID)); final ByteArrayOutputStream baos = new ByteArrayOutputStream(); log.info("stylesheet=" + stylesheet + ", jellyXml=" + groovyXml + ", baseDir=" + configXml.getResourcePath() + ", fontBaseDir=" + getFontResourcePath()); // fopRenderer.processFo(styleSheet, xmlData, data, new PdfFopOutput(baos)); // return baos.toByteArray(); // configure fopFactory as desired final FopFactory fopFactory = FopFactory.newInstance(); // Configuration cfg = fopFactory.getUserConfig(); try {// w w w .ja v a 2 s . co m fopFactory.getFontManager().setFontBaseURL(getFontResourcePath()); } catch (final MalformedURLException ex) { log.error(ex.getMessage(), ex); } /* * try { fopFactory.setUserConfig(baseDir + "/fop.config"); } catch (SAXException ex) { log.error(ex.getMessage(), ex); throw new * RuntimeException(ex); } catch (IOException ex) { log.error(ex.getMessage(), ex); throw new RuntimeException(ex); } */ final FOUserAgent foUserAgent = fopFactory.newFOUserAgent(); try { foUserAgent.getFactory().getFontManager().setFontBaseURL(getFontResourcePath()); } catch (final MalformedURLException ex) { log.error(ex.getMessage(), ex); } // configure foUserAgent as desired try { // Construct fop with desired output format final Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent, baos); // Setup XSLT final TransformerFactory factory = TransformerFactory.newInstance(); Object[] result = configXml.getInputStream(stylesheet); final InputStream xsltInputStream = (InputStream) result[0]; final StreamSource xltStreamSource = new StreamSource(xsltInputStream); final String url = (String) result[1]; if (url == null) { log.error("Url of xsl resource is null."); throw new InternalErrorException(); } xltStreamSource.setSystemId(url); final Transformer transformer = factory.newTransformer(xltStreamSource); // Set the value of a <param> in the stylesheet for (final Map.Entry<String, Object> entry : data.entrySet()) { transformer.setParameter(entry.getKey(), entry.getValue()); } // First run jelly through xmlData: result = configXml.getContent(groovyXml); final GroovyEngine groovyEngine = new GroovyEngine(data, PFUserContext.getLocale(), PFUserContext.getTimeZone()); final String groovyXmlInput = groovyEngine.preprocessGroovyXml((String) result[0]); final String xmlData = groovyEngine.executeTemplate(groovyXmlInput); // Setup input for XSLT transformation final StringReader xmlDataReader = new StringReader(xmlData); final Source src = new StreamSource(xmlDataReader); // Resulting SAX events (the generated FO) must be piped through to FOP final Result res = new SAXResult(fop.getDefaultHandler()); // Start XSLT transformation and FOP processing transformer.transform(src, res); } catch (final FOPException ex) { log.error(ex.getMessage(), ex); throw new RuntimeException(ex); } catch (final TransformerConfigurationException ex) { log.error(ex.getMessage(), ex); throw new RuntimeException(ex); } catch (final TransformerException ex) { log.error(ex.getMessage(), ex); throw new RuntimeException(ex); } finally { try { baos.close(); } catch (final IOException ex) { log.error(ex.getMessage(), ex); throw new RuntimeException(ex); } } return baos.toByteArray(); }
From source file:org.roda.core.common.RodaUtils.java
/** * INFO 20160711 this method does not cache stylesheet related resources *//*from w ww . ja va2 s . co m*/ public static void applyStylesheet(Reader xsltReader, Reader fileReader, Map<String, String> parameters, Writer result) throws IOException, TransformerException { TransformerFactory factory = new net.sf.saxon.TransformerFactoryImpl(); factory.setURIResolver(new RodaURIFileResolver()); Source xsltSource = new StreamSource(xsltReader); Transformer transformer = factory.newTransformer(xsltSource); for (Entry<String, String> parameter : parameters.entrySet()) { transformer.setParameter(parameter.getKey(), parameter.getValue()); } try { XMLReader xmlReader = XMLReaderFactory.createXMLReader(); xmlReader.setEntityResolver(new RodaEntityResolver()); InputSource source = new InputSource(fileReader); Source text = new SAXSource(xmlReader, source); transformer.transform(text, new StreamResult(result)); } catch (SAXException se) { LOGGER.error(se.getMessage(), se); } }
From source file:org.sakaiproject.calendar.impl.BaseCalendarService.java
/** * Takes a DOM structure and renders a PDF * /*w w w .j a v a 2s .c om*/ * @param doc * DOM structure * @param xslFileName * XSL file to use to translate the DOM document to FOP */ protected void generatePDF(Document doc, String xslFileName, OutputStream streamOut) { Driver driver = new Driver(); org.apache.avalon.framework.logger.Logger logger = new ConsoleLogger(ConsoleLogger.LEVEL_ERROR); MessageHandler.setScreenLogger(logger); driver.setLogger(logger); try { String baseDir = getClass().getClassLoader().getResource(FOP_FONTBASEDIR).toString(); Configuration.put("fontBaseDir", baseDir); InputStream userConfig = getClass().getClassLoader().getResourceAsStream(FOP_USERCONFIG); new Options(userConfig); } catch (FOPException fe) { M_log.warn(this + ".generatePDF: ", fe); } catch (Exception e) { M_log.warn(this + ".generatePDF: ", e); } driver.setOutputStream(streamOut); driver.setRenderer(Driver.RENDER_PDF); try { InputStream in = getClass().getClassLoader().getResourceAsStream(xslFileName); Transformer transformer = transformerFactory.newTransformer(new StreamSource(in)); Source src = new DOMSource(doc); java.util.Calendar c = java.util.Calendar.getInstance(m_timeService.getLocalTimeZone(), new ResourceLoader().getLocale()); CalendarUtil calUtil = new CalendarUtil(c); String[] dayNames = calUtil.getCalendarDaysOfWeekNames(true); String[] monthNames = calUtil.getCalendarMonthNames(true); // Kludge: Xalan in JDK 1.4/1.5 does not properly resolve java classes // (http://xml.apache.org/xalan-j/faq.html#jdk14) // Clean this up in JDK 1.6 and pass ResourceBundle/ArrayList parms transformer.setParameter("dayNames0", dayNames[0]); transformer.setParameter("dayNames1", dayNames[1]); transformer.setParameter("dayNames2", dayNames[2]); transformer.setParameter("dayNames3", dayNames[3]); transformer.setParameter("dayNames4", dayNames[4]); transformer.setParameter("dayNames5", dayNames[5]); transformer.setParameter("dayNames6", dayNames[6]); transformer.setParameter("jan", monthNames[0]); transformer.setParameter("feb", monthNames[1]); transformer.setParameter("mar", monthNames[2]); transformer.setParameter("apr", monthNames[3]); transformer.setParameter("may", monthNames[4]); transformer.setParameter("jun", monthNames[5]); transformer.setParameter("jul", monthNames[6]); transformer.setParameter("aug", monthNames[7]); transformer.setParameter("sep", monthNames[8]); transformer.setParameter("oct", monthNames[9]); transformer.setParameter("nov", monthNames[10]); transformer.setParameter("dec", monthNames[11]); transformer.setParameter("site", rb.getString("event.site")); transformer.setParameter("event", rb.getString("event.event")); transformer.setParameter("location", rb.getString("event.location")); transformer.setParameter("type", rb.getString("event.type")); transformer.setParameter("from", rb.getString("event.from")); transformer.setParameter("sched", rb.getString("sched.for")); transformer.transform(src, new SAXResult(driver.getContentHandler())); } catch (TransformerException e) { e.printStackTrace(); M_log.warn(this + ".generatePDF(): " + e); return; } }
From source file:org.sakaiproject.site.tool.SiteInfoToolServlet.java
/** * Takes a DOM structure and renders a PDF * // ww w . jav a 2s .c o m * @param doc * DOM structure * @param xslFileName * XSL file to use to translate the DOM document to FOP */ @SuppressWarnings("unchecked") protected void generatePDF(Document doc, OutputStream streamOut) { String xslFileName = "participants-all-attrs.xsl"; Locale currentLocale = rb.getLocale(); if (currentLocale != null) { String fullLocale = currentLocale.toString(); xslFileName = "participants-all-attrs_" + fullLocale + ".xsl"; InputStream inputStream = getClass().getClassLoader().getResourceAsStream(xslFileName); if (inputStream == null) { xslFileName = "participants-all-attrs_" + currentLocale.getCountry() + ".xsl"; inputStream = getClass().getClassLoader().getResourceAsStream(xslFileName); if (inputStream == null) { //We use the default file xslFileName = "participants-all-attrs.xsl"; } } IOUtils.closeQuietly(inputStream); } String configFileName = "userconfig.xml"; DefaultConfigurationBuilder cfgBuilder = new DefaultConfigurationBuilder(); InputStream configInputStream = null; try { configInputStream = getClass().getClassLoader().getResourceAsStream(configFileName); Configuration cfg = cfgBuilder.build(configInputStream); FopFactory fopFactory = FopFactory.newInstance(); fopFactory.setUserConfig(cfg); fopFactory.setStrictValidation(false); FOUserAgent foUserAgent = fopFactory.newFOUserAgent(); if (!StringUtils.isEmpty(ServerConfigurationService.getString("pdf.default.font"))) { // this allows font substitution to support i18n chars in PDFs - SAK-21909 FontQualifier fromQualifier = new FontQualifier(); fromQualifier.setFontFamily("DEFAULT_FONT"); FontQualifier toQualifier = new FontQualifier(); toQualifier.setFontFamily(ServerConfigurationService.getString("pdf.default.font", "Helvetica")); FontSubstitutions result = new FontSubstitutions(); result.add(new FontSubstitution(fromQualifier, toQualifier)); fopFactory.getFontManager().setFontSubstitutions(result); } Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent, streamOut); InputStream in = getClass().getClassLoader().getResourceAsStream(xslFileName); Transformer transformer = transformerFactory.newTransformer(new StreamSource(in)); transformer.setParameter("titleName", rb.getString("sitegen.siteinfolist.title.name")); transformer.setParameter("titleSection", rb.getString("sitegen.siteinfolist.title.section")); transformer.setParameter("titleId", rb.getString("sitegen.siteinfolist.title.id")); transformer.setParameter("titleCredit", rb.getString("sitegen.siteinfolist.title.credit")); transformer.setParameter("titleRole", rb.getString("sitegen.siteinfolist.title.role")); transformer.setParameter("titleStatus", rb.getString("sitegen.siteinfolist.title.status")); Source src = new DOMSource(doc); transformer.transform(src, new SAXResult(fop.getDefaultHandler())); } catch (Exception e) { e.printStackTrace(); log.warn(this + ".generatePDF(): " + e); return; } finally { IOUtils.closeQuietly(configInputStream); } }