java - Word 文档合并使用 Apache POI 合并后生成“文件损坏错误”
问题描述
嘿,伙计们请注意,这似乎是与以前的帖子类似的问题- 但在那里发布的解决方案并不能解决我的错误。
我的要求是,
1)加载多个word文档,2)将word文档合并为一个word文档。
伙计们付出了一些努力,我能够使用 Apache POI API 合并文件。但是,一旦我尝试打开合并的文件,Microsoft Word 会生成以下错误,
“Word 在 final.docx 中发现了不可读的内容。是否要恢复此文档的内容?如果您信任此文档的来源,请单击“是”。
伙计们注意到,在我单击“是”后,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();
}
}
}
据我所知,我的库依赖项都是最新的:
不知道为什么代码会产生错误。尽管合并准确地完成了。你能帮帮我吗伙计们
解决方案
不确定这个问题是否已经解决。但是,由于我刚刚遇到了与此错误相同的问题,因此我想与其他人分享我的解决方案:
在 word 文件中使用 apache poi 生成空表单元格时,会出现同样的错误。出于某种原因,word 不喜欢那些空单元格。在我为表中的所有空单元格添加 .addParagraph() 后,错误消失了。来源:https ://bz.apache.org/bugzilla/show_bug.cgi?id=65292
推荐阅读
- reactjs - ESLint - 函数反应组件上缺少返回类型 - 打字稿错误解释
- spring-boot - Spring Scheduler 在循环后不会停止,但会在停止并重新触发之前运行 1 分钟
- python - 如何在给定时间后插入用于随机化和操作的命令
- python - Python多线程效率不高
- python - 为什么只有第一个 if 语句在我的 getPostFix 方法中执行?
- android - 在 glide 中设置内存缓存
- julia - 如何使用现有阵列的采样技术创建样本?
- asp.net-core - 如何在 .Net Core 中制作类模型?
- kotlin - 在 Kotlin 中计算 MutableMap 中的字符串出现次数
- python - 如何从熊猫数据框中组织 JSON 数据