我在使用Apache POI创建DOC文件,然后转换为PDF时遇到问题。
使用Apache POI创建DOC文件效果良好,它可以毫无问题地输出包含文本、表格、图像和阴影标题的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
我在代码中添加了样式。但随后会出现以下错误:
我还得到了一个与头相关的空指针异常,错误如下:错误代码
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());
}
}
我使用的库版本是:
发布于 2019-12-05 14:07:42
在文档中添加,document.createStyles();
https://stackoverflow.com/questions/49276063
复制相似问题