Объединение нескольких текстовых документов (с изображениями) в Java - PullRequest
1 голос
/ 22 января 2020

Я пытаюсь создать простое служебное приложение, но возникают проблемы с объединением двух слов документов с изображениями.

Пожалуйста, найдите мой код ниже (я использую Apache POI). Код прекрасно работает для текста и другой информации, но не может объединить документы с изображениями.

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;

import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBody;

public class WordMerge {
    private final OutputStream result;
    private final List<InputStream> inputs;
    private XWPFDocument first;

    public WordMerge(OutputStream result) {
        this.result = result;
        inputs = new ArrayList<>();
    }

    public void add(InputStream stream) throws Exception{            
        inputs.add(stream);
        OPCPackage srcPackage = OPCPackage.open(stream);
        XWPFDocument src1Document = new XWPFDocument(srcPackage);         
        if(inputs.size() == 1){
            first = src1Document;
        } else {            
            CTBody srcBody = src1Document.getDocument().getBody();
            first.getDocument().addNewBody().set(srcBody);            
        }        
    }

    public void doMerge() throws Exception{
        first.write(result);                
    }

    public void close() throws Exception{
        result.flush();
        result.close();
        for (InputStream input : inputs) {
            input.close();
        }
    }   

    public static void main(String[] args) throws Exception {
        FileOutputStream faos = new FileOutputStream("C:/temp/result.docx");
        WordMerge wm = new WordMerge(faos);
        wm.add( new FileInputStream("C:\\temp\\test.docx") );
        wm.add( new FileInputStream("C:\\temp\\word_images.docx") );
        wm.doMerge();
        wm.close();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...