Search in sources :

Example 1 with FormattingResults

use of org.apache.fop.apps.FormattingResults 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

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