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