0.Introducción
Si se quiere opciones libres, hay pocas alternativas y gran parte de llas no funcionan bien en todos los casos.
Parece ser que se está optando por utilizar LibreOffice como motor de conversión y llamarlo desde Java.
La librería jodconverter es de gran ayuda pues simplifica el código.
1. Instalación de LibreOffice en un servidor Ubuntu sin GUI
Según askubuntu , la instalación en un servidor sin GUI se hace con este comando
apt-get install libreoffice --no-install-recommends
2. Crear un proyecto gradle y dar las dependencias
Aquí mostramos un ejemplo del build.gradle y se muestra las dependencias de jodconverter
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | /* * This file was generated by the Gradle 'init' task. * * This generated file contains a sample Java library project to get you started. * For more details take a look at the 'Building Java & JVM projects' chapter in the Gradle * User Manual available at https://docs.gradle.org/7.0.2/userguide/building_java_projects.html */ plugins { // Apply the java-library plugin for API and implementation separation. id 'java-library' } repositories { mavenCentral() jcenter() // jcenter is deprecated, however the Gretty plugin still uses stuff from jcenter: https://github.com/gretty-gradle-plugin/gretty/issues/192 maven { url "https://jitpack.io" } /*https://github.com/ralfstuckert/pdfbox-layout*/ } // My customization //project.jar.destinationDirectory = file("$rootDir/mytarget") project.jar.destinationDirectory = file("$rootDir/../mytargets") project.archivesBaseName = 'a-report-utils' project.version = '1.0' dependencies { // Use JUnit test framework. testImplementation 'junit:junit:4.13.1' /* Jakarta */ compileOnly "jakarta.annotation:jakarta.annotation-api:2.0.0" /*********************************************************************** *********************** LOMBOK DEFINITION ******************************/ compileOnly 'org.projectlombok:lombok:1.18.20' annotationProcessor 'org.projectlombok:lombok:1.18.20' testCompileOnly 'org.projectlombok:lombok:1.18.20' testAnnotationProcessor 'org.projectlombok:lombok:1.18.20' /************************************************************************/ /*JOD CONVERSOR */ implementation 'org.jodconverter:jodconverter-core:4.4.2' implementation 'org.jodconverter:jodconverter-local:4.4.2' /* HIbernate */ implementation "org.hibernate:hibernate-core:5.4.31.Final" implementation "org.hibernate:hibernate-validator:7.0.1.Final" } |
3. Programa simple de llamadas para la conversión
Aquí tenemos el código que es prácticamente calcado al de ejemplo de llamada local del wiki de jodconversion
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | package tests; import java.io.File; import org.jodconverter.core.office.OfficeException; import org.jodconverter.core.office.OfficeUtils; import org.jodconverter.local.JodConverter; import org.jodconverter.local.office.LocalOfficeManager; public class KKLibreOffice { public static void main(String[] args) throws OfficeException { // TODO Auto-generated method stub /* OfficeManager officeManager = LocalOfficeManager.builder() .portNumbers(2002, 2003, 2004, 2005) .build(); */ File inputFile = new File("/home/ximo/80244.docx"); File outputFile = new File("/home/ximo/80244.docx.pdf"); // Create an office manager using the default configuration. // The default port is 2002. Note that when an office manager // is installed, it will be the one used by default when // a converter is created. final LocalOfficeManager officeManager = LocalOfficeManager.install(); try { // Start an office process and connect to the started instance (on port 2002). officeManager.start(); // Convert JodConverter .convert(inputFile) .to(outputFile) .execute(); } finally { // Stop the office process OfficeUtils.stopQuietly(officeManager); } } } |