java8通过 poi+text 将word转为pdf

7 篇文章 5 订阅

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样式:

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C__jx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值