接到一个java后台实现excel转pdf的需求,多方辗转查阅文档后,最终用iText7的pdfoffice拓展模块实现了最完美的效果,记录如下。
pom引入依赖包,由于pdfoffice是收费模块,官方未发布到maven中心仓库,我把自己下载的依赖放到了这里,需要的自取。
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext7-core</artifactId>
<version>7.2.2</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>pdfoffice</artifactId>
<version>2.0.2</version>
</dependency>
代码实例
package top.yjltf.excel;
import com.itextpdf.commons.actions.ProductNameConstant;
import com.itextpdf.pdfoffice.OfficeConverter;
import java.io.File;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
public class PdfOffice {
private static String excelPath = "E:\\test\\test.xlsx";
private static String pdfPath = "E:\\test\\test.pdf";
public static void main(String[] args) throws Exception {
//权限破解
Field field = ProductNameConstant.class.getDeclaredField("PRODUCT_NAMES");
field.setAccessible(true);
Field modifiers = field.getClass().getDeclaredField("modifiers");
modifiers.setAccessible(true);
modifiers.setInt(field, field.getModifiers() & ~Modifier.FINAL);
field.set(ProductNameConstant.class, Collections.unmodifiableSet(new HashSet(Arrays.asList("itext-core", "pdfHtml", "pdfSweep", "pdfOcr-tesseract4", "pdfOffice"))));
//excel转pdf
OfficeConverter.convertOfficeSpreadsheetToPdf(new File(excelPath), new File(pdfPath));
}
}
注:由于pdfOffice属于收费模块,这里用了一些其他手段达到了可用的目的,仅供学习参考,商用后果自负。