Преобразование формата RTF в PDF с использованием java в Linux

Я создал код Java для преобразования документов формата RTF в формат PDF. Программа корректно работает в windows. Но в линуксе выдает ошибку. Может кто-нибудь показать мне проблему с этим кодом?

Java-код:

import com.documents4j.api.DocumentType;
import com.documents4j.api.IConverter;
import com.documents4j.job.LocalConverter;
import java.io.*;

public class Main {
    public static void main(String[] args) {
        File inputWord = new File("sample.rtf");
        File outputFile = new File("sample.pdf");
        try  {
            InputStream docxInputStream = new FileInputStream(inputWord);
            OutputStream outputStream = new FileOutputStream(outputFile);
            IConverter converter = LocalConverter.builder().build();
            converter.convert(docxInputStream).as(DocumentType.RTF).to(outputStream).as(DocumentType.PDF).execute();
            outputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Я использовал document4j версии 1.1.3 для реализации этого кода.

Ниже ошибка дает в среде Linux:

ERROR com.documents4j.conversion.msoffice.MicrosoftWordBridge - Unable to run script: /tmp/1595252529799-0/word_start1195732765.vbs
org.zeroturnaround.exec.ProcessInitException: Could not execute [cmd, /S, /C, ""/tmp/1595252529799-0/word_start1195732765.vbs""] in /tmp/1595252529799-0. Error=2, No such file or directory
at org.zeroturnaround.exec.ProcessInitException.newInstance(ProcessInitException.java:80)
at org.zeroturnaround.exec.ProcessExecutor.invokeStart(ProcessExecutor.java:1002)
at org.zeroturnaround.exec.ProcessExecutor.startInternal(ProcessExecutor.java:970)
at org.zeroturnaround.exec.ProcessExecutor.execute(ProcessExecutor.java:906)
at com.documents4j.conversion.AbstractExternalConverter.runNoArgumentScript(AbstractExternalConverter.java:72)
at com.documents4j.conversion.msoffice.AbstractMicrosoftOfficeBridge.runNoArgumentScript(AbstractMicrosoftOfficeBridge.java:51)
at com.documents4j.conversion.msoffice.AbstractMicrosoftOfficeBridge.tryStart(AbstractMicrosoftOfficeBridge.java:34)
at com.documents4j.conversion.msoffice.MicrosoftWordBridge.startUp(MicrosoftWordBridge.java:46)
at com.documents4j.conversion.msoffice.MicrosoftWordBridge.<init>(MicrosoftWordBridge.java:41)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.documents4j.conversion.ExternalConverterDiscovery.make(ExternalConverterDiscovery.java:30)
at com.documents4j.conversion.ExternalConverterDiscovery.makeAll(ExternalConverterDiscovery.java:42)
at com.documents4j.conversion.ExternalConverterDiscovery.loadConfiguration(ExternalConverterDiscovery.java:85)
at com.documents4j.conversion.DefaultConversionManager.<init>(DefaultConversionManager.java:22)
at com.documents4j.job.LocalConverter.makeConversionManager(LocalConverter.java:79)
at com.documents4j.job.LocalConverter.<init>(LocalConverter.java:51)
at com.documents4j.job.LocalConverter$Builder.build(LocalConverter.java:186)
at Main.main(Main.java:13)

person Anuradha    schedule 20.07.2020    source источник
comment
Просто выстрел в темноту, но, может быть, ваша библиотека использует ms-word или интерпретатор vbs в качестве утилиты, которая просто недоступна в Linux?   -  person Alex Funk    schedule 20.07.2020


Ответы (1)


Вы используете объект com.documents4j.LocalConverter для выполнения преобразования. Согласно документации:

LocalConverter можно запустить, только если:

  • JVM запускается на платформе MS Windows, которая поставляется с Microsoft Scripting Host для VBS (это верно для всех современных версий MS Windows.
  • MS Word установлен в версии 2007 или выше. Преобразование PDF поддерживается, только если установлен плагин PDF. Плагин входит в состав MS Word начиная с Word 2010 и выше.
  • и так далее

Очевидно, что ни одно из этих условий не может быть выполнено на машине с Linux.

Ваши варианты будут выглядеть так:

  • Используйте RemoteConverter, чтобы заставить удаленный компьютер Windows выполнить преобразование.
  • Ищите альтернативный конвертер RTF в PDF, который будет работать в Linux.
person Stephen C    schedule 20.07.2020