2016-06-19 50 views
0

我正在使用JodConverter将我的.docx(Microsoft Office)文件转换为pdf,但不知何故它不会隐藏并给我错误。如果我试图将.doc文档转换为pdf那么它工作正常。我使用maven JodConverter插件版本2.2.0。JodConverter不支持java中的docx文件

我的问题是可以使用JODCoverter将.docx文件转换为pdf吗?

+0

你会得到什么错误? – matt

+0

java.lang.IllegalArgumentException:文件的未知文档格式:C:MyFilePath \ test.docx at com.artofsolving.jodconverter.openoffice.converter.AbstractOpenOfficeDocumentConverter.guessDocumentFormat(AbstractOpenOfficeDocumentConverter.java:121 – Mubee

回答

2

声明:我拥有jodconverter.org域名,并在GitHub上创建了原始项目。

小迟到了,但你可以使用原始项目的一个分支,可在Maven的:

JODConverter 4.0.0-RELEASE

它支持DOCX和XLSX格式。

0
import java.io.File; 
import java.io.InputStream; 
import java.io.OutputStream; 
import java.util.HashMap; 
import java.util.Iterator; 
import java.util.Map; 

import org.apache.commons.io.FilenameUtils; 

import com.artofsolving.jodconverter.DefaultDocumentFormatRegistry; 
import com.artofsolving.jodconverter.DocumentConverter; 
import com.artofsolving.jodconverter.DocumentFormat; 
import com.artofsolving.jodconverter.DocumentFormatRegistry; 
import com.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection; 
import com.sun.star.beans.PropertyValue; 
import com.sun.star.lang.XComponent; 
import com.sun.star.uno.UnoRuntime; 
import com.sun.star.util.XRefreshable; 

public abstract class AbstractOpenOfficeDocumentConverter implements DocumentConverter { 

    private final Map/*<String,Object>*/ defaultLoadProperties; 

    protected OpenOfficeConnection openOfficeConnection; 
    private DocumentFormatRegistry documentFormatRegistry; 

    public AbstractOpenOfficeDocumentConverter(OpenOfficeConnection connection) { 
     this(connection, new DefaultDocumentFormatRegistry()); 
    } 

    public AbstractOpenOfficeDocumentConverter(OpenOfficeConnection openOfficeConnection, DocumentFormatRegistry documentFormatRegistry) { 
     this.openOfficeConnection = openOfficeConnection; 
     this.documentFormatRegistry = documentFormatRegistry; 

     defaultLoadProperties = new HashMap(); 
     defaultLoadProperties.put("Hidden", Boolean.TRUE); 
     defaultLoadProperties.put("ReadOnly", Boolean.TRUE); 
    } 

    public void setDefaultLoadProperty(String name, Object value) { 
     defaultLoadProperties.put(name, value); 
    } 

    protected Map getDefaultLoadProperties() { 
     return defaultLoadProperties; 
    } 

    protected DocumentFormatRegistry getDocumentFormatRegistry() { 
     return documentFormatRegistry; 
    } 

    public void convert(File inputFile, File outputFile) { 
     convert(inputFile, outputFile, null); 
    } 

    public void convert(File inputFile, File outputFile, DocumentFormat outputFormat) { 
     convert(inputFile, null, outputFile, outputFormat); 
    } 

    public void convert(InputStream inputStream, DocumentFormat inputFormat, OutputStream outputStream, DocumentFormat outputFormat) { 
     ensureNotNull("inputStream", inputStream); 
     ensureNotNull("inputFormat", inputFormat); 
     ensureNotNull("outputStream", outputStream); 
     ensureNotNull("outputFormat", outputFormat); 
     convertInternal(inputStream, inputFormat, outputStream, outputFormat); 
    } 

    public void convert(File inputFile, DocumentFormat inputFormat, File outputFile, DocumentFormat outputFormat) { 
     ensureNotNull("inputFile", inputFile); 
     ensureNotNull("outputFile", outputFile); 

     if (!inputFile.exists()) { 
      throw new IllegalArgumentException("inputFile doesn't exist: " + inputFile); 
     } 
     if (inputFormat == null) { 
      inputFormat = guessDocumentFormat(inputFile); 
     } 
     if (outputFormat == null) { 
      outputFormat = guessDocumentFormat(outputFile); 
     } 
     if (!inputFormat.isImportable()) { 
      throw new IllegalArgumentException("unsupported input format: " + inputFormat.getName()); 
     } 
     if (!inputFormat.isExportableTo(outputFormat)) { 
      throw new IllegalArgumentException("unsupported conversion: from " + inputFormat.getName() + " to " + outputFormat.getName()); 
     } 
     convertInternal(inputFile, inputFormat, outputFile, outputFormat); 
    } 

    protected abstract void convertInternal(InputStream inputStream, DocumentFormat inputFormat, OutputStream outputStream, DocumentFormat outputFormat); 

    protected abstract void convertInternal(File inputFile, DocumentFormat inputFormat, File outputFile, DocumentFormat outputFormat); 

    private void ensureNotNull(String argumentName, Object argumentValue) { 
     if (argumentValue == null) { 
      throw new IllegalArgumentException(argumentName + " is null"); 
     } 
    } 

    private DocumentFormat guessDocumentFormat(File file) { 
     String extension = FilenameUtils.getExtension(file.getName()); 
     DocumentFormat format = getDocumentFormatRegistry().getFormatByFileExtension(extension); 
     if (format == null) { 
      throw new IllegalArgumentException("unknown document format for file: " + file); 
     } 
     return format; 
    } 

    protected void refreshDocument(XComponent document) { 
     XRefreshable refreshable = (XRefreshable) UnoRuntime.queryInterface(XRefreshable.class, document); 
     if (refreshable != null) { 
      refreshable.refresh(); 
     } 
    } 

    protected static PropertyValue property(String name, Object value) { 
     PropertyValue property = new PropertyValue(); 
     property.Name = name; 
     property.Value = value; 
     return property; 
    } 

    protected static PropertyValue[] toPropertyValues(Map/*<String,Object>*/ properties) { 
     PropertyValue[] propertyValues = new PropertyValue[properties.size()]; 
     int i = 0; 
     for (Iterator iter = properties.entrySet().iterator(); iter.hasNext();) { 
      Map.Entry entry = (Map.Entry) iter.next(); 
      Object value = entry.getValue(); 
      if (value instanceof Map) { 
       // recursively convert nested Map to PropertyValue[] 
       Map subProperties = (Map) value; 
       value = toPropertyValues(subProperties); 
      } 
      propertyValues[i++] = property((String) entry.getKey(), value); 
     } 
     return propertyValues; 
    } 
} 
0

JodConverter 2.2.1版本无法为docx猜测DocumentFormat。尽管您可以将文件格式作为参数传递给输入文件。

final DocumentFormat docx = new DocumentFormat("Microsoft Word 2007 XML", DocumentFamily.TEXT, "application/vnd.openxmlformats-officedocument.wordprocessingml.document", "docx"); 
converter.convert(inputFile, docx, outputFile, null);