/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License") + you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.openmeetings.app.documents; import java.io.BufferedReader; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.InputStreamReader; import java.util.HashMap; import org.openmeetings.app.remote.red5.ScopeApplicationAdapter; import org.openmeetings.utils.ProcessHelper; import org.red5.logging.Red5LoggerFactory; import org.slf4j.Logger; import org.springframework.beans.factory.annotation.Autowired; public class GenerateThumbs { private static final Logger log = Red5LoggerFactory .getLogger(GenerateThumbs.class); @Autowired private GenerateImage generateImage; public HashMap generateThumb(String pre, String current_dir, String filepath, Integer thumbSize) { // Init variables File f = new File(filepath); String name = f.getName(); String folder = f.getParentFile().getAbsolutePath() + File.separatorChar; String[] argv = new String[] { generateImage.getPathToImageMagic(), "-thumbnail", Integer.toString(thumbSize) + "x" + Integer.toString(thumbSize), filepath + ".jpg", folder + pre + name + ".jpg" }; log.debug("START generateThumb ################# "); for (int i = 0; i < argv.length; i++) { log.debug(" i " + i + " argv-i " + argv[i]); } log.debug("END generateThumb ################# "); if (System.getProperty("os.name").toUpperCase().indexOf("WINDOWS") == -1) { return ProcessHelper.executeScript("generateBatchThumbByWidth", argv); } else { return this.processImageWindows(argv); } } public HashMap decodePDF(String inputfile, String outputfile) { String[] argv = new String[] { generateImage.getPathToImageMagic(), // FIXME inputfile, outputfile }; if (System.getProperty("os.name").toUpperCase().indexOf("WINDOWS") == -1) { return ProcessHelper.executeScript("generateBatchThumbByWidth", argv); } else { return this.processImageWindows(argv); } } public HashMap generateBatchThumb(String current_dir, String inputfile, String outputpath, Integer thumbSize, String pre) { if (System.getProperty("os.name").toUpperCase().indexOf("WINDOWS") == -1) { String[] argv = new String[] { generateImage.getPathToImageMagic(), "-thumbnail", // FIXME Integer.toString(thumbSize), inputfile, outputpath + "_" + pre + "_page-%04d.jpg" }; return ProcessHelper.executeScript("generateBatchThumbByWidth", argv); } else { String[] argv = new String[] { generateImage.getPathToImageMagic(), "-thumbnail", // FIXME Integer.toString(thumbSize), inputfile, outputpath + "_" + pre + "_page-%%04d.jpg" }; // return GenerateSWF.executeScript("generateBatchThumbByWidth", // argv); return this.processImageWindows(argv); } } public HashMap generateImageBatchByWidth( String current_dir, String inputfile, String outputpath, Integer thumbWidth, String pre) { String[] argv = new String[] { generateImage.getPathToImageMagic(), "-resize", Integer.toString(thumbWidth), inputfile, outputpath + "_" + pre + "_page.png" }; if (System.getProperty("os.name").toUpperCase().indexOf("WINDOWS") == -1) { return ProcessHelper.executeScript("generateBatchThumbByWidth", argv); } else { return this.processImageWindows(argv); } } public HashMap processImageWindows(String[] args) { HashMap returnMap = new HashMap(); returnMap.put("process", "processImageWindows"); try { // Init variables String[] cmd; String executable_fileName = ""; String runtimeFile = "interviewMerge.bat"; executable_fileName = ScopeApplicationAdapter.batchFileDir + runtimeFile; cmd = new String[4]; cmd[0] = "cmd.exe"; cmd[1] = "/C"; cmd[2] = "start"; cmd[3] = executable_fileName; // log.debug("executable_fileName: "+executable_fileName); // Create the Content of the Converter Script (.bat or .sh File) String fileContent = ""; for (int k = 0; k < args.length; k++) { if (k != 0) { fileContent += " "; } fileContent += args[k]; } fileContent += ScopeApplicationAdapter.lineSeperator + "exit"; File previous = new File(executable_fileName); if (previous.exists()) { previous.delete(); } // execute the Script FileOutputStream fos = new FileOutputStream(executable_fileName); fos.write(fileContent.getBytes()); fos.close(); Runtime rt = Runtime.getRuntime(); returnMap.put("command", cmd.toString()); Process proc = rt.exec(cmd); InputStream stderr = proc.getErrorStream(); BufferedReader br = new BufferedReader(new InputStreamReader(stderr)); String line = null; String error = ""; while ((line = br.readLine()) != null) { error += line; // log.debug("line: "+line); } br.close(); returnMap.put("error", error); int exitVal = proc.waitFor(); returnMap.put("exitValue", "" + exitVal); return returnMap; } catch (Throwable t) { t.printStackTrace(); returnMap.put("error", t.getMessage()); returnMap.put("exitValue", "-1"); return returnMap; } } }