Search in sources :

Example 1 with FOUserAgent

use of org.apache.fop.apps.FOUserAgent in project opennms by OpenNMS.

the class OnmsPdfViewResolver method resolveView.

@Override
public void resolveView(ServletRequest request, ServletResponse response, Preferences preferences, Object viewData) throws Exception {
    InputStream is = new ByteArrayInputStream(((String) viewData).getBytes(StandardCharsets.UTF_8));
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    FopFactory fopFactory = FopFactory.newInstance();
    fopFactory.setStrictValidation(false);
    FOUserAgent foUserAgent = fopFactory.newFOUserAgent();
    Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent, out);
    TransformerFactory tfact = TransformerFactory.newInstance();
    Transformer transformer = tfact.newTransformer();
    Source src = new StreamSource(is);
    Result res = new SAXResult(fop.getDefaultHandler());
    transformer.transform(src, res);
    byte[] contents = out.toByteArray();
    response.setContentLength(contents.length);
    response.getOutputStream().write(contents);
}
Also used : TransformerFactory(javax.xml.transform.TransformerFactory) Transformer(javax.xml.transform.Transformer) FOUserAgent(org.apache.fop.apps.FOUserAgent) ByteArrayInputStream(java.io.ByteArrayInputStream) InputStream(java.io.InputStream) Fop(org.apache.fop.apps.Fop) StreamSource(javax.xml.transform.stream.StreamSource) ByteArrayOutputStream(java.io.ByteArrayOutputStream) FopFactory(org.apache.fop.apps.FopFactory) StreamSource(javax.xml.transform.stream.StreamSource) Source(javax.xml.transform.Source) Result(javax.xml.transform.Result) SAXResult(javax.xml.transform.sax.SAXResult) SAXResult(javax.xml.transform.sax.SAXResult) ByteArrayInputStream(java.io.ByteArrayInputStream)

Example 2 with FOUserAgent

use of org.apache.fop.apps.FOUserAgent in project camel by apache.

the class FopProducer method process.

public void process(Exchange exchange) throws Exception {
    FOUserAgent userAgent = fopFactory.newFOUserAgent();
    Map<String, Object> headers = exchange.getIn().getHeaders();
    setRenderParameters(userAgent, headers);
    setEncryptionParameters(userAgent, headers);
    setUserAgentRendererOptions(userAgent, headers);
    String outputFormat = getOutputFormat(exchange);
    Source src = exchange.getIn().getBody(StreamSource.class);
    OutputStream out = transform(userAgent, outputFormat, src);
    exchange.getOut().setBody(out);
    // propagate headers
    exchange.getOut().setHeaders(headers);
}
Also used : FOUserAgent(org.apache.fop.apps.FOUserAgent) OutputStream(java.io.OutputStream) ByteArrayOutputStream(java.io.ByteArrayOutputStream) StreamSource(javax.xml.transform.stream.StreamSource) Source(javax.xml.transform.Source)

Example 3 with FOUserAgent

use of org.apache.fop.apps.FOUserAgent in project OpenClinica by OpenClinica.

the class PdfProcessingFunction method run.

/*
     * The run() method.  Note that we will assume that all variables (i.e. file
     * paths) are set here.
     * 
     * Running this will open a file stream, perform a transform with the *.fo 
     * file (note, does not necessarily have to have a *.fo suffix) and then 
     * return a success/fail message.
     * (non-Javadoc)
     * @see org.akaza.openclinica.bean.service.ProcessingInterface#run()
     */
