2016-05-17 263 views
2

我正在寻找一个很好的转换器来将office文件和图像转换为pdf。我想尝试免费的来源Documents4J。而有这样的代码:将office文件转换为pdf与documents4J

package documentsForJ; 
import java.io.File; 
import java.util.concurrent.Future; 
import java.util.concurrent.TimeUnit; 
import com.documents4j.api.DocumentType; 
import com.documents4j.api.IConverter; 
import com.documents4j.job.LocalConverter; 

public class App { 
    public static void main(String[] args) { 

     File wordFile = new File("test.doc"), target = new File("test.pdf"); 

     IConverter converter = LocalConverter.builder().baseFolder(new File("G:\\documentsForJ\\target")) 
       .workerPool(20, 25, 2, TimeUnit.SECONDS) 
       .processTimeout(5, TimeUnit.SECONDS).build(); 

     Future<Boolean> conversion = converter.convert(wordFile).as(DocumentType.DOCX).to(target).as(DocumentType.PDF) 
       // .prioritizeWith(1000) // optional 
       .schedule(); 

    } 
} 

我有以下罐子绑定:

  • documents4j-API-1.0.2.jar documents4j-客户1.0.2.jar
  • documents4j客户端-standalone-1.0.2-shaded.jar
  • documents4j本地-1.0.2.jar
  • documents4j服务器 - 独立-1.0.2-shaded.jar
  • documents4j试验1.0.2.jar DOC uments4j变压器-API-1.0.2.jar
  • documents4j-变压器MSOFFICE碱基1.0.2.jar
  • documents4j-变压器MSOFFICE-Excel的1.0.2.jar
  • documents4j-变压器 - MSOFFICE - 测试 - 1.0.2.jar
  • documents4j-变压器MSOFFICE字-1.0.2.jar
  • documents4j-util的-独立-1.0.2.jar
  • documents4j-util的变压器-工序 - 1.0.2.jar
  • documents4j-util-ws-1.0.2.jar documents4j-server-1.0.2.jar
  • documents4j变压器-1.0.2.jar documents4j-UTIL-全1.0.2.jar
  • documents4j-util的转换-1.0.2.jar

德恩我跑我得到的应用以下错误:

