Word слияния документов с использованием Apache POI генерирует «ошибка файла поврежден» после слияния - PullRequest
0 голосов
/ 11 апреля 2020

Привет, ребята, обратите внимание, что это похоже на проблему в предыдущем посте - но опубликованное там решение не решает мою ошибку.

Мои требования заключались в том, чтобы

1) загружать документы из нескольких слов и 2) объединять документы в одно слово.

Ребята, мне удалось объединить файлы с помощью Apache POI API. Однако, как только я пытаюсь открыть объединенный файл, Microsoft Word генерирует следующую ошибку:

"Word обнаружил нечитаемый контент в final.docx. Хотите восстановить содержимое этого документа? Если вы доверяйте источнику этого документа, нажмите кнопку Да. "

enter image description here

Ребята, обратите внимание, что Microsoft Word может полностью восстановить файл после того, как я нажмите «ДА»; результирующие файлы были правильно объединены. Однако я хотел бы по возможности исключить предупреждение об ошибке повреждения файла.

Мой список кодов для класса слияния,

package rx.reportgenerator.gh;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
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.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBody;
/**
 *
 * @author kwadwooteng-amoko
 */
public class WordMerge {



    private final OutputStream merger;
    private final List<InputStream> docs;
    private XWPFDocument first;



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

    public void add(InputStream document) throws Exception{            
        docs.add(document);
        OPCPackage src = OPCPackage.open(document);
        XWPFDocument xDocument = new XWPFDocument(src);     
        XWPFParagraph paragraph = xDocument.createParagraph();
        paragraph.setPageBreak(true);
        if(docs.size() == 1){
            first = xDocument;
        } else {            
            CTBody xBody = xDocument.getDocument().getBody();
            first.getDocument().addNewBody().set(xBody);            
        }        
    }

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

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

}

Мои библиотечные зависимости, насколько мне известно, все до даты:

enter image description here

Понятия не имею, почему код генерирует ошибку. Хотя слияние завершено точно. Можете ли вы помочь мне, ребята

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...