POI生成PDF XWPFConverterException、NumberFormatException已解决

功能描述:

想生成一个PDF格式的制式文件
1.准备一个WORD模板,替换模板中的参数,生成目标文档(docx);
2.将目标文档(docx)转换成PDF。

遇到了一个这样的问题

根据模板生成的Word文件,和想象中一模一样,无比正常。在生成PDF时,就会报错:
XWPFConverterException、NumberFormatException: For input string: “”

fr.opensagres.poi.xwpf.converter.core.XWPFConverterException: java.lang.NumberFormatException: For input string: ""
at fr.opensagres.poi.xwpf.converter.pdf.PdfConverter.doConvert(PdfConverter.java:71)
at fr.opensagres.poi.xwpf.converter.pdf.PdfConverter.doConvert(PdfConverter.java:39)
at fr.opensagres.poi.xwpf.converter.core.AbstractXWPFConverter.convert(AbstractXWPFConverter.java:46)

PDF文件会创建,打开时也报错:
在这里插入图片描述
报错代码位置:

PdfConverter.getInstance().convert(xwpfDocument,fileOutputStream,pdfOptions);

源码:

public static String createFile(Map<String, Object> map, String fileName) {
		String modelFileName = "//D://model//模板.docx";
		String outputDocxName = "//D://model//output//文档.docx";
		String pdfFileName = "//D://model//output//文档.pdf";

		try {
			XWPFTemplate template = XWPFTemplate.compile(new FileInputStream( modelFileName )).render(map);
			CTProperties properties = template.getXWPFDocument().getProperties().getExtendedProperties().getUnderlyingProperties();
			int a = properties.getPages();
			FileOutputStream out = new FileOutputStream(outputDocxName);
			template.write(out);
			out.flush();
			out.close();

			InputStream fileInputStream = new FileInputStream( outputDocxName );
			XWPFDocument xwpfDocument = new XWPFDocument(fileInputStream);
			xwpfDocument.createNumbering();
			PdfOptions pdfOptions = PdfOptions.create();
			OutputStream fileOutputStream = new FileOutputStream(pdfFileName);
			PdfConverter.getInstance().convert(xwpfDocument,fileOutputStream,pdfOptions);
			fileInputStream.close();
			fileOutputStream.close();
		} catch (IOException e) {
			pdfFileName = "";
			e.printStackTrace();
		}

		return pdfFileName;
	}

参考了一些 ,并未解决,比如:
poi xwpf 转换成 html,生成的doc文档转换html失败
生成的doc文档转换pdf失败 · Issue #95

于是,开始在包里打断点跟代码…
发现把模板生成的Word,加个空格再去掉,点击保存,就能成功生成PDF。
十分诡异,不过基本锁定是生成的Word有问题,导致生成PDF失败,虽然肉眼看不出Word有什么问题。
想到这个工程是比较老的,配置可能也比较老,先改到最新试试。com.deepoove.poi-tl升到1.9.0之后,提示poi至少要4.1.2版本。
原来的配置:

<dependency>
     <groupId>org.apache.poi</groupId>
     <artifactId>poi</artifactId>
     <version>3.17</version>
 </dependency>
 <dependency>
     <groupId>org.apache.poi</groupId>
     <artifactId>poi-ooxml</artifactId>
     <version>3.14</version>
 </dependency>
 <dependency>
     <groupId>com.deepoove</groupId>
     <artifactId>poi-tl</artifactId>
     <version>1.5.0</version>
 </dependency>
 <dependency>
     <groupId>fr.opensagres.xdocreport</groupId>
     <artifactId>fr.opensagres.poi.xwpf.converter.pdf</artifactId>
     <version>2.0.1</version>
 </dependency>

更新版本:

<dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>4.1.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>4.1.2</version>
        </dependency>
        <dependency>
            <groupId>com.deepoove</groupId>
            <artifactId>poi-tl</artifactId>
            <version>1.9.0</version>
        </dependency>
        <dependency>
            <groupId>fr.opensagres.xdocreport</groupId>
            <artifactId>fr.opensagres.poi.xwpf.converter.pdf-gae</artifactId>
            <version>2.0.2</version>
        </dependency>

虽然不知道原理是什么,不过这次好用了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值