【问题标题】:Apache POI - DOCX To PDF ConversionApache POI - DOCX 到 PDF 转换
【发布时间】:2020-12-13 08:58:36
【问题描述】:

我正在尝试使用 POI 将 docx 文件转换为 pdf 文件。出现以下错误。 使用 poi-3.17 ,

  import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import org.apache.poi.xwpf.converter.pdf.PdfConverter;
    import org.apache.poi.xwpf.converter.pdf.PdfOptions;
    import org.apache.poi.xwpf.usermodel.XWPFDocument;
    
    public class WordToPDF {
    
        public static void main(String[] args) {
            WordToPDF cwoWord = new WordToPDF();
            System.out.println("Start");
            cwoWord.ConvertToPDF("D:\\2067536.docx", "D:\\2067536.pdf");
        }
    
        public void ConvertToPDF(String docPath, String pdfPath) {
            try {
                InputStream doc = new FileInputStream(new File(docPath));
                XWPFDocument document = new XWPFDocument(doc);
                document.createStyles();
                PdfOptions options = PdfOptions.create();
                OutputStream out = new FileOutputStream(new File(pdfPath));
                PdfConverter.getInstance().convert(document, out, options);
                System.out.println("Done");
            } catch (FileNotFoundException ex) {
                System.out.println(ex.getMessage());
            } catch (IOException ex) {
    
                System.out.println(ex.getMessage());
            }
        }
    
    }

这是发生的错误

Exception in thread "main" org.apache.poi.xwpf.converter.core.XWPFConverterException: java.lang.NullPointerException
        at org.apache.poi.xwpf.converter.pdf.PdfConverter.doConvert(PdfConverter.java:70)
        at org.apache.poi.xwpf.converter.pdf.PdfConverter.doConvert(PdfConverter.java:38)
        at org.apache.poi.xwpf.converter.core.AbstractXWPFConverter.convert(AbstractXWPFConverter.java:45)
        at WordToPDF.ConvertToPDF(WordToPDF.java:27)
        at WordToPDF.main(WordToPDF.java:17)
Caused by: java.lang.NullPointerException
        at org.apache.poi.xwpf.converter.pdf.internal.PdfMapper.visitHeader(PdfMapper.java:178)
        at org.apache.poi.xwpf.converter.pdf.internal.PdfMapper.visitHeader(PdfMapper.java:111)
        at org.apache.poi.xwpf.converter.core.XWPFDocumentVisitor.visitHeaderRef(XWPFDocumentVisitor.java:1142)
        at org.apache.poi.xwpf.converter.core.MasterPageManager.visitHeadersFooters(MasterPageManager.java:213)
        at org.apache.poi.xwpf.converter.core.MasterPageManager.addSection(MasterPageManager.java:180)
        at org.apache.poi.xwpf.converter.core.MasterPageManager.compute(MasterPageManager.java:127)
        at org.apache.poi.xwpf.converter.core.MasterPageManager.initialize(MasterPageManager.java:90)
        at org.apache.poi.xwpf.converter.core.XWPFDocumentVisitor.visitBodyElements(XWPFDocumentVisitor.java:232)
        at org.apache.poi.xwpf.converter.core.XWPFDocumentVisitor.start(XWPFDocumentVisitor.java:199)
        at org.apache.poi.xwpf.converter.pdf.PdfConverter.doConvert(PdfConverter.java:56)
        ... 4 more

由于这是一个空指针错误,我无法理解究竟是什么问题,感谢任何帮助。谢谢。

【问题讨论】:

  • 你能告诉我们你的代码的相关部分吗? (话虽如此,猜测一下,您似乎在使用第 3 方 converter which is no longer being maintained - 反过来,它使用 Apache POI 和其他库。)
  • 从包名上看好像你在使用旧版本的转换器,当你升级到最新的fr.opensagres 版本时会发生什么?
  • 也添加了代码
  • this question 的答案也可能提供一些帮助 - 与 Gagravarr 的评论相同。

标签: java pdf apache-poi docx


【解决方案1】:

Libre Office 救了我的命,一个简单的 docx 到 pdf 转换的线性命令就像一个魅力。

这里有详细解答

Command `libreoffice --headless --convert-to pdf test.docx --outdir /pdf` is not working

【讨论】:

    【解决方案2】:

    我用spire.doc for java把docx文件转成pdf,你可以试试。 https://www.e-iceblue.com/Tutorials/Java/Spire.Doc-for-Java/Program-Guide/Conversion/Convert-Word-to-PDF-in-Java.html

    import com.spire.doc.Document;
    import com.spire.doc.FileFormat;
    import com.spire.doc.ToPdfParameterList;
    
    public class WordToPDF {
       public static void main(String[] args)  {
    
          //Create Document object
          Document doc = new Document();
    
          //Load the file from disk.
          doc.loadFromFile("Sample.docx");
    
          //create an instance of ToPdfParameterList.
          ToPdfParameterList ppl=new ToPdfParameterList();
    
          //embeds full fonts by default when IsEmbeddedAllFonts is set to true.
          ppl.isEmbeddedAllFonts(true);
    
          //set setDisableLink to true to remove the hyperlink effect for the result PDF page.
          //set setDisableLink to false to preserve the hyperlink effect for the result PDF page.
          ppl.setDisableLink(true);
    
          //Set the output image quality as 40% of the original image. 80% is the default setting.
          doc.setJPEGQuality(40);
    
          //Save to file.
          doc.saveToFile("output/ToPDF.pdf",FileFormat.PDF);
      }
    

    }

    【讨论】:

    • Spire doc是付费软件,免费版只有3页可以转成PDF
    猜你喜欢
    • 2017-03-17
    • 2016-03-27
    • 2011-11-28
    • 2019-12-20
    • 1970-01-01
    • 2013-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多