Java使用apache下的XWDF包将word转为pdf时,documentVisitor类473行document.getNumbering出现了空指针异常,报错代码如下:
protected XWPFNum getXWPFNum( CTNumPr numPr )
{
CTDecimalNumber numID = numPr.getNumId();
if ( numID == null )
{
// numID can be null, ignore the numbering
// see https://code.google.com/p/xdocreport/issues/detail?id=239
return null;
}
XWPFNum num = document.getNumbering().getNum( numID.getVal() );
return num;
};
针对这个问题之前采用了一种方案,java实现word转pdf大写目录转为小写的修复方案_jodconverter的word转pdf的二级标题数字会变大写,间距也会变大-优快云博客
但是这个,会导致排版的编号和内容出现空格,如
后来发现了,既然word不使用文字排版,那么我就对此处代码加了非空判断处理,由于是引用的包中的代码,我在相同包下重写了XWPFdocumentVisitor中的getXWPFNum方法,如下:
protected XWPFNum getXWPFNum( CTNumPr numPr )
{
CTDecimalNumber numID = numPr.getNumId();
if ( numID == null )
{
// numID can be null, ignore the numbering
// see https://code.google.com/p/xdocreport/issues/detail?id=239
return null;
}
/**
* 20240418修复 word有可能不使用编号排版功能
*/
if(null != document.getNumbering()) {
XWPFNum num = document.getNumbering().getNum( numID.getVal() );
return num;
}else {
return null;
}
}
本地测试后,无论word怎么排版,转换为PDF后格式都保持和word一样了