SLF4J: Class path contains multiple SLF4J bindings. 
SLF4J: Found binding in [jar:file:/G:/AdminPrgs/Code/Java/eclipse/workspaceTest/documentsForJ/lib/documents4j-client-standalone-1.0.2-shaded.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: Found binding in [jar:file:/G:/AdminPrgs/Code/Java/eclipse/workspaceTest/documentsForJ/lib/documents4j-server-standalone-1.0.2-shaded.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. 
SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelectorStaticBinder] 
16:28:49.030 [main] DEBUG o.z.exec.ProcessExecutor - Executing [cmd, /C, "C:\temp\excel_start1565707660.vbs"] in C:\temp. 
16:28:49.038 [main] DEBUG o.z.exec.ProcessExecutor - Started [email protected] 
16:28:49.074 [[email protected]] DEBUG o.zeroturnaround.exec.WaitForProcess - [email protected] stopped with exit code 3 
16:28:49.081 [main] INFO c.d.c.msoffice.MicrosoftExcelBridge - From-Microsoft-Excel-Converter was started successfully 
16:28:49.085 [main] DEBUG o.z.exec.ProcessExecutor - Executing [cmd, /C, "C:\temp\word_start2143216009.vbs"] in C:\temp. 
16:28:49.086 [main] DEBUG o.z.exec.ProcessExecutor - Started [email protected] 
16:28:49.121 [[email protected]] DEBUG o.zeroturnaround.exec.WaitForProcess - [email protected] stopped with exit code 3 
16:28:49.121 [main] INFO c.d.c.msoffice.MicrosoftWordBridge - From-Microsoft-Word-Converter was started successfully 
16:28:49.132 [main] INFO com.documents4j.job.LocalConverter - The documents4j local converter has started successfully 
fertig! 
16:28:49.145 [pool-1-thread-1] INFO c.d.c.msoffice.MicrosoftExcelBridge - Requested conversion from AbrechnungKFZ-Kosten.xls (application/vnd.ms-excel) to AbrechnungKFZ-Kosten.pdf (application/pdf) 
16:28:49.148 [pool-1-thread-1] DEBUG o.z.exec.ProcessExecutor - Executing [cmd, /C, "C:\temp\excel_convert961528339.vbs G:\AdminPrgs\Code\Java\eclipse\workspaceTest\documentsForJ\AbrechnungKFZ-Kosten.xls G:\AdminPrgs\Code\Java\eclipse\workspaceTest\documentsForJ\AbrechnungKFZ-Kosten.pdf 999"] in C:\temp. 
16:28:49.148 [pool-1-thread-1] DEBUG o.z.exec.ProcessExecutor - Started [email protected] 
16:28:49.188 [[email protected]] DEBUG o.zeroturnaround.exec.WaitForProcess - [email protected] stopped with exit code -4 

所生成的VBS C:\ TEMP \ excel_start1565707660.vbs提供了以下错误:enter image description here

而这是所生成的VBS的代码:

' See http://msdn.microsoft.com/en-us/library/bb243311%28v=office.12%29.aspx 
Const WdExportFormatPDF = 17 
Const MagicFormatPDF = 999 

Dim arguments 
Set arguments = WScript.Arguments 

' Transforms a file using MS Excel into the given format. 
Function ConvertFile(inputFile, outputFile, formatEnumeration) 

    Dim fileSystemObject 
    Dim excelApplication 
    Dim excelDocument 

    ' Get the running instance of MS Excel. If Excel is not running, exit the conversion. 
    On Error Resume Next 
    Set excelApplication = GetObject(, "Excel.Application") 
    If Err <> 0 Then 
    WScript.Quit -6 
    End If 
    On Error GoTo 0 

    ' Find the source file on the file system. 
    Set fileSystemObject = CreateObject("Scripting.FileSystemObject") 
    inputFile = fileSystemObject.GetAbsolutePathName(inputFile) 


    ' Convert the source file only if it exists. 
    If fileSystemObject.FileExists(inputFile) Then 

    ' Attempt to open the source document. 
    On Error Resume Next 
    Set excelDocument = excelApplication.Workbooks.Open(inputFile, , True, , , , , , , , , , , , 2) 
    If Err <> 0 Then 
     WScript.Quit -2 
    End If 
    On Error GoTo 0 

    ' Convert: See http://msdn2.microsoft.com/en-us/library/bb221597.aspx 
    On Error Resume Next 
    If formatEnumeration = MagicFormatPDF Then 
     excelDocument.ExportAsFixedFormat xlTypePDF, outputFile 
    Else 
     excelDocument.SaveAs outputFile, formatEnumeration 
    End If 

    ' Close the source document. 
    excelDocument.Close False 
    If Err <> 0 Then 
     WScript.Quit -3 
    End If 
    On Error GoTo 0 

    ' Signal that the conversion was successful. 
    WScript.Quit 2 

    Else 

    ' Files does not exist, could not convert 
    WScript.Quit -4 

    End If 

End Function 

' Execute the script. 
Call ConvertFile(arguments.Unnamed.Item(0), arguments.Unnamed.Item(1), CInt(arguments.Unnamed.Item(2))) 

我会非常好,如果你能给我任何建议,如何解决这个错误。提前感谢!

+0

看起来你可能会在文件的某个地方使用特殊字符。 VBS抱怨说你的脚本中提供的参数少于三个。 Currentlty,有一个错误,任何文件名中的空格都不能正确转义并且转换失败。你的情况似乎有类似的问题。 –

+0

给出test.doc的正确路径,好像脚本无法找到它们。尝试把它放在一个没有空格的文件夹中,并将其引用为'File wordFile = new File(“C:\\ test \\ test.doc”);'带空格的文件夹也可以工作,但先试试这个。 –

回答

0

这个问题很有可能在新发布的documents4j版本1.0.3中解决,该版本1.0.3会正确转义转换脚本参数。以前,没有任何参数被转义,当VBScript处理您观察到的脚本参数时会引起混淆。