Package graphical

Source Code of graphical.JPEGCreator

/*
* ************************************************************************
*
*  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*  Copyright 2008 by Sun Microsystems, Inc.
*
*  OpenOffice.org - a multi-platform office productivity suite
*
*  $RCSfile: JPEGCreator.java,v $
*  $Revision: 1.1.2.2 $
*
*  This file is part of OpenOffice.org.
*
*  OpenOffice.org is free software: you can redistribute it and/or modify
*  it under the terms of the GNU Lesser General Public License version 3
*  only, as published by the Free Software Foundation.
*
*  OpenOffice.org is distributed in the hope that it will be useful,
*  but WITHOUT ANY WARRANTY; without even the implied warranty of
*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*  GNU Lesser General Public License version 3 for more details
*  (a copy is included in the LICENSE file that accompanied this code).
*
*  You should have received a copy of the GNU Lesser General Public License
*  version 3 along with OpenOffice.org.  If not, see
*  <http://www.openoffice.org/license.html>
*  for a copy of the LGPLv3 License.
*
* ***********************************************************************
*/

package graphical;

import helper.OSHelper;
import helper.ProcessHandler;
import helper.StringHelper;
import java.io.File;

/**
*
* @author ll93751
*/
public class JPEGCreator extends EnhancedComplexTestCase
{
    // @Override
    public String[] getTestMethodNames()
    {
        return new String[]{"PostscriptOrPDFToJPEG"};
    }

    /**
     * test function.
     */
    public void PostscriptOrPDFToJPEG()
    {
        GlobalLogWriter.set(log);
        ParameterHelper aParam = new ParameterHelper(param);
       
        // run through all documents found in Inputpath
        foreachPSorPDFinInputPath(aParam);
    }
   

    public void checkOneFile(String _sDocumentName, String _sResult, ParameterHelper _aParams) throws OfficeException
    {
         GlobalLogWriter.println("Document: " + _sDocumentName + " results: " + _sResult);
//         IOffice aOffice = new Office(_aParams, _sResult);
//         aOffice.start();
//         aOffice.load(_sDocumentName);
//         aOffice.storeAsPostscript();
//         aOffice.close();
         String sJPEGNameSchema = createJPEG(_sDocumentName, "", _aParams);
        
         // store information only if jpeg files exists
         int nPages = countPages(sJPEGNameSchema);
         if (nPages > 0)
         {
             String sIndexFile = FileHelper.appendPath(_sResult, "index.ini");        
             File aIndexFile = new File(sIndexFile);
             if (aIndexFile.exists())
             {
                 // store only if an index file exists
                 IniFile aIniFile = new IniFile(sIndexFile);
                 String sBasename = FileHelper.getBasename(_sDocumentName);
                 aIniFile.insertValue(sBasename, "jpegschema", sJPEGNameSchema);
                 aIniFile.insertValue(sBasename, "pages", nPages);
                 aIniFile.close();
             }
         }
    }
   
/**
* create out of a given Postscript/PDF _sFile a list of JPEGs, one for every page
* @param _sFile
* @param _sAdditional
* @param _aParam
* @return the schema of the first jpeg name
*/
    String createJPEG(String _sFile, String _sAdditional, ParameterHelper _aParam)
        {
            if (_sFile.startsWith("file:///"))
            {
                _sFile = FileHelper.getSystemPathFromFileURL(_sFile);
            }
            File aFile = new File(_sFile);
            if (aFile.exists())
            {
                String sAbsFile = aFile.getAbsolutePath();
                if (!sAbsFile.equals(_sFile))
                {
                    _sFile = sAbsFile;
                }
            }
            else
            {
                GlobalLogWriter.get().println("File: '" + _sFile + "' doesn't exist.");
                return "";
            }
            String sFileDir = FileHelper.getPath(_sFile);
            String sBasename = FileHelper.getBasename(_sFile);
//            String sNameNoSuffix = FileHelper.getNameNoSuffix(sBasename);
               
            String sTmpDir = util.utils.getUsersTempDir();
            if (_aParam.getOutputPath() != null)
            {
                sTmpDir = _aParam.getOutputPath();
            }
           
            String sJPEGNameSchema = "";
            if (_sFile.toLowerCase().endsWith("ps") ||
                _sFile.toLowerCase().endsWith("prn") ||
                _sFile.toLowerCase().endsWith("pdf"))
            {
                // seems to be a Postscript of PDF file
               
                sJPEGNameSchema = createJPEGsFromPostscript(sTmpDir, sFileDir, sBasename, _aParam.getResolutionInDPI());
            }
            else if (_sFile.toLowerCase().endsWith("jpg") ||
                     _sFile.toLowerCase().endsWith("jpeg"))
            {
                // do nothing, it's already a picture.
                return _sFile;
            }
            else
            {
                // we assume it's an office document.
                // Office files will not handled here, we need a PS or PDF file
            }
            return sJPEGNameSchema;
        }
   