public ProcessingResultType run() {
    // FopFactory fopFactory = FopFactory.newInstance(); 
    FopFactory fopFactory = FopFactory.newInstance();
    //   FopFactory fopFactory = FopFactory.newInstance(new File(".").toURI());
    OutputStream out = null;
    File outputFile = null;
    String zipName = "_";
    File xslFile = null;
    try {
        FOUserAgent foUserAgent = fopFactory.newFOUserAgent();
        //set the renderer to be PDF
        // the expected sequence here will be xml -> xslt -> fo -> pdf
        // where fo is the transformed file
        File procExportDirectory;
        File[] oldFiles = null;
        if (this.getExportFileName() != null && this.getLocation() != null) {
            procExportDirectory = new File(this.getLocation());
            if (!procExportDirectory.isDirectory()) {
                procExportDirectory.mkdir();
            }
            outputFile = new File(procExportDirectory + File.separator + this.getExportFileName() + ".pdf");
            zipName = (procExportDirectory + File.separator + this.getExportFileName() + ".zip");
        } else {
            //getODMFILENAme is a path of .fo object
            outputFile = new File(this.getODMXMLFileName() + ".pdf");
            zipName = this.getODMXMLFileName() + ".zip";
        }
        //transformfilename is abs path+file name(.fo) transformFileName and odmxmlfile name are same?
        xslFile = new File(this.getTransformFileName());
        out = new FileOutputStream(outputFile);
        out = new BufferedOutputStream(out);
        Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent, out);
        TransformerFactory factory = TransformerFactory.newInstance();
        // identity transformer
        Transformer transformer = factory.newTransformer();
        Source src = new StreamSource(xslFile);
        // Resulting SAX events (the generated FO) must be piped through to FOP
        Result res = new SAXResult(fop.getDefaultHandler());
        // Start XSLT transformation and FOP processing
        transformer.transform(src, res);
        // Result processing
        FormattingResults foResults = fop.getResults();
        java.util.List pageSequences = foResults.getPageSequences();
        for (java.util.Iterator it = pageSequences.iterator(); it.hasNext(); ) {
            PageSequenceResults pageSequenceResults = (PageSequenceResults) it.next();
            logger.debug("PageSequence " + (String.valueOf(pageSequenceResults.getID()).length() > 0 ? pageSequenceResults.getID() : "<no id>") + " generated " + pageSequenceResults.getPageCount() + " pages.");
        }
        logger.debug("Generated " + foResults.getPageCount() + " pages in total.");
        out.close();
        if (isZip()) {
            if (outputFile != null) {
                ZipOutputStream zipOut = null;
                FileInputStream fis = null;
                try {
                    fis = new FileInputStream(outputFile);
                    zipOut = new ZipOutputStream(new FileOutputStream(new File(zipName)));
                    zipOut.putNextEntry(new ZipEntry(outputFile.getName()));
                    int bytesRead;
                    byte[] buff = new byte[512];
                    while ((bytesRead = fis.read(buff)) != -1) {
                        zipOut.write(buff, 0, bytesRead);
                    }
                    zipOut.closeEntry();
                    zipOut.finish();
                } catch (Exception e) {
                    e.printStackTrace();
                } finally {
                    if (zipOut != null)
                        zipOut.close();
                    if (fis != null)
                        fis.close();
                }
            }
            setArchivedFileName(new File(zipName).getName());
        } else
            setArchivedFileName(outputFile.getName());
    } catch (Exception e) {
        e.printStackTrace();
        ProcessingResultType resultError = ProcessingResultType.FAIL;
        // view datasets page
        resultError.setUrl(CoreResources.getField("sysURL.base") + "ViewDatasets");
        resultError.setArchiveMessage("Failure thrown: " + e.getMessage());
        resultError.setDescription("Your job failed with the message of: " + e.getMessage());
        return resultError;
    } finally {
    }
    if (isDeleteOld()) {
        deleteOldFiles(this.getOldFiles(), outputFile, zipName);
    }
    if (isZip()) {
        outputFile.delete();
    }
    //delete intermediatory .fo file
    if (xslFile != null)
        xslFile.delete();
    // otherwise return a success with the URL link
    ProcessingResultType resultSuccess = ProcessingResultType.SUCCESS;
    resultSuccess.setUrl(CoreResources.getField("sysURL.base") + // to the pdf
    "AccessFile?fileId=");
    resultSuccess.setArchiveMessage("Success");
    resultSuccess.setDescription("Your job succeeded please find the URL below");
    return resultSuccess;
}
Also used : Transformer(javax.xml.transform.Transformer) FOUserAgent(org.apache.fop.apps.FOUserAgent) ZipOutputStream(java.util.zip.ZipOutputStream) BufferedOutputStream(java.io.BufferedOutputStream) OutputStream(java.io.OutputStream) FileOutputStream(java.io.FileOutputStream) ZipEntry(java.util.zip.ZipEntry) PageSequenceResults(org.apache.fop.apps.PageSequenceResults) FopFactory(org.apache.fop.apps.FopFactory) StreamSource(javax.xml.transform.stream.StreamSource) Source(javax.xml.transform.Source) Result(javax.xml.transform.Result) SAXResult(javax.xml.transform.sax.SAXResult) BufferedOutputStream(java.io.BufferedOutputStream) TransformerFactory(javax.xml.transform.TransformerFactory) Fop(org.apache.fop.apps.Fop) StreamSource(javax.xml.transform.stream.StreamSource) FormattingResults(org.apache.fop.apps.FormattingResults) FileInputStream(java.io.FileInputStream) FOPException(org.apache.fop.apps.FOPException) SAXResult(javax.xml.transform.sax.SAXResult) ZipOutputStream(java.util.zip.ZipOutputStream) FileOutputStream(java.io.FileOutputStream) File(java.io.File)

Aggregations

Source (javax.xml.transform.Source)3 StreamSource (javax.xml.transform.stream.StreamSource)3 FOUserAgent (org.apache.fop.apps.FOUserAgent)3 ByteArrayOutputStream (java.io.ByteArrayOutputStream)2 OutputStream (java.io.OutputStream)2 Result (javax.xml.transform.Result)2 Transformer (javax.xml.transform.Transformer)2 TransformerFactory (javax.xml.transform.TransformerFactory)2 SAXResult (javax.xml.transform.sax.SAXResult)2 Fop (org.apache.fop.apps.Fop)2 FopFactory (org.apache.fop.apps.FopFactory)2 BufferedOutputStream (java.io.BufferedOutputStream)1 ByteArrayInputStream (java.io.ByteArrayInputStream)1 File (java.io.File)1 FileInputStream (java.io.FileInputStream)1 FileOutputStream (java.io.FileOutputStream)1 InputStream (java.io.InputStream)1 ZipEntry (java.util.zip.ZipEntry)1 ZipOutputStream (java.util.zip.ZipOutputStream)1 FOPException (org.apache.fop.apps.FOPException)1