Java 合并行时将XWPFDocument转换为pdf时的XmlValueDisconnectedException

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

我需要垂直合并单元格,我在stackoverflow找到了一个示例代码,它可以正常工作,但后来当我将XWPFDocument转换为pdf时,我发现了以下错误 fr.opensagres.poi.xwpf.converter.core.XWPFConverterException:org.apache.xmlbeans.impl.values.XmlValueDisconnectedException 如果执行“cell.removeParague”,则会发生这种情况

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