2016-02-08 5 views
1

Для нашего проекта Java я изучаю преобразование офисных файлов в PDF, а затем в изображения. В настоящее время у меня есть успех с pptx, docx, xls, xlsx, pdf к изображению. Если кому-то нужен рабочий код для вышеупомянутого, знаете ли.Java: конвертировать из документа в pdf и ppt в pdf с ошибкой

К сожалению, doc - PDF и ppt - PDF не работает. Я попробовал несколько решений, но ни один из них, похоже, не работает. Последнее, что я пробовал, это JODConvertor, но это тоже не удалось. Библиотека JodConvertor не смогла подключиться к libreoffice, которую я запускаю в данном порту.

Может кто-нибудь дать мне какой-то надежный способ преобразовать DOC & & PPT в PDF и которые свободны от стоимости?

Код:

private String createDocToPDfAndThenToImage(String path) { 

     try { 
      File inputFile = new File(path); 
      File outputFile = File.createTempFile("/home/akshay/jodtest", ".pdf"); 

      OpenOfficeConnection connection = new SocketOpenOfficeConnection("127.0.0.1", 8100); 
      connection.connect(); 

      DocumentConverter converter = new OpenOfficeDocumentConverter(connection); 
      converter.convert(inputFile, outputFile); 
      connection.disconnect(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return ""; 
    } 

Журнал ошибок:

java.net.ConnectException: connection failed: socket,host=127.0.0.1,port=8100,tcpNoDelay=1: java.net.ConnectException: Connection refused 
    at com.artofsolving.jodconverter.openoffice.connection.AbstractOpenOfficeConnection.connect(AbstractOpenOfficeConnection.java:79) 
    at com.journaldev.spring.service.GroupAttachmentsServiceImpl.createDocToPDfAndThenToImage(GroupAttachmentsServiceImpl.java:406) 
    at com.journaldev.spring.service.GroupAttachmentsServiceImpl.addAttachment(GroupAttachmentsServiceImpl.java:338) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 

обезглавленный экземпляр уже начал с этой командой:

/usr/bin/libreoffice --headless --accept=socket,host=localhost,port=8100; 

Если нет никакого способа, чтобы исправить это, любой другой механизм преобразования будет работать. Пожалуйста, дайте мне знать. Спасибо.

ответ

1

Я работаю над чем-то подобным. Я использую unoconv, который требует libreoffice. Он работает очень надежно на PPT/PPTX. Он также работает над DOC/DOCX, но иногда он застревает и требует вмешательства.

Вот сценарий, который проходит через папку для обработки новых файлов PPT/PPTX. Он используется в производстве. Вы также можете добавить DOC/DOCX. У меня есть приложение Java, которое прослушивает новое событие создания файла в папке, чтобы оно могло обрабатывать преобразованный файл PDF после завершения преобразования.

Все эти файлы статуса статуса предназначены для вмешательства человека и проверки статуса другими скриптами. Вам также необходимо добавить код для очистки старого файла.

Кстати, меня очень интересует ваш способ преобразования файлов в PDF, а затем изображений. Возможно, это может дать мне подсказки, чтобы найти лучшее решение для моего проекта. Благодарю.

#!/bin/bash 

    #endless conversion 

    echo "Convert files to pdf..." 

    while [ 1 ] 
    do 
     for file in `ls -tr | grep '.*\.\(ppt\|pptx\)$'` 
     do 
     if [ -e $file.failed ] || [ -e $file.succeeded ] # already converted 
     then 
      : 
     else 
      echo $file > $file.started 
      echo $file > convert.busy # Create busy converting flag file 
      output=`./unoconv -f pdf $file` 
      result=$? 
      echo $result 
      if [ $result -ne 0 ] 
      then 
      echo "conversion to pdf failed" 
      echo $file > $file.failed 
      else 
      echo "conversion to pdf succeeded" 
      echo $file > $file.succeeded 
      fi 
      rm convert.busy # remove busy converting flag file 
     fi 
     done 
     sleep 0.2 
    done 
+0

Да, сейчас я использую libreoffice ... намного лучше ... Я также отправлю свой код. –

+0

С нетерпением жду этого. – fqye

0

Использование OpenOffice. Скачать OpenOffice.and использовать этот код для преобразования из DOC/DOCX в PDF

зависимостей

компиляции "org.openoffice: самозагрузки-разъем: 0.1.1"

компиляции «org.openoffice: unoil: 4.1.2"

компиляции "org.openoffice: RIDL: 4.1.2"

компиляции "org.openoffice: юрта: 4.1.2"

компиляции «org.openoffi се: Juh: 4,1.2 "

package com.galantis.ecm.converter 

import com.galantis.ecm.api.object.model.BaseContent 
import org.apache.commons.io.FileUtils 

import com.sun.star.beans.PropertyValue; 
import com.sun.star.frame.XDesktop; 
import com.sun.star.frame.XStorable; 
import com.sun.star.lang.XComponent; 
import com.sun.star.lang.XMultiComponentFactory; 
import com.sun.star.uno.UnoRuntime; 
import com.sun.star.uno.XComponentContext; 
import com.sun.star.frame.XComponentLoader 
import ooo.connector.BootstrapSocketConnector; 

class Docx2PdfConverter extends Converter { 
    InputStream convert(BaseContent content) { 
    try { 
     byte[] bytes = content.inputStream.bytes 
     def file = new File(FileUtils.getTempDirectory(), "doc.docx") 
     FileUtils.writeByteArrayToFile(file, bytes) 
     String oooExeFolder = "C:/Program Files (x86)/OpenOffice 4/program"; 
     XComponentContext xContext = BootstrapSocketConnector.bootstrap(oooExeFolder); 
     XMultiComponentFactory xMCF = xContext.getServiceManager(); 
     Object oDesktop = xMCF.createInstanceWithContext("com.sun.star.frame.Desktop", xContext); 
     XDesktop xDesktop = (XDesktop) UnoRuntime.queryInterface(
     XDesktop.class, oDesktop); 

     XComponentLoader xCompLoader = (XComponentLoader) UnoRuntime.queryInterface(XComponentLoader.class, xDesktop); 
     String sUrl = "file:///" + file.getAbsolutePath() 
     PropertyValue[] propertyValues = new PropertyValue[0]; 
     propertyValues = new PropertyValue[1]; 
     propertyValues[0] = new PropertyValue(); 
     propertyValues[0].Name = "Hidden"; 
     propertyValues[0].Value = new Boolean(true); 

     XComponent xComp = xCompLoader.loadComponentFromURL(sUrl, "_blank", 0, propertyValues); 

     XStorable xStorable = (XStorable) UnoRuntime.queryInterface(XStorable.class, xComp); 

     propertyValues = new PropertyValue[2]; 
     propertyValues[0] = new PropertyValue(); 
     propertyValues[0].Name = "Overwrite"; 
     propertyValues[0].Value = new Boolean(true); 
     propertyValues[1] = new PropertyValue(); 
     propertyValues[1].Name = "FilterName"; 
     propertyValues[1].Value = "writer_pdf_Export"; 

// Appending the favoured extension to the origin document name 
     def outPutPdf = new File(FileUtils.getTempDirectory(), "pdf.pdf") 
     String myResult = "D:/4.pdf" 
     xStorable.storeToURL("file:///" + myResult, propertyValues); 

     def result = new ByteArrayInputStream(FileUtils.readFileToByteArray(new File(myResult))); 
     xDesktop.terminate(); 
     result 
    } catch (Exception e) { 
     throw e 
    } 

    } 
}