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

总结

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

相关文章

  • Spring-data-redis操作redis cluster的示例代码

    Spring-data-redis操作redis cluster的示例代码

    这篇文章主要介绍了Spring-data-redis操作redis cluster的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-10-10
  • Java利用HttpClient模拟POST表单操作应用及注意事项

    Java利用HttpClient模拟POST表单操作应用及注意事项

    本文主要介绍JAVA中利用HttpClient模拟POST表单操作,希望对大家有所帮助。
    2016-04-04
  • Java中断线程的方法

    Java中断线程的方法

    这篇文章主要介绍了Java中断线程的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-05-05
  • java打包文件成zip、压缩文件及file.mkdir和mkdirs的区别详解

    java打包文件成zip、压缩文件及file.mkdir和mkdirs的区别详解

    这篇文章主要给大家介绍了关于java打包文件成zip、压缩文件及file.mkdir和mkdirs区别详解的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-12-12
  • mybatis使用xml进行增删改查代码解析

    mybatis使用xml进行增删改查代码解析

    这篇文章主要介绍了mybatis使用xml进行增删改查代码解析,分享了相关配置和代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-02-02
  • 一文详解Java中的原子操作

    一文详解Java中的原子操作

    在Java中,原子操作尤为重要,尤其是在多线程环境中,想象一下,如果小黑在操作一个共享变量时,这个操作被其他线程打断,那会发生什么?可能会导致数据不一致,或者更糟糕的情况,本文将给大家详细介绍一下Java中的原子操作
    2024-01-01
  • JDK的Parser来解析Java源代码详解

    JDK的Parser来解析Java源代码详解

    这篇文章主要介绍了JDK的Parser来解析Java源代码的相关资料,需要的朋友可以参考下
    2016-09-09
  • idea的注释不可编辑,变成了只读模式的问题及解决

    idea的注释不可编辑,变成了只读模式的问题及解决

    IDEA注释在编辑后再次打开时可能会变成只读模式,无法编辑,此时只需点击注释旁的铅笔图标即可再次编辑,若要永久取消此功能,需在设置中禁ReaderMode模式,并取消勾选“EnableReaderMode”选项
    2026-05-05
  • Java中volatile关键字的作用是什么举例详解

    Java中volatile关键字的作用是什么举例详解

    这篇文章主要介绍了Java中volatile关键字的作用是什么的相关资料,volatile关键字在Java中用于修饰变量,提供可见性和禁止指令重排的特性,但不保证原子性,它通过内存屏障实现这些特性,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-04-04
  • IDEA中的JFormDesigner使用小结

    IDEA中的JFormDesigner使用小结

    JFormDesigner是一款用于设计和创建图形用户界面的插件,本文主要介绍了IDEA中的JFormDesigner使用小结,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01

最新评论