1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski package graphical;
25*b1cdbd2cSJim Jagielski 
26*b1cdbd2cSJim Jagielski import helper.OSHelper;
27*b1cdbd2cSJim Jagielski import helper.ProcessHandler;
28*b1cdbd2cSJim Jagielski import helper.StringHelper;
29*b1cdbd2cSJim Jagielski import java.io.File;
30*b1cdbd2cSJim Jagielski 
31*b1cdbd2cSJim Jagielski /**
32*b1cdbd2cSJim Jagielski  *
33*b1cdbd2cSJim Jagielski  * @author ll93751
34*b1cdbd2cSJim Jagielski  */
35*b1cdbd2cSJim Jagielski public class JPEGCreator extends EnhancedComplexTestCase
36*b1cdbd2cSJim Jagielski {
37*b1cdbd2cSJim Jagielski     // @Override
getTestMethodNames()38*b1cdbd2cSJim Jagielski     public String[] getTestMethodNames()
39*b1cdbd2cSJim Jagielski     {
40*b1cdbd2cSJim Jagielski         return new String[]{"PostscriptOrPDFToJPEG"};
41*b1cdbd2cSJim Jagielski     }
42*b1cdbd2cSJim Jagielski 
43*b1cdbd2cSJim Jagielski     /**
44*b1cdbd2cSJim Jagielski      * test function.
45*b1cdbd2cSJim Jagielski      */
PostscriptOrPDFToJPEG()46*b1cdbd2cSJim Jagielski     public void PostscriptOrPDFToJPEG()
47*b1cdbd2cSJim Jagielski     {
48*b1cdbd2cSJim Jagielski         GlobalLogWriter.set(log);
49*b1cdbd2cSJim Jagielski         ParameterHelper aParam = new ParameterHelper(param);
50*b1cdbd2cSJim Jagielski 
51*b1cdbd2cSJim Jagielski         // run through all documents found in Inputpath
52*b1cdbd2cSJim Jagielski         foreachPSorPDFinInputPath(aParam);
53*b1cdbd2cSJim Jagielski     }
54*b1cdbd2cSJim Jagielski 
55*b1cdbd2cSJim Jagielski 
checkOneFile(String _sDocumentName, String _sResult, ParameterHelper _aParams)56*b1cdbd2cSJim Jagielski     public void checkOneFile(String _sDocumentName, String _sResult, ParameterHelper _aParams) throws OfficeException
57*b1cdbd2cSJim Jagielski     {
58*b1cdbd2cSJim Jagielski          GlobalLogWriter.println("  Document: " + _sDocumentName);
59*b1cdbd2cSJim Jagielski          GlobalLogWriter.println("   results: " + _sResult);
60*b1cdbd2cSJim Jagielski //         IOffice aOffice = new Office(_aParams, _sResult);
61*b1cdbd2cSJim Jagielski //         aOffice.start();
62*b1cdbd2cSJim Jagielski //         aOffice.load(_sDocumentName);
63*b1cdbd2cSJim Jagielski //         aOffice.storeAsPostscript();
64*b1cdbd2cSJim Jagielski //         aOffice.close();
65*b1cdbd2cSJim Jagielski          String sJPEGNameSchema = createJPEG(_sDocumentName, "", _aParams);
66*b1cdbd2cSJim Jagielski 
67*b1cdbd2cSJim Jagielski          // store information only if jpeg files exists
68*b1cdbd2cSJim Jagielski          int nPages = countPages(sJPEGNameSchema);
69*b1cdbd2cSJim Jagielski          if (nPages > 0)
70*b1cdbd2cSJim Jagielski          {
71*b1cdbd2cSJim Jagielski              createSmallPictures(sJPEGNameSchema);
72*b1cdbd2cSJim Jagielski 
73*b1cdbd2cSJim Jagielski              // read out tolerance file
74*b1cdbd2cSJim Jagielski              String sFileDir = FileHelper.getPath(_sDocumentName);
75*b1cdbd2cSJim Jagielski              String sBasename = FileHelper.getBasename(_sDocumentName);
76*b1cdbd2cSJim Jagielski              int nTolerance = 0;
77*b1cdbd2cSJim Jagielski              String sToleranceFile = FileHelper.appendPath(sFileDir, "tolerance.ini");
78*b1cdbd2cSJim Jagielski              File aToleranceFile = new File(sToleranceFile);
79*b1cdbd2cSJim Jagielski              if (aToleranceFile.exists())
80*b1cdbd2cSJim Jagielski              {
81*b1cdbd2cSJim Jagielski                  IniFile aIniFile = new IniFile(sToleranceFile);
82*b1cdbd2cSJim Jagielski                  nTolerance = aIniFile.getIntValue(sBasename, "accept", 0); // default for all pages
83*b1cdbd2cSJim Jagielski                  aIniFile.close();
84*b1cdbd2cSJim Jagielski              }
85*b1cdbd2cSJim Jagielski 
86*b1cdbd2cSJim Jagielski              String sIndexFile = FileHelper.appendPath(_sResult, "index.ini");
87*b1cdbd2cSJim Jagielski              File aIndexFile = new File(sIndexFile);
88*b1cdbd2cSJim Jagielski              if (aIndexFile.exists())
89*b1cdbd2cSJim Jagielski              {
90*b1cdbd2cSJim Jagielski                  // store only if an index file exists
91*b1cdbd2cSJim Jagielski                  IniFile aIniFile = new IniFile(sIndexFile);
92*b1cdbd2cSJim Jagielski                  aIniFile.insertValue(sBasename, "jpegschema", sJPEGNameSchema);
93*b1cdbd2cSJim Jagielski                  aIniFile.insertValue(sBasename, "pages", nPages);
94*b1cdbd2cSJim Jagielski                  aIniFile.insertValue(sBasename, "tolerance", nTolerance);
95*b1cdbd2cSJim Jagielski                  aIniFile.close();
96*b1cdbd2cSJim Jagielski              }
97*b1cdbd2cSJim Jagielski          }
98*b1cdbd2cSJim Jagielski          else
99*b1cdbd2cSJim Jagielski          {
100*b1cdbd2cSJim Jagielski              assure("There are no pages in document:'" + _sDocumentName + "', maybe document currupt?", false, true);
101*b1cdbd2cSJim Jagielski          }
102*b1cdbd2cSJim Jagielski     }
103*b1cdbd2cSJim Jagielski 
104*b1cdbd2cSJim Jagielski /**
105*b1cdbd2cSJim Jagielski  * Create a lot of smaller and nicer Pictures of the big fat pages.
106*b1cdbd2cSJim Jagielski  * Looks better
107*b1cdbd2cSJim Jagielski  * @param _sJPEGSchema
108*b1cdbd2cSJim Jagielski  */
createSmallPictures(String _sJPEGSchema)109*b1cdbd2cSJim Jagielski     public void createSmallPictures(String _sJPEGSchema)
110*b1cdbd2cSJim Jagielski     {
111*b1cdbd2cSJim Jagielski         ParameterHelper aParam = new ParameterHelper(param);
112*b1cdbd2cSJim Jagielski         if (! aParam.createSmallPictures())
113*b1cdbd2cSJim Jagielski         {
114*b1cdbd2cSJim Jagielski             return;
115*b1cdbd2cSJim Jagielski         }
116*b1cdbd2cSJim Jagielski 
117*b1cdbd2cSJim Jagielski         int nPages = 0;
118*b1cdbd2cSJim Jagielski         if (_sJPEGSchema.length() > 0)
119*b1cdbd2cSJim Jagielski         {
120*b1cdbd2cSJim Jagielski             // TODO: if there doesn't exists a '%04d' in the schema we will return 9999 which is a little bit wrong here.
121*b1cdbd2cSJim Jagielski             for (int i=1;i<10000;i++)
122*b1cdbd2cSJim Jagielski             {
123*b1cdbd2cSJim Jagielski                 String sJPEGFilename = getFilenameForJPEGSchema(_sJPEGSchema, i);
124*b1cdbd2cSJim Jagielski                 if (FileHelper.exists(sJPEGFilename))
125*b1cdbd2cSJim Jagielski                 {
126*b1cdbd2cSJim Jagielski                     convertToNearSameFileWithWidth340(sJPEGFilename);
127*b1cdbd2cSJim Jagielski                     // m_aFileList.add(sNewJPEGFilename); // as long as the files exist, fill the array
128*b1cdbd2cSJim Jagielski                     nPages ++;
129*b1cdbd2cSJim Jagielski                 }
130*b1cdbd2cSJim Jagielski                 else
131*b1cdbd2cSJim Jagielski                 {
132*b1cdbd2cSJim Jagielski                     break;                             // stop file check
133*b1cdbd2cSJim Jagielski                 }
134*b1cdbd2cSJim Jagielski             }
135*b1cdbd2cSJim Jagielski         }
136*b1cdbd2cSJim Jagielski         // return nPages;
137*b1cdbd2cSJim Jagielski     }
138*b1cdbd2cSJim Jagielski 
139*b1cdbd2cSJim Jagielski /**
140*b1cdbd2cSJim Jagielski  * convert a picture to a new picture with 340 pixel width.
141*b1cdbd2cSJim Jagielski  * @param _sJPEGFilename
142*b1cdbd2cSJim Jagielski  */
convertToNearSameFileWithWidth340(String _sJPEGFilename)143*b1cdbd2cSJim Jagielski public static void convertToNearSameFileWithWidth340(String _sJPEGFilename)
144*b1cdbd2cSJim Jagielski {
145*b1cdbd2cSJim Jagielski     ParameterHelper aParam = new ParameterHelper(param);
146*b1cdbd2cSJim Jagielski     if (! aParam.createSmallPictures())
147*b1cdbd2cSJim Jagielski     {
148*b1cdbd2cSJim Jagielski         return;
149*b1cdbd2cSJim Jagielski     }
150*b1cdbd2cSJim Jagielski     String sJPEGFilename = _sJPEGFilename.replaceAll("\\\\", "/");
151*b1cdbd2cSJim Jagielski //    if (OSHelper.isWindows())
152*b1cdbd2cSJim Jagielski //    {
153*b1cdbd2cSJim Jagielski //        sJPEGFilename = sJPEGFilename.replaceAll("/", "\\\\");
154*b1cdbd2cSJim Jagielski //    }
155*b1cdbd2cSJim Jagielski     String sNewJPEGFilename;
156*b1cdbd2cSJim Jagielski     sNewJPEGFilename = util.utils.replaceAll13(sJPEGFilename, ".jpg", "_w340.jpg");
157*b1cdbd2cSJim Jagielski     convertToWidth340(sJPEGFilename, sNewJPEGFilename);
158*b1cdbd2cSJim Jagielski }
159*b1cdbd2cSJim Jagielski 
160*b1cdbd2cSJim Jagielski     /**
161*b1cdbd2cSJim Jagielski  * convert chart2_Regression.ods.ps_180DPI_0001.jpg -filter Catrom -resize
162*b1cdbd2cSJim Jagielski 340x chart2_Regression.ods.ps_180DPI_0001_w340.jpg
163*b1cdbd2cSJim Jagielski 
164*b1cdbd2cSJim Jagielski Point wie bisher
165*b1cdbd2cSJim Jagielski Cubic schlecht, weil unscharf
166*b1cdbd2cSJim Jagielski ...
167*b1cdbd2cSJim Jagielski Triangle ganz brauchbar (default?)
168*b1cdbd2cSJim Jagielski Catrom am besten
169*b1cdbd2cSJim Jagielski 
170*b1cdbd2cSJim Jagielski  * @param _sFrom
171*b1cdbd2cSJim Jagielski  * @param _To
172*b1cdbd2cSJim Jagielski  */
convertToWidth340(String _sFrom, String _To)173*b1cdbd2cSJim Jagielski private static void convertToWidth340(String _sFrom, String _To)
174*b1cdbd2cSJim Jagielski {
175*b1cdbd2cSJim Jagielski             // int nResult = 0;
176*b1cdbd2cSJim Jagielski 
177*b1cdbd2cSJim Jagielski             String sConvertEXE = "convert";
178*b1cdbd2cSJim Jagielski             if (OSHelper.isLinuxIntel())
179*b1cdbd2cSJim Jagielski             {
180*b1cdbd2cSJim Jagielski                 sConvertEXE = "convert";
181*b1cdbd2cSJim Jagielski             }
182*b1cdbd2cSJim Jagielski             if (OSHelper.isWindows())
183*b1cdbd2cSJim Jagielski             {
184*b1cdbd2cSJim Jagielski                 // TODO!
185*b1cdbd2cSJim Jagielski                 // HACK Hard coded!
186*b1cdbd2cSJim Jagielski                 // sConvertEXE = "C:\\Programme\\ImageMagick-6.0.3-q8\\convert.exe";
187*b1cdbd2cSJim Jagielski                 sConvertEXE = "convert.exe";
188*b1cdbd2cSJim Jagielski                 String sConvertPath = (String)param.get("imagemagick.path");
189*b1cdbd2cSJim Jagielski                 if (sConvertPath != null)
190*b1cdbd2cSJim Jagielski                 {
191*b1cdbd2cSJim Jagielski                     sConvertEXE = FileHelper.appendPath(sConvertPath, sConvertEXE);
192*b1cdbd2cSJim Jagielski                 }
193*b1cdbd2cSJim Jagielski             }
194*b1cdbd2cSJim Jagielski 
195*b1cdbd2cSJim Jagielski             String[] sCommandArray =
196*b1cdbd2cSJim Jagielski                 {
197*b1cdbd2cSJim Jagielski                     sConvertEXE,
198*b1cdbd2cSJim Jagielski                     _sFrom,
199*b1cdbd2cSJim Jagielski                      "-filter", "Catrom",
200*b1cdbd2cSJim Jagielski                     "-resize", "340x",
201*b1cdbd2cSJim Jagielski                     _To
202*b1cdbd2cSJim Jagielski                 };
203*b1cdbd2cSJim Jagielski             ProcessHandler aHandler = new ProcessHandler(sCommandArray);
204*b1cdbd2cSJim Jagielski             boolean bBackValue = aHandler.executeSynchronously();
205*b1cdbd2cSJim Jagielski             int nExitCode = aHandler.getExitCode();
206*b1cdbd2cSJim Jagielski 
207*b1cdbd2cSJim Jagielski             String sBack = aHandler.getOutputText();
208*b1cdbd2cSJim Jagielski             if (sBack.length() > 0)
209*b1cdbd2cSJim Jagielski             {
210*b1cdbd2cSJim Jagielski                 GlobalLogWriter.println("'" + sBack + "'");
211*b1cdbd2cSJim Jagielski             }
212*b1cdbd2cSJim Jagielski             // try to interpret the result, which we get as a String
213*b1cdbd2cSJim Jagielski //            try
214*b1cdbd2cSJim Jagielski //            {
215*b1cdbd2cSJim Jagielski //                int nIdx = sBack.indexOf("\n");
216*b1cdbd2cSJim Jagielski //                if (nIdx > 0)
217*b1cdbd2cSJim Jagielski //                {
218*b1cdbd2cSJim Jagielski //                    sBack = sBack.substring(0, nIdx);
219*b1cdbd2cSJim Jagielski //                }
220*b1cdbd2cSJim Jagielski //
221*b1cdbd2cSJim Jagielski //                nResult = Integer.valueOf(sBack).intValue();
222*b1cdbd2cSJim Jagielski //            }
223*b1cdbd2cSJim Jagielski //            catch(java.lang.NumberFormatException e)
224*b1cdbd2cSJim Jagielski //            {
225*b1cdbd2cSJim Jagielski //                GlobalLogWriter.get().println("Number format exception");
226*b1cdbd2cSJim Jagielski //                nResult = 0;
227*b1cdbd2cSJim Jagielski //            }
228*b1cdbd2cSJim Jagielski             // return nResult;
229*b1cdbd2cSJim Jagielski }
230*b1cdbd2cSJim Jagielski 
231*b1cdbd2cSJim Jagielski /**
232*b1cdbd2cSJim Jagielski  * create out of a given Postscript/PDF _sFile a list of JPEGs, one for every page
233*b1cdbd2cSJim Jagielski  * @param _sFile
234*b1cdbd2cSJim Jagielski  * @param _sAdditional
235*b1cdbd2cSJim Jagielski  * @param _aParam
236*b1cdbd2cSJim Jagielski  * @return the schema of the first jpeg name
237*b1cdbd2cSJim Jagielski  */
createJPEG(String _sFile, String _sAdditional, ParameterHelper _aParam)238*b1cdbd2cSJim Jagielski     String createJPEG(String _sFile, String _sAdditional, ParameterHelper _aParam)
239*b1cdbd2cSJim Jagielski         {
240*b1cdbd2cSJim Jagielski             if (_sFile.startsWith("file:///"))
241*b1cdbd2cSJim Jagielski             {
242*b1cdbd2cSJim Jagielski                 _sFile = FileHelper.getSystemPathFromFileURL(_sFile);
243*b1cdbd2cSJim Jagielski             }
244*b1cdbd2cSJim Jagielski             File aFile = new File(_sFile);
245*b1cdbd2cSJim Jagielski             if (aFile.exists())
246*b1cdbd2cSJim Jagielski             {
247*b1cdbd2cSJim Jagielski                 String sAbsFile = aFile.getAbsolutePath();
248*b1cdbd2cSJim Jagielski                 if (!sAbsFile.equals(_sFile))
249*b1cdbd2cSJim Jagielski                 {
250*b1cdbd2cSJim Jagielski                     _sFile = sAbsFile;
251*b1cdbd2cSJim Jagielski                 }
252*b1cdbd2cSJim Jagielski             }
253*b1cdbd2cSJim Jagielski             else
254*b1cdbd2cSJim Jagielski             {
255*b1cdbd2cSJim Jagielski                 GlobalLogWriter.println("File: '" + _sFile + "' doesn't exist.");
256*b1cdbd2cSJim Jagielski                 return "";
257*b1cdbd2cSJim Jagielski             }
258*b1cdbd2cSJim Jagielski             String sFileDir = FileHelper.getPath(_sFile);
259*b1cdbd2cSJim Jagielski             String sBasename = FileHelper.getBasename(_sFile);
260*b1cdbd2cSJim Jagielski //            String sNameNoSuffix = FileHelper.getNameNoSuffix(sBasename);
261*b1cdbd2cSJim Jagielski 
262*b1cdbd2cSJim Jagielski             String sTmpDir = util.utils.getUsersTempDir();
263*b1cdbd2cSJim Jagielski             if (_aParam.getOutputPath() != null)
264*b1cdbd2cSJim Jagielski             {
265*b1cdbd2cSJim Jagielski                 sTmpDir = _aParam.getOutputPath();
266*b1cdbd2cSJim Jagielski             }
267*b1cdbd2cSJim Jagielski 
268*b1cdbd2cSJim Jagielski             String sJPEGNameSchema = "";
269*b1cdbd2cSJim Jagielski             if (_sFile.toLowerCase().endsWith("ps") ||
270*b1cdbd2cSJim Jagielski                 _sFile.toLowerCase().endsWith("prn") ||
271*b1cdbd2cSJim Jagielski                 _sFile.toLowerCase().endsWith("pdf"))
272*b1cdbd2cSJim Jagielski             {
273*b1cdbd2cSJim Jagielski                 // seems to be a Postscript of PDF file
274*b1cdbd2cSJim Jagielski 
275*b1cdbd2cSJim Jagielski                 sJPEGNameSchema = createJPEGsFromPostscript(sTmpDir, sFileDir, sBasename, _aParam.getResolutionInDPI());
276*b1cdbd2cSJim Jagielski             }
277*b1cdbd2cSJim Jagielski             else if (_sFile.toLowerCase().endsWith("jpg") ||
278*b1cdbd2cSJim Jagielski                      _sFile.toLowerCase().endsWith("jpeg"))
279*b1cdbd2cSJim Jagielski             {
280*b1cdbd2cSJim Jagielski                 // do nothing, it's already a picture.
281*b1cdbd2cSJim Jagielski                 return _sFile;
282*b1cdbd2cSJim Jagielski             }
283*b1cdbd2cSJim Jagielski             else
284*b1cdbd2cSJim Jagielski             {
285*b1cdbd2cSJim Jagielski                 // we assume it's an office document.
286*b1cdbd2cSJim Jagielski                 // Office files will not handled here, we need a PS or PDF file
287*b1cdbd2cSJim Jagielski             }
288*b1cdbd2cSJim Jagielski             return sJPEGNameSchema;
289*b1cdbd2cSJim Jagielski         }
290*b1cdbd2cSJim Jagielski 
getJPEGName(String _sOutputPath, String _sBasename, int _nResolutionInDPI, String _sGS_PageOutput)291*b1cdbd2cSJim Jagielski         private String getJPEGName(String _sOutputPath, String _sBasename, int _nResolutionInDPI, String _sGS_PageOutput)
292*b1cdbd2cSJim Jagielski         {
293*b1cdbd2cSJim Jagielski             // String fs = System.getProperty("file.separator");
294*b1cdbd2cSJim Jagielski             String sName = _sBasename + "_" + String.valueOf(_nResolutionInDPI) + "DPI_" + _sGS_PageOutput + ".jpg";
295*b1cdbd2cSJim Jagielski             String sJPEGName = FileHelper.appendPath(_sOutputPath, sName);
296*b1cdbd2cSJim Jagielski             return sJPEGName;
297*b1cdbd2cSJim Jagielski         }
298*b1cdbd2cSJim Jagielski 
299*b1cdbd2cSJim Jagielski         /**
300*b1cdbd2cSJim Jagielski      * Create via ghostscript (gs) from the reference file for every page a JPEG file
301*b1cdbd2cSJim Jagielski      *
302*b1cdbd2cSJim Jagielski      * MUST set:
303*b1cdbd2cSJim Jagielski      * m_sOutputPath, m_sReferenceFile, m_sReferencePath
304*b1cdbd2cSJim Jagielski      *
305*b1cdbd2cSJim Jagielski      * return exit code from gs command
306*b1cdbd2cSJim Jagielski      */
307*b1cdbd2cSJim Jagielski 
308*b1cdbd2cSJim Jagielski      private static final String m_sGS_PageOutput = "%04d";
309*b1cdbd2cSJim Jagielski 
createJPEGsFromPostscript(String _sOutputPath, String _sSourcePath, String _sSourceFile, int _nResolutionInDPI)310*b1cdbd2cSJim Jagielski      private String createJPEGsFromPostscript(String _sOutputPath, String _sSourcePath, String _sSourceFile, int _nResolutionInDPI)
311*b1cdbd2cSJim Jagielski         {
312*b1cdbd2cSJim Jagielski             FileHelper.makeDirectories("", _sOutputPath);
313*b1cdbd2cSJim Jagielski 
314*b1cdbd2cSJim Jagielski             // create a jpeg from original prn
315*b1cdbd2cSJim Jagielski             // String fs = System.getProperty("file.separator");
316*b1cdbd2cSJim Jagielski 
317*b1cdbd2cSJim Jagielski             String sJPEGNameSchema = getJPEGName(_sOutputPath, _sSourceFile, _nResolutionInDPI, m_sGS_PageOutput);
318*b1cdbd2cSJim Jagielski             String sPostscriptOrPDFFile = FileHelper.appendPath(_sSourcePath, _sSourceFile);
319*b1cdbd2cSJim Jagielski             String sGhostscriptEXE = "gs";
320*b1cdbd2cSJim Jagielski             if (OSHelper.isWindows())
321*b1cdbd2cSJim Jagielski             {
322*b1cdbd2cSJim Jagielski                 sGhostscriptEXE = "gswin32c.exe";
323*b1cdbd2cSJim Jagielski                 String sGhostscriptEXE2 = (String)param.get("gs.exe");
324*b1cdbd2cSJim Jagielski                 if (sGhostscriptEXE2 != null)
325*b1cdbd2cSJim Jagielski                 {
326*b1cdbd2cSJim Jagielski                     sGhostscriptEXE = sGhostscriptEXE2;
327*b1cdbd2cSJim Jagielski                 }
328*b1cdbd2cSJim Jagielski                 String sGhostscriptPath = (String)param.get("gs.path");
329*b1cdbd2cSJim Jagielski                 if (sGhostscriptPath != null)
330*b1cdbd2cSJim Jagielski                 {
331*b1cdbd2cSJim Jagielski                     sGhostscriptEXE = FileHelper.appendPath(sGhostscriptPath, sGhostscriptEXE);
332*b1cdbd2cSJim Jagielski                 }
333*b1cdbd2cSJim Jagielski             }
334*b1cdbd2cSJim Jagielski 
335*b1cdbd2cSJim Jagielski //            String sCommand = sGhostscriptEXE + " -dNOPROMPT -dBATCH -sDEVICE=jpeg -r" + String.valueOf(_nResolutionInDPI) + " -dNOPAUSE -sOutputFile=" + StringHelper.doubleQuoteIfNeed(sJPGFilename) + " " + StringHelper.doubleQuoteIfNeed(sOriginalFile);
336*b1cdbd2cSJim Jagielski             String[] sCommandArray =
337*b1cdbd2cSJim Jagielski                 {
338*b1cdbd2cSJim Jagielski                     sGhostscriptEXE,
339*b1cdbd2cSJim Jagielski                     "-dNOPROMPT",
340*b1cdbd2cSJim Jagielski                     "-dBATCH",
341*b1cdbd2cSJim Jagielski                     "-sDEVICE=jpeg",
342*b1cdbd2cSJim Jagielski                     "-r" + String.valueOf(_nResolutionInDPI),
343*b1cdbd2cSJim Jagielski                     "-dNOPAUSE",
344*b1cdbd2cSJim Jagielski                     "-sOutputFile=" + sJPEGNameSchema,
345*b1cdbd2cSJim Jagielski                     sPostscriptOrPDFFile
346*b1cdbd2cSJim Jagielski 
347*b1cdbd2cSJim Jagielski 
348*b1cdbd2cSJim Jagielski 
349*b1cdbd2cSJim Jagielski                 };
350*b1cdbd2cSJim Jagielski             // System.out.println("Start Command array");
351*b1cdbd2cSJim Jagielski             // try
352*b1cdbd2cSJim Jagielski             // {
353*b1cdbd2cSJim Jagielski             //     Runtime.getRuntime().exec(sCommandArray);
354*b1cdbd2cSJim Jagielski             // } catch (Exception e) {
355*b1cdbd2cSJim Jagielski             //     System.out.println("FAILED");
356*b1cdbd2cSJim Jagielski             // }
357*b1cdbd2cSJim Jagielski             // System.out.println("done");
358*b1cdbd2cSJim Jagielski 
359*b1cdbd2cSJim Jagielski // TODO: gives ghostscript an error we can handle?
360*b1cdbd2cSJim Jagielski             ProcessHandler aHandler = new ProcessHandler(sCommandArray);
361*b1cdbd2cSJim Jagielski             boolean bBackValue = aHandler.executeSynchronously();
362*b1cdbd2cSJim Jagielski             assure("There seems to be a problem with ghostscript", bBackValue, true);
363*b1cdbd2cSJim Jagielski             int nExitCode = aHandler.getExitCode();
364*b1cdbd2cSJim Jagielski             // ArrayList m_aFileList = new ArrayList();
365*b1cdbd2cSJim Jagielski 
366*b1cdbd2cSJim Jagielski             // String sJPEGNameSchema = "";
367*b1cdbd2cSJim Jagielski             if (nExitCode == 0)
368*b1cdbd2cSJim Jagielski             {
369*b1cdbd2cSJim Jagielski                 // TODO: return a real filename, due to the fact we don't know how much files are created, maybe better to return a list
370*b1cdbd2cSJim Jagielski                 int nPages = countPages(sJPEGNameSchema);
371*b1cdbd2cSJim Jagielski                 if (nPages == 0)
372*b1cdbd2cSJim Jagielski                 {
373*b1cdbd2cSJim Jagielski                     // return only a valid schema name if there at least one page.
374*b1cdbd2cSJim Jagielski                     sJPEGNameSchema = "";
375*b1cdbd2cSJim Jagielski                     assure("Document '" + sPostscriptOrPDFFile + "' doesn't create pages.", false, true);
376*b1cdbd2cSJim Jagielski                 }
377*b1cdbd2cSJim Jagielski             }
378*b1cdbd2cSJim Jagielski             else
379*b1cdbd2cSJim Jagielski             {
380*b1cdbd2cSJim Jagielski                 assure("There seems to be a problem with ghostscript and '" + sPostscriptOrPDFFile + "' exit code: " + nExitCode, false, true);
381*b1cdbd2cSJim Jagielski                 GlobalLogWriter.println("Warning: There seems to be a problem with '" + sGhostscriptEXE + "'...");
382*b1cdbd2cSJim Jagielski             }
383*b1cdbd2cSJim Jagielski             // String[] aList = new String[m_aFileList.size()];
384*b1cdbd2cSJim Jagielski             // aList = (String[])m_aFileList.toArray(aList);
385*b1cdbd2cSJim Jagielski             return sJPEGNameSchema; // sNewJPEGFilename;
386*b1cdbd2cSJim Jagielski         }
387*b1cdbd2cSJim Jagielski 
getFilenameForJPEGSchema(String _sJPEGSchema, int _nPage)388*b1cdbd2cSJim Jagielski     public static String getFilenameForJPEGSchema(String _sJPEGSchema, int _nPage)
389*b1cdbd2cSJim Jagielski         {
390*b1cdbd2cSJim Jagielski             if (_nPage < 1 || _nPage > 9999)
391*b1cdbd2cSJim Jagielski             {
392*b1cdbd2cSJim Jagielski                 return "";
393*b1cdbd2cSJim Jagielski             }
394*b1cdbd2cSJim Jagielski             final String sFilename = util.utils.replaceAll13(_sJPEGSchema, m_sGS_PageOutput, StringHelper.createValueString(_nPage, 4));
395*b1cdbd2cSJim Jagielski             return sFilename;
396*b1cdbd2cSJim Jagielski         }
397*b1cdbd2cSJim Jagielski 
398*b1cdbd2cSJim Jagielski         /**
399*b1cdbd2cSJim Jagielski          * Return the number of really exists JPEG files
400*b1cdbd2cSJim Jagielski          * Give a JPEG Schema which contains something like '%04d' which will be converted by a number between 0001 and 9999 always
401*b1cdbd2cSJim Jagielski          * with leading '0' (zero)
402*b1cdbd2cSJim Jagielski          * @param _sJPEGSchema
403*b1cdbd2cSJim Jagielski          * @return number of really existing pages of a given JPEG schema
404*b1cdbd2cSJim Jagielski          */
countPages(String _sJPEGSchema)405*b1cdbd2cSJim Jagielski     public int countPages(String _sJPEGSchema)
406*b1cdbd2cSJim Jagielski     {
407*b1cdbd2cSJim Jagielski         int nPages = 0;
408*b1cdbd2cSJim Jagielski         if (_sJPEGSchema.length() > 0)
409*b1cdbd2cSJim Jagielski         {
410*b1cdbd2cSJim Jagielski             // TODO: if there doesn't exists a '%04d' in the schema we will return 9999 which is a little bit wrong here.
411*b1cdbd2cSJim Jagielski             for (int i=1;i<10000;i++)
412*b1cdbd2cSJim Jagielski             {
413*b1cdbd2cSJim Jagielski                 String sNewJPEGFilename = getFilenameForJPEGSchema(_sJPEGSchema, i);
414*b1cdbd2cSJim Jagielski                 if (FileHelper.exists(sNewJPEGFilename))
415*b1cdbd2cSJim Jagielski                 {
416*b1cdbd2cSJim Jagielski                     // m_aFileList.add(sNewJPEGFilename); // as long as the files exist, fill the array
417*b1cdbd2cSJim Jagielski                     nPages ++;
418*b1cdbd2cSJim Jagielski                 }
419*b1cdbd2cSJim Jagielski                 else
420*b1cdbd2cSJim Jagielski                 {
421*b1cdbd2cSJim Jagielski                     break;                             // stop file check
422*b1cdbd2cSJim Jagielski                 }
423*b1cdbd2cSJim Jagielski             }
424*b1cdbd2cSJim Jagielski         }
425*b1cdbd2cSJim Jagielski         return nPages;
426*b1cdbd2cSJim Jagielski     }
427*b1cdbd2cSJim Jagielski 
428*b1cdbd2cSJim Jagielski //    public static void main(String [] _args)
429*b1cdbd2cSJim Jagielski //    {
430*b1cdbd2cSJim Jagielski //// DONE: give an index.ini file ok
431*b1cdbd2cSJim Jagielski ////        String args[] = {
432*b1cdbd2cSJim Jagielski ////            "-TimeOut", "3600000",
433*b1cdbd2cSJim Jagielski ////            "-tb", "java_complex",
434*b1cdbd2cSJim Jagielski ////            "-o", "graphical.JPEGCreator",
435*b1cdbd2cSJim Jagielski ////            "-DOC_COMPARATOR_INPUT_PATH", "C:\\CWS\\temp\\output\\index.ini",
436*b1cdbd2cSJim Jagielski ////            "-DOC_COMPARATOR_OUTPUT_PATH", "C:\\CWS\\temp\\output",
437*b1cdbd2cSJim Jagielski ////            "-DOC_COMPARATOR_PRINT_MAX_PAGE", "9999",
438*b1cdbd2cSJim Jagielski ////            "-DOC_COMPARATOR_GFX_OUTPUT_DPI_RESOLUTION", "180",
439*b1cdbd2cSJim Jagielski ////            "-DOC_COMPARATOR_HTML_OUTPUT_PREFIX", "http://so-gfxcmp-lin.germany.sun.com/gfxcmp_ui/cw.php?inifile=",
440*b1cdbd2cSJim Jagielski //////            "-DOC_COMPARATOR_REFERENCE_CREATOR_TYPE", "PDF",      /* default: "OOo" */
441*b1cdbd2cSJim Jagielski //////            "-DOC_COMPARATOR_REFERENCE_CREATOR_TYPE", "msoffice", /* default: "OOo" */
442*b1cdbd2cSJim Jagielski //////            "-OFFICE_VIEWABLE", "false",
443*b1cdbd2cSJim Jagielski ////            "-AppExecutionCommand", "\"C:/Programme/sun/staroffice 9/program/soffice.exe\"  -norestore -nocrashreport -accept=pipe,name=ll93751;urp;",
444*b1cdbd2cSJim Jagielski ////            "-NoOffice"
445*b1cdbd2cSJim Jagielski ////        };
446*b1cdbd2cSJim Jagielski //
447*b1cdbd2cSJim Jagielski //// Done: give a directory, where exist pdf/ps files ok.
448*b1cdbd2cSJim Jagielski //// Done: inputpath (given file) doesn't exists, ok.
449*b1cdbd2cSJim Jagielski //// Done: give a ps/pdf file. ok.
450*b1cdbd2cSJim Jagielski //
451*b1cdbd2cSJim Jagielski //        String args[] = {
452*b1cdbd2cSJim Jagielski //            "-TimeOut", "3600000",
453*b1cdbd2cSJim Jagielski //            "-tb", "java_complex",
454*b1cdbd2cSJim Jagielski //            "-o", "graphical.JPEGCreator",
455*b1cdbd2cSJim Jagielski //            "-DOC_COMPARATOR_INPUT_PATH", "C:\\CWS\\temp\\output\\Names7.odt.pdf",
456*b1cdbd2cSJim Jagielski //            "-DOC_COMPARATOR_OUTPUT_PATH", "C:\\CWS\\temp\\output",
457*b1cdbd2cSJim Jagielski //            "-DOC_COMPARATOR_PRINT_MAX_PAGE", "9999",
458*b1cdbd2cSJim Jagielski //            "-DOC_COMPARATOR_GFX_OUTPUT_DPI_RESOLUTION", "180",
459*b1cdbd2cSJim Jagielski //            "-DOC_COMPARATOR_HTML_OUTPUT_PREFIX", "http://so-gfxcmp-lin.germany.sun.com/gfxcmp_ui/cw.php?inifile=",
460*b1cdbd2cSJim Jagielski ////            "-DOC_COMPARATOR_REFERENCE_CREATOR_TYPE", "PDF",      /* default: "OOo" */
461*b1cdbd2cSJim Jagielski ////            "-DOC_COMPARATOR_REFERENCE_CREATOR_TYPE", "msoffice", /* default: "OOo" */
462*b1cdbd2cSJim Jagielski ////            "-OFFICE_VIEWABLE", "false",
463*b1cdbd2cSJim Jagielski //            "-AppExecutionCommand", "\"C:/Programme/sun/staroffice 9/program/soffice.exe\"  -norestore -nocrashreport -accept=pipe,name=ll93751;urp;",
464*b1cdbd2cSJim Jagielski //            "-NoOffice"
465*b1cdbd2cSJim Jagielski //        };
466*b1cdbd2cSJim Jagielski //
467*b1cdbd2cSJim Jagielski //        org.openoffice.Runner.main(args);
468*b1cdbd2cSJim Jagielski //    }
469*b1cdbd2cSJim Jagielski 
470*b1cdbd2cSJim Jagielski }
471