Convertir a PDF utilizando Jodconverter
Gracias al trabajo, por decirlo de esa manera, me tocó el problema de generar un PDF de un RTF, como ya es por muchos conocidos OpenOffice puede generar PDF’s sin utilizar programas o herramientas externas, me di a la tarea de investigar un poco y encontré unas librerías que hacen uso de OpenOffice, para mas información le dejo el link http://www.artofsolving.com/opensource/jodconverter
En esta página nos vamos al area de downloads y descargamos la librería jodconverter-x.y.z , en la versión más actualizada.
Como requisito para poder utilizar esa librería y poder realizar la conversión es necesario tener OpenOffice instalado, al tenerlo instalado nos vamos a la siguiente ruta, desde consola, esto es válido en GNU/Linux y Windows.
$ cd /OPEN_OFFICE_HOME/program/
Al estar ahí escribimos el siguiente comando:
$ soffice –headless –accept=”socket,host=localhost,port=8100;urp;” –nofirststartwizard
Al realizar esto levantamos openoffice como un servicio.
Dentro de lo que estamos descargando del link anterior, desempaquetamos el zip de cualquier forma posible, lo digo de esta manera para los amantes de la consola en GNU/Linux.
Ahora como prueba podemos realizar una conversión de un archivo RTF a PDF desde la línea de comando escribiendo en consola lo siguiente:
$ java –jar /lib/jodconverter-cli-x.y.z.jar file.rtf file.pdf
El primer parámetro es la ruta del archivo que existe físicamente en disco duro y el segundo es la ruta del archivo con formato PDF que se va a crear.
Ahora muy bien se puede utilizar estas librerías escribiendo un poco de código de Java. En cualquier IDE creamos un proyecto y agregamos la librerías que están dentro de la carpeta lib del directorio que se creó al desempaquetar el zip que se descargó.
Ya lo he hecho de varias maneras, una, si no se quiere escribir mucho código y no hay ninguna configuración o requisito extra se puede utilizar un process con la línea de comando anterior.
Ejemplo:
String [] cmd = {«java», «-jar», «lib/jodconverter-cli-2.2.2.jar», «file.rtf», «file.pdf»};
Process p = Runtime.getRuntime().exec(cmd);
p.waitFor();
O se puede hacer de la siguiente forma
OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100);
connection.connect();
DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
File fileInput = new File(«file.rtf»);
File fileOutput = new File(«file.pdf»);
converter.convert(fileInput, fileOutput);
connection.disconnect();
Primero se realiza la conexión al socket enviando como parámetro el puerto que se indicó en a línea de comando descrita anteriormente.
Luego creamos una instancia para realizar la conversión.
Creamos dos instancias de la clase java.io.File, la primera contiene el archivo RTF y la segunda contiene el archivo PDF a crear.
Luego se invoca el método convert y realiza la conversión.
Todo lo anterior para que funcione y no muestre ninguna excepción se debe de haber levantado OpenOffice como un servicio.
Se da el caso en que se tiene que hacer el uso de la clase DocumentFormat, como en el siguiente ejemplo:
OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100);
connection.connect();
DocumentFormatRegistry registry = new DefaultDocumentFormatRegistry();
DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
InputStream input = new FileInputStream(«file.rtf»);
DocumentFormat inputFormat = registry.getFormatByFileExtension(«rtf»);
OutputStream output = new FileOutputStream(«file.pdf»);
DocumentFormat outputFormat = registry.getFormatByFileExtension(«pdf»);
converter.convert(input, inputFormat, output, outputFormat);
output.close();
input.close();
connection.disconnect();
De esta manera es una forma fácil de generar PDF a partir de plantillas que estén en formatos RTF, DOC, y cualquier otro formato que soporte OpenOffice.