1、jar包:
<dependency>
<groupId>fr.opensagres.xdocreport</groupId>
<artifactId>org.apache.poi.xwpf.converter.pdf</artifactId>
<version>1.0.6</version>
</dependency>
2、代码util类(部分文档转换后会有格式问题,暂未解决)
package com.zjjw.jxtest.util.util;
import com.lowagie.text.Font;
import com.lowagie.text.pdf.BaseFont;
import fr.opensagres.xdocreport.itext.extension.font.IFontProvider;
import org.apache.poi.xwpf.converter.pdf.PdfConverter;
import org.apache.poi.xwpf.converter.pdf.PdfOptions;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Paths;
/**
* @author: chenjiaxiang
* @create: 2022/11/22 14:40
**/
public class WordToPdfUtils {
private static final String FONTS1 = "/Users/chenjx/Library/Fonts/SIMSUN.TTC,1";
private static final String FONTS2 = "/Users/chenjx/Library/Fonts/SIMFANG.TTF";
private static final String FONTS_NAME = "仿宋";
public static void main(String[] args) throws Exception {
String filePath = "/Users/chenjx/Downloads/zipceshi/createYuWord.docx";
String outPath = "/Users/chenjx/Downloads/zipceshi/pdf/a.pdf";
WordToPdfUtils wordPdfUtils = new WordToPdfUtils();
wordPdfUtils.wordToPdf(filePath, outPath);
}
public void wordToPdf(String wordPath, String pdfPath) {
InputStream in = null;
OutputStream outPDF = null;
XWPFDocument document;
try {
in = Files.newInputStream(Paths.get(wordPath));
document = new XWPFDocument(in);
// 将word转成pdf
PdfOptions options = PdfOptions.create();
outPDF = Files.newOutputStream(Paths.get(pdfPath));
options.fontProvider(new IFontProvider() {
@Override
public Font getFont(String familyName, String encoding, float size, int style, java.awt.Color color) {
try {
String prefixFont;
String os = System.getProperties().getProperty("os.name");
if (os.startsWith("win") || os.startsWith("Win")) {
/*windows字体*/
prefixFont = "C:\\Windows\\Fonts\\simsun.ttc,0";
} else {
/*linux字体*/
prefixFont = FONTS1;
}
BaseFont stChinese = BaseFont.createFont(prefixFont, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
BaseFont fsChinese = BaseFont.createFont(FONTS2, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
Font stFontChinese = new Font(stChinese, size, style, color);
Font fsFontChinese = new Font(fsChinese, size, style, color);
if (familyName != null) {
if (FONTS_NAME.equals(familyName)) {
fsFontChinese.setFamily(familyName);
return fsFontChinese;
} else {
stFontChinese.setFamily(familyName);
}
}
return stFontChinese;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
});
PdfConverter.getInstance().convert(document, outPDF, options);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (in != null) {
in.close();
}
if (outPDF != null) {
outPDF.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
3、word格式:
4、导出pdf样式: