Конвертировать файл DOC в DOCX с помощью Java - PullRequest
7 голосов
/ 12 июля 2011

Мне нужно использовать файлы DOCX (фактически, XML, содержащийся в них) в программном обеспечении Java, которое я сейчас разрабатываю, но некоторые люди в моей компании все еще используют формат DOC.

Знаете ли вы, есть ли способ конвертировать файл DOC в формат DOCX с использованием Java? Я знаю, что это возможно с помощью C #, но это не вариант

Я гуглил, но ничего не вышло ...

Спасибо

Ответы [ 6 ]

3 голосов
/ 04 октября 2011

Вы можете попробовать Aspose.Words для Java . Это позволяет вам загрузить файл DOC и сохранить его в формате DOCX . Код очень прост, как показано ниже:

// Open a document.  
Document doc = new Document("input.doc"); 
// Save document. 
doc.save("output.docx");

Пожалуйста, посмотрите, поможет ли это в вашем сценарии.

Раскрытие информации: я работаю евангелистом разработчика в Aspose.

2 голосов
/ 12 июля 2011

Проверьте JODConverter , чтобы увидеть, соответствует ли он требованиям.Я лично этим не пользовался.

2 голосов
/ 12 июля 2011

Чтобы конвертировать файл DOC в HTML, посмотрите на это ( Программное преобразование Word в HTML в Java )

Используйте это: http://poi.apache.org/

Или используйте это:

XWPFDocument docx = new XWPFDocument(OPCPackage.openOrCreate(new File("hello.docx")));  
XWPFWordExtractor wx = new XWPFWordExtractor(docx);  
String text = wx.getText();  
System.out.println("text = "+text); 
0 голосов
/ 08 мая 2019
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;

import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Paragraph;
import com.lowagie.text.pdf.PdfWriter;


import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.extractor.WordExtractor;

import org.apache.poi.hwpf.usermodel.Range;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;


public class TestCon {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        POIFSFileSystem fs = null;  
        Document document = new Document();

        try {  
            System.out.println("Starting the test");  
            fs = new POIFSFileSystem(new FileInputStream("C:/Users/312845/Desktop/a.doc"));  

            HWPFDocument doc = new HWPFDocument(fs);  
            WordExtractor we = new WordExtractor(doc);  

            OutputStream file = new FileOutputStream(new File("C:/Users/312845/Desktop/test.docx")); 

            System.out.println("Document testing completed");  
        } catch (Exception e) {  
            System.out.println("Exception during test");  
            e.printStackTrace();  
        } finally {  
            // close the document  
            document.close();  
        }  
    }  
}
0 голосов
/ 29 апреля 2015

Мне нужно было то же самое преобразование, после того, как я много изучил, Jodconvertor может пригодиться в этом. https://code.google.com/p/jodconverter/downloads/list

Добавьте файл jodconverter-core-3.0-beta-4-sources.jar в свой проект lib

  //1) Create OfficeManger Object     
OfficeManager officeManager = new DefaultOfficeManagerConfiguration()
                .setOfficeHome(new File("/opt/libreoffice4.4"))
                .buildOfficeManager();
        officeManager.start();
    // 2) Create JODConverter converter   
        OfficeDocumentConverter converter = new OfficeDocumentConverter(
                officeManager);
// 3)Create DocumentFormat for docx
DocumentFormat docx = converter.getFormatRegistry().getFormatByExtension("docx");
        docx.setStoreProperties(DocumentFamily.TEXT,
                Collections.singletonMap("FilterName", "MS Word 2007 XML"));
//4)Call convert funtion in converter object
converter.convert(new File("doc/AdvancedTable.doc"), new File(
                "docx/AdvancedTable.docx"), docx);
0 голосов
/ 16 августа 2012

JODConvertor вызывает OpenOffice / LibreOffice через сетевой протокол.Поэтому он может «делать все, что вы можете делать в OpenOffice».Это включает конвертацию форматов.Но он работает так же хорошо, как и любая версия OpenOffice, которую вы используете.У меня есть некоторые рисунки в одном из моих документов, и он не конвертирует их, как я надеялся.

JODConvertor больше не поддерживается, согласно веб-сайту кода Google для v3.

Комучтобы JOD выполнял работу, вам нужно сделать что-то вроде

private static void transformBinaryWordDocToDocX(File in, File out)
{
    OfficeDocumentConverter converter = new OfficeDocumentConverter(officeManager);
    DocumentFormat docx = converter.getFormatRegistry().getFormatByExtension("docx");
    docx.setStoreProperties(DocumentFamily.TEXT,
    Collections.singletonMap("FilterName", "MS Word 2007 XML"));

    converter.convert(in, out, docx);
}


private static void transformBinaryWordDocToW2003Xml(File in, File out)
{
    OfficeDocumentConverter converter = new OfficeDocumentConverter(officeManager);;
    DocumentFormat w2003xml = new DocumentFormat("Microsoft Word 2003 XML", "xml", "text/xml");
    w2003xml.setInputFamily(DocumentFamily.TEXT);
    w2003xml.setStoreProperties(DocumentFamily.TEXT, Collections.singletonMap("FilterName", "MS Word 2003 XML"));
    converter.convert(in, out, w2003xml);
}



private static OfficeManager officeManager;

@BeforeClass
public static void setupStatic() throws IOException {

          /*officeManager = new DefaultOfficeManagerConfiguration()
      .setOfficeHome("C:/Program Files/LibreOffice 3.6")
      .buildOfficeManager();
      */

    officeManager = new ExternalOfficeManagerConfiguration().setConnectOnStart(true).setPortNumber(8100).buildOfficeManager();


    officeManager.start();
}

@AfterClass
public static void shutdownStatic() throws IOException {

    officeManager.stop();
}

Чтобы это работало, вам нужно запустить LibreOffice в качестве сетевого сервера (я не смог заставить часть JODConvertor «запускать по требованию»)очень хорошо работают под windows с LO 3.6)

...