Chamilo is a learning management system focused on ease of use and accessibility
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
chamilo-lms/main/inc/lib/ppt2png/DokeosConverter.java

177 lines
7.2 KiB

//
// DokeosConverter using JODConverter - Java OpenDocument Converter
// Eric Marguin <e.marguin@elixir-interactive.com>
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library 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 for more details.
// http://www.gnu.org/copyleft/lesser.html
//
import java.io.File;
import java.net.ConnectException;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.PosixParser;
import org.apache.commons.io.FilenameUtils;
import com.artofsolving.jodconverter.DocumentConverter;
import com.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection;
import com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection;
import com.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter;
/**
* Command line tool to convert a document into a different format.
* <p>
* Usage: can convert a single file
*
* <pre>
* ConvertDocument test.odt test.pdf
* </pre>
*
* or multiple files at once by specifying the output format
*
* <pre>
* ConvertDocument -f pdf test1.odt test2.odt
* ConvertDocument -f pdf *.odt
* </pre>
*/
public class DokeosConverter {
private static final Option OPTION_OUTPUT_FORMAT = new Option("f", "output-format", true, "output format (e.g. pdf)");
private static final Option OPTION_PORT = new Option("p", "port", true, "OpenOffice.org port");
private static final Option OPTION_VERBOSE = new Option("v", "verbose", false, "verbose");
private static final Option OPTION_DOKEOS_MODE = new Option("d", "dokeos-mode", true, "use oogie or woogie");
private static final Option OPTION_WIDTH = new Option("w", "width", true, "width");
private static final Option OPTION_HEIGHT = new Option("h", "height", true, "height");
private static final Options OPTIONS = initOptions();
private static final int EXIT_CODE_CONNECTION_FAILED = 1;
private static final int EXIT_CODE_CONVERSION_FAILED = 2;
private static final int EXIT_CODE_TOO_FEW_ARGS = 255;
private static Options initOptions() {
Options options = new Options();
options.addOption(OPTION_OUTPUT_FORMAT);
options.addOption(OPTION_PORT);
options.addOption(OPTION_VERBOSE);
options.addOption(OPTION_DOKEOS_MODE);
options.addOption(OPTION_WIDTH);
options.addOption(OPTION_HEIGHT);
return options;
}
public static void main(String[] arguments) throws Exception {
CommandLineParser commandLineParser = new PosixParser();
CommandLine commandLine = commandLineParser.parse(OPTIONS, arguments);
int port = SocketOpenOfficeConnection.DEFAULT_PORT;
if (commandLine.hasOption(OPTION_PORT.getOpt())) {
port = Integer.parseInt(commandLine.getOptionValue(OPTION_PORT.getOpt()));
}
String outputFormat = null;
if (commandLine.hasOption(OPTION_OUTPUT_FORMAT.getOpt())) {
outputFormat = commandLine.getOptionValue(OPTION_OUTPUT_FORMAT.getOpt());
}
boolean verbose = false;
if (commandLine.hasOption(OPTION_VERBOSE.getOpt())) {
verbose = true;
}
String dokeosMode = "woogie";
if (commandLine.hasOption(OPTION_DOKEOS_MODE.getOpt())) {
dokeosMode = commandLine.getOptionValue(OPTION_DOKEOS_MODE.getOpt());
}
int width = 800;
if (commandLine.hasOption(OPTION_WIDTH.getOpt())) {
width = Integer.parseInt(commandLine.getOptionValue(OPTION_WIDTH.getOpt()));
}
int height = 600;
if (commandLine.hasOption(OPTION_HEIGHT.getOpt())) {
height = Integer.parseInt(commandLine.getOptionValue(OPTION_HEIGHT.getOpt()));
}
String[] fileNames = commandLine.getArgs();
if ((outputFormat == null && fileNames.length != 2 && dokeosMode!=null) || fileNames.length < 1) {
String syntax = "convert [options] input-file output-file; or\n"
+ "[options] -f output-format input-file [input-file...]";
HelpFormatter helpFormatter = new HelpFormatter();
helpFormatter.printHelp(syntax, OPTIONS);
System.exit(EXIT_CODE_TOO_FEW_ARGS);
}
OpenOfficeConnection connection = new DokeosSocketOfficeConnection(port);
try {
if (verbose) {
System.out.println("-- connecting to OpenOffice.org on port " + port);
}
connection.connect();
} catch (ConnectException officeNotRunning) {
System.err
.println("ERROR: connection failed. Please make sure OpenOffice.org is running and listening on port "
+ port + ".");
System.exit(EXIT_CODE_CONNECTION_FAILED);
}
try {
// choose the good constructor to deal with the conversion
DocumentConverter converter;
if(dokeosMode.equals("oogie")){
converter = new OogieDocumentConverter(connection, new DokeosDocumentFormatRegistry(), width, height);
}
else if(dokeosMode.equals("woogie")){
converter = new WoogieDocumentConverter(connection, new DokeosDocumentFormatRegistry(), width, height);
}
else {
converter = new OpenOfficeDocumentConverter(connection);
}
if (outputFormat == null) {
File inputFile = new File(fileNames[0]);
File outputFile = new File(fileNames[1]);
convertOne(converter, inputFile, outputFile, verbose);
} else {
for (int i = 0; i < fileNames.length; i++) {
File inputFile = new File(fileNames[i]);
File outputFile = new File(FilenameUtils.getFullPath(fileNames[i])
+ FilenameUtils.getBaseName(fileNames[i]) + "." + outputFormat);
convertOne(converter, inputFile, outputFile, verbose);
}
}
}
catch (com.artofsolving.jodconverter.openoffice.connection.OpenOfficeException e)
{
connection.disconnect();
System.err.println("ERROR: conversion failed.");
System.exit(EXIT_CODE_CONVERSION_FAILED);
}
finally {
if (verbose) {
System.out.println("-- disconnecting");
}
connection.disconnect();
}
}
private static void convertOne(DocumentConverter converter, File inputFile, File outputFile, boolean verbose) {
if (verbose) {
System.out.println("-- converting " + inputFile + " to " + outputFile);
}
converter.convert(inputFile, outputFile);
}
}