        private String getJPEGName(String _sOutputPath, String _sBasename, int _nResolutionInDPI, String _sGS_PageOutput)
        {
            // String fs = System.getProperty("file.separator");
            String sName = _sBasename + "_" + String.valueOf(_nResolutionInDPI) + "DPI_" + _sGS_PageOutput + ".jpg";
            String sJPEGName = FileHelper.appendPath(_sOutputPath, sName);
            return sJPEGName;
        }

        /**
     * Create via ghostscript (gs) from the reference file for every page a JPEG file
     *
     * MUST set:
     * m_sOutputPath, m_sReferenceFile, m_sReferencePath
     *
     * return exit code from gs command
     */

     private static final String m_sGS_PageOutput = "%04d";
    
     private String createJPEGsFromPostscript(String _sOutputPath, String _sSourcePath, String _sSourceFile, int _nResolutionInDPI)
        {           
            FileHelper.makeDirectories("", _sOutputPath);

            // create a jpeg from original prn
            // String fs = System.getProperty("file.separator");

            String sJPEGNameSchema = getJPEGName(_sOutputPath, _sSourceFile, _nResolutionInDPI, m_sGS_PageOutput);
            String sPostscriptOrPDFFile = FileHelper.appendPath(_sSourcePath, _sSourceFile);
            String sGhostscriptEXE = "gs";
            if (OSHelper.isWindows())
            {
                sGhostscriptEXE = "gswin32c.exe";
            }
           
//            String sCommand = sGhostscriptEXE + " -dNOPROMPT -dBATCH -sDEVICE=jpeg -r" + String.valueOf(_nResolutionInDPI) + " -dNOPAUSE -sOutputFile=" + StringHelper.doubleQuoteIfNeed(sJPGFilename) + " " + StringHelper.doubleQuoteIfNeed(sOriginalFile);
            String[] sCommandArray =
                {
                    sGhostscriptEXE,
                    "-dNOPROMPT",
                    "-dBATCH",
                    "-sDEVICE=jpeg",
                    "-r" + String.valueOf(_nResolutionInDPI),
                    "-dNOPAUSE",
                    "-sOutputFile=" + sJPEGNameSchema,
                    sPostscriptOrPDFFile               
                               
                               
                               
                };
            // System.out.println("Start Command array");
            // try
            // {
            //     Runtime.getRuntime().exec(sCommandArray);
            // } catch (Exception e) {
            //     System.out.println("FAILED");
            // }
            // System.out.println("done");
           
// TODO: gives ghostscript an error we can handle?
            ProcessHandler aHandler = new ProcessHandler(sCommandArray);
            boolean bBackValue = aHandler.executeSynchronously();
            assure("There seems to be a problem with ghostscript", bBackValue, true);
            int nExitCode = aHandler.getExitCode();
            // ArrayList m_aFileList = new ArrayList();

            // String sJPEGNameSchema = "";
            if (nExitCode == 0)
            {
                // TODO: return a real filename, due to the fact we don't know how much files are created, maybe better to return a list
                int nPages = countPages(sJPEGNameSchema);
                if (nPages == 0)
                {
                    // return only a valid schema name if there at least one page.
                    sJPEGNameSchema = "";
                }
            }
            else
            {
                assure("There seems to be a problem with ghostscript and '" + sPostscriptOrPDFFile + "' exit code: " + nExitCode, false, true);
                GlobalLogWriter.println("Warning: There seems to be a problem with '" + sGhostscriptEXE + "'...");
            }
            // String[] aList = new String[m_aFileList.size()];
            // aList = (String[])m_aFileList.toArray(aList);
            return sJPEGNameSchema; // sNewJPEGFilename;
        }
   
