//@include lib_Class.js /** * Rendering PDF file from a Apache FOP template. * * @author PZ, ELO Digital Office GmbH * @version 1.0 * * @eloas * @requires sol.common.RepoUtils * @requires sol.common.Template */ sol.define("sol.common.as.renderer.Fop", { requiredConfig: ["templateId"], /** * @cfg {String} templateId (required) * The template which should be rendered */ /** * @cfg {String} targetId * The target folder to store the rendered document. * Either `targetId` or `objId` has to be defined. */ /** * @cfg {String} objId * The rendered document will be saved as a version of this object * Either `targetId` or `objId` has to be defined. */ /** * @cfg {String} toStream * If true, the renderer will return the output stream */ initialize: function (config) { var me = this; me.$super("sol.Base", "initialize", [config]); if (!me.objId && !me.targetId && !me.toStream) { throw "IllegalArgumentException: either 'targetId' or 'objId' has to defined"; } }, render: function (name, data) { var me = this, result = {}, pdfStream, foContent, foStream, tpl; me.maskId = me.maskId || ""; try { tpl = sol.create("sol.common.Template", {}); tpl.load(me.templateId); foContent = tpl.apply(data); me.logger.debug(["fo={0}", foContent]); foStream = org.apache.commons.io.IOUtils.toInputStream(foContent, "UTF-8"); pdfStream = new ByteArrayOutputStream(); Packages.de.elo.mover.main.helper.XmlHelper.convertToPdf(foStream, pdfStream); if (me.toStream) { result.outputStream = pdfStream; } if (me.objId) { result.objId = sol.common.RepoUtils.saveToRepo({ objId: me.objId, extension: "pdf", outputStream: pdfStream }); } if (me.targetId) { sol.common.RepoUtils.preparePath(me.targetId); result.objId = sol.common.RepoUtils.saveToRepo({ name: name, parentId: me.targetId, maskId: me.maskId, extension: "pdf", outputStream: pdfStream }); } } catch (ex) { me.logger.error(["error rendering report '{0}' (templateId='{1}')", name, me.templateId], ex); } finally { if (foStream) { foStream.close(); } if (pdfStream) { pdfStream.close(); } } return result; } });