我在使用Apache POI创建DOC文件,然后转换为PDF时遇到问题 .

使用Apache POI创建DOC文件效果很好,它会输出带有文本,表格,图像和阴影 Headers 的DOC而不会出现问题 . 如果我使用IText创建PDF,这也有效 .

我试图通过创建DOC然后将其转换为PDF来减少开发和更改时间,以便我没有两个代码库来管理 .

当我使用Apache POI转换器将DOC转换为PDF时,我得到了样式错误 .

org.apache.poi.xwpf.converter.core.XWPFConverterException: java.lang.IllegalStateException: Expecting one Styles document part, but found 0

我在代码中添加了样式 . 但后来得到这个错误:

我还得到一个与 Headers 有关的空指针异常,错误如下:ERROR CODE

org.apache.poi.xwpf.converter.core.XWPFConverterException: java.lang.NullPointerException
 at org.apache.poi.xwpf.converter.pdf.PdfConverter.doConvert(PdfConverter.java:70) ~[org.apache.poi.xwpf.converter.pdf-1.0.6.jar:1.0.6]
 at org.apache.poi.xwpf.converter.pdf.PdfConverter.doConvert(PdfConverter.java:38) ~[org.apache.poi.xwpf.converter.pdf-1.0.6.jar:1.0.6]
 at org.apache.poi.xwpf.converter.core.AbstractXWPFConverter.convert(AbstractXWPFConverter.java:45) ~[org.apache.poi.xwpf.converter.core-1.0.6.jar:1.0.6]
 at com.imviewer.report.DocxReportBuilder311CUSTOM.ConvertToPDF(DocxReportBuilder311CUSTOM.java:878) [classes/:na]
 at com.imviewer.report.DocxReportBuilder311CUSTOM.doInBackground(DocxReportBuilder311CUSTOM.java:833) [classes/:na]
 at com.imviewer.report.DocxReportBuilder311CUSTOM.doInBackground(DocxReportBuilder311CUSTOM.java:1) [classes/:na]
 at javax.swing.SwingWorker$1.call(Unknown Source) [na:1.8.0_161]
 at java.util.concurrent.FutureTask.run(Unknown Source) [na:1.8.0_161]
 at javax.swing.SwingWorker.run(Unknown Source) [na:1.8.0_161]
 at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [na:1.8.0_161]
 at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [na:1.8.0_161]
 at java.lang.Thread.run(Unknown Source) [na:1.8.0_161]
Caused by: java.lang.NullPointerException: null
 at org.apache.poi.xwpf.converter.core.utils.XWPFTableUtil.getGridColList(XWPFTableUtil.java:183) ~[org.apache.poi.xwpf.converter.core-1.0.6.jar:1.0.6]
 at org.apache.poi.xwpf.converter.core.utils.XWPFTableUtil.computeColWidths(XWPFTableUtil.java:116) ~[org.apache.poi.xwpf.converter.core-1.0.6.jar:1.0.6]
 at org.apache.poi.xwpf.converter.core.XWPFDocumentVisitor.visitTable(XWPFDocumentVisitor.java:867) ~[org.apache.poi.xwpf.converter.core-1.0.6.jar:1.0.6]
 at org.apache.poi.xwpf.converter.core.XWPFDocumentVisitor.visitBodyElements(XWPFDocumentVisitor.java:251) ~[org.apache.poi.xwpf.converter.core-1.0.6.jar:1.0.6]
 at org.apache.poi.xwpf.converter.core.XWPFDocumentVisitor.start(XWPFDocumentVisitor.java:199) ~[org.apache.poi.xwpf.converter.core-1.0.6.jar:1.0.6]
 at org.apache.poi.xwpf.converter.pdf.PdfConverter.doConvert(PdfConverter.java:56) ~[org.apache.poi.xwpf.converter.pdf-1.0.6.jar:1.0.6]
 ... 11 common frames omitted

然后我尝试使用Apache POI在一段单独的代码中手动将DOC转换为PDF,输出文本,表/图像显示在正确的位置,但没有表格线显示(尽管间距看起来正确) . 但是,如果我打开创建的DOC,删除表格式,然后重新应用,然后将DOC转换为PDF,就会出现这些行 .

似乎Apache POI创建的DOC中显示的行不会转换或显示在由Apache转换的PDF中 - 但是,如果我们手动添加表格格式,它确实显示 .

有人可以帮忙吗?

public static void ConvertToPDF(File docPath, File pdfPath) {
        try {
            InputStream doc = new FileInputStream(docPath);
            XWPFDocument document = new XWPFDocument(doc);
            PdfOptions options = PdfOptions.create();
            OutputStream out = new FileOutputStream(pdfPath);
            PdfConverter.getInstance().convert(document, out, options);
            System.out.println("Completed");
        } catch (IOException ex) {
            System.out.println(ex.getMessage());
        }
    }

使用的库版本是:
enter image description here