    public static String getFilenameForJPEGSchema(String _sJPEGSchema, int _nPage)
        {
            if (_nPage < 1 || _nPage > 9999)
            {
                return "";
            }
            final String sFilename = util.utils.replaceAll13(_sJPEGSchema, m_sGS_PageOutput, StringHelper.createValueString(_nPage, 4));
            return sFilename;
        }

        /**
         * Return the number of really exists JPEG files
         * Give a JPEG Schema which contains something like '%04d' which will be converted by a number between 0001 and 9999 always
         * with leading '0' (zero)
         * @param _sJPEGSchema
         * @return number of really existing pages of a given JPEG schema
         */
    public int countPages(String _sJPEGSchema)
    {
        int nPages = 0;
        if (_sJPEGSchema.length() > 0)
        {
            // TODO: if there doesn't exists a '%04d' in the schema we will return 9999 which is a little bit wrong here.
            for (int i=1;i<10000;i++)
            {
                String sNewJPEGFilename = getFilenameForJPEGSchema(_sJPEGSchema, i);
                if (FileHelper.exists(sNewJPEGFilename))
                {
                    // m_aFileList.add(sNewJPEGFilename); // as long as the files exist, fill the array
                    nPages ++;
                }
                else
                {
                    break;                             // stop file check
                }
            }
        }
        return nPages;
    }
   
    public static void main(String [] _args)
    {
// DONE: give an index.ini file ok
//        String args[] = {
//            "-TimeOut", "3600000",
//            "-tb", "java_complex",
//            "-o", "graphical.JPEGCreator",
//            "-DOC_COMPARATOR_INPUT_PATH", "C:\\CWS\\temp\\output\\index.ini",
//            "-DOC_COMPARATOR_OUTPUT_PATH", "C:\\CWS\\temp\\output",
//            "-DOC_COMPARATOR_PRINT_MAX_PAGE", "9999",
//            "-DOC_COMPARATOR_GFX_OUTPUT_DPI_RESOLUTION", "180",
//            "-DOC_COMPARATOR_HTML_OUTPUT_PREFIX", "http://so-gfxcmp-lin.germany.sun.com/gfxcmp_ui/cw.php?inifile=",
////            "-DOC_COMPARATOR_REFERENCE_CREATOR_TYPE", "PDF",      /* default: "OOo" */
////            "-DOC_COMPARATOR_REFERENCE_CREATOR_TYPE", "msoffice", /* default: "OOo" */
////            "-OFFICE_VIEWABLE", "false",
//            "-AppExecutionCommand", "\"C:/Programme/sun/staroffice 9/program/soffice.exe\"  -norestore -nocrashreport -accept=pipe,name=ll93751;urp;",
//            "-NoOffice"
//        };

// Done: give a directory, where exist pdf/ps files ok.
// Done: inputpath (given file) doesn't exists, ok.
// Done: give a ps/pdf file. ok.
       
        String args[] = {
            "-TimeOut", "3600000",
            "-tb", "java_complex",
            "-o", "graphical.JPEGCreator",
            "-DOC_COMPARATOR_INPUT_PATH", "C:\\CWS\\temp\\output\\Names7.odt.pdf",
            "-DOC_COMPARATOR_OUTPUT_PATH", "C:\\CWS\\temp\\output",
            "-DOC_COMPARATOR_PRINT_MAX_PAGE", "9999",
            "-DOC_COMPARATOR_GFX_OUTPUT_DPI_RESOLUTION", "180",
            "-DOC_COMPARATOR_HTML_OUTPUT_PREFIX", "http://so-gfxcmp-lin.germany.sun.com/gfxcmp_ui/cw.php?inifile=",
//            "-DOC_COMPARATOR_REFERENCE_CREATOR_TYPE", "PDF",      /* default: "OOo" */
//            "-DOC_COMPARATOR_REFERENCE_CREATOR_TYPE", "msoffice", /* default: "OOo" */
//            "-OFFICE_VIEWABLE", "false",
            "-AppExecutionCommand", "\"C:/Programme/sun/staroffice 9/program/soffice.exe\"  -norestore -nocrashreport -accept=pipe,name=ll93751;urp;",
            "-NoOffice"
        };
       
        org.openoffice.Runner.main(args);
    }

}
TOP

Related Classes of graphical.JPEGCreator

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.