Java 合并行时将XWPFDocument转换为pdf时的XmlValueDisconnectedException
我需要垂直合并单元格,我在stackoverflow找到了一个示例代码,它可以正常工作,但后来当我将XWPFDocument转换为pdf时,我发现了以下错误 fr.opensagres.poi.xwpf.converter.core.XWPFConverterException:org.apache.xmlbeans.impl.values.XmlValueDisconnectedException 如果执行“cell.removeParague”,则会发生这种情况Java 合并行时将XWPFDocument转换为pdf时的XmlValueDisconnectedException,java,apache-poi,xwpf,Java,Apache Poi,Xwpf,我需要垂直合并单元格,我在stackoverflow找到了一个示例代码,它可以正常工作,但后来当我将XWPFDocument转换为pdf时,我发现了以下错误 fr.opensagres.poi.xwpf.converter.core.XWPFConverterException:org.apache.xmlbeans.impl.values.XmlValueDisconnectedException 如果执行“cell.removeParague”,则会发生这种情况 public void co
public void convertToPdf() throws Exception {
InputStream targetStream = new FileInputStream("table.docx");
XWPFDocument document = new XWPFDocument(targetStream);
XWPFTable table = document.getTables().get(0);
mergeCellVertically(table, 0, 3, 7);
document.close();
FileOutputStream out = new FileOutputStream("table.pdf");
PdfOptions options = PdfOptions.create();
PdfConverter.getInstance().convert(document, out, options);
}
private void mergeCellVertically(XWPFTable table, int col, int fromRow, int toRow) {
for(int rowIndex = fromRow; rowIndex <= toRow; rowIndex++) {
XWPFTableCell cell = table.getRow(rowIndex).getCell(col);
CTVMerge vmerge = CTVMerge.Factory.newInstance();
if (rowIndex == fromRow){
// The first merged cell is set with RESTART merge value
vmerge.setVal(STMerge.RESTART);
} else {
// Cells which join (merge) the first one, are set with CONTINUE
vmerge.setVal(STMerge.CONTINUE);
// and the content should be removed
for (int i = cell.getParagraphs().size(); i > 0; i--) {
cell.removeParagraph(0);
}
cell.addParagraph();
}
// Try getting the TcPr. Not simply setting an new one every time.
CTTcPr tcPr = cell.getCTTc().getTcPr();
if (tcPr != null) {
tcPr.setVMerge(vmerge);
} else {
// only set an new TcPr if there is not one already
tcPr = CTTcPr.Factory.newInstance();
tcPr.setVMerge(vmerge);
cell.getCTTc().setTcPr(tcPr);
}
}
}
public void convertToPdf()引发异常{
InputStream targetStream=新文件InputStream(“table.docx”);
XWPFDocument document=新的XWPFDocument(targetStream);
XWPFTable table=document.getTables().get(0);
垂直合并单元(表0、3、7);
document.close();
FileOutputStream out=新的FileOutputStream(“table.pdf”);
PdfOptions options=PdfOptions.create();
PdfConverter.getInstance().convert(文档、输出、选项);
}
私有void mergecell垂直(XWPFTable表,int col,int fromRow,int toRow){
对于(int rowIndex=fromRow;rowIndex 0;i--){
删除第(0)段中的单元格;
}
单元格。添加段落();
}
//尝试获取TcPr。不只是每次都设置一个新的。
CTTcPr tcPr=cell.getCTTc().getcpr();
如果(tcPr!=null){
tcPr.setVMerge(vmerge);
}否则{
//只有在没有TcPr的情况下才设置新的TcPr
tcPr=CTTcPr.Factory.newInstance();
tcPr.setVMerge(vmerge);
cell.getCTTc().setTcPr(tcPr);
}
}
}
fr.opensagres转换器的哪个版本?@Gagravarr它是2.0.2您使用的是哪个版本的fr.opensagres
转换器?@Gagravarr它是2.0.2