java8如何通过poi+text将word转为pdf

 更新时间:2025年04月23日 10:53:45   作者:C__jx  
这篇文章主要介绍了java8如何通过poi+text将word转为pdf问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

java8通过poi+text将word转为pdf

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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java中实现日期时间字符串转换为Date对象的方法

    Java中实现日期时间字符串转换为Date对象的方法

    在 Java 编程中,日期时间的处理是一项常见且重要的任务,无论是数据存储、日志记录还是业务逻辑处理,准确地表示和操作日期时间都是不可或缺的,本文给大家介绍了Java中实现日期时间字符串转换为Date对象的方法,需要的朋友可以参考下
    2025-01-01
  • Spring Security基本架构与初始化操作流程详解

    Spring Security基本架构与初始化操作流程详解

    这篇文章主要介绍了Spring Security基本架构与初始化操作流程,Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架
    2023-03-03
  • 学习JVM之java内存区域与异常

    学习JVM之java内存区域与异常

    关于JVM内存区域的知识对于初学者来说其实是很重要的,了解Java内存分配的原理,这对于以后JAVA的学习会有更深刻的理解。下面来看看详细介绍。
    2016-07-07
  • Spring Boot 2.X快速整合jpa过程解析

    Spring Boot 2.X快速整合jpa过程解析

    这篇文章主要介绍了Spring Boot 2.X 如何快速整合jpa?,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • java实现浮点数转人民币的小例子

    java实现浮点数转人民币的小例子

    java实现浮点数转人民币的小例子,需要的朋友可以参考一下
    2013-03-03
  • Java实现的断点续传功能的示例代码

    Java实现的断点续传功能的示例代码

    本篇文章主要介绍了Java实现的断点续传功能的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • C# 数据类型转换

    C# 数据类型转换

    这篇文章主要讲解C语言中基本数据类型、字符串与其它数据类型以及常见的日期类型的转换,希望能给大家做一个参考。希望能够给你带来帮助
    2021-07-07
  • SpringBoot从0到1整合银联无跳转支付功能附源码

    SpringBoot从0到1整合银联无跳转支付功能附源码

    这篇文章主要介绍了SpringBoot从0到1整合银联无跳转功能支付附源码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • Java事务管理学习之Spring和Hibernate详解

    Java事务管理学习之Spring和Hibernate详解

    这篇文章主要给大家介绍了Java事务管理学习之Spring和Hibernate的相关资料,文中通过示例代码介绍的非常详细,需要的朋友们可以参考借鉴,下面来一起看看吧。
    2017-03-03
  • Spring的循环依赖、三级缓存解决方案源码详细解析

    Spring的循环依赖、三级缓存解决方案源码详细解析

    这篇文章主要介绍了Spring的循环依赖、三级缓存解决方案源码详细解析,在Spring中,由于IOC的控制反转,创建对象不再是简单的new出来,而是交给Spring去创建,会经历一系列Bean的生命周期才创建出相应的对象,需要的朋友可以参考下
    2024-01-01

最新评论