java word转pdf,docx4j转pdf,docx4j导出pdf乱码,docx4j导出pdf丢失插画和图片,aspose将word转pdf 一共两种方法

本文介绍了两种在Java中将Word文档(docx)转换为PDF的方法:docx4j和Aspose。docx4j在某些情况下无法保留图片和插图,而Aspose则能更好地处理这些问题,但需要配置License.xml去除水印。对于Linux环境,需要额外配置字体以防止乱码。此外,文章还提到了SpringBoot项目中包含本地jar包的打包策略。
摘要由CSDN通过智能技术生成

前言:一共有docx4j转pdf,aspose转pdf两种方式,不需要设置模板!!!

java转pdf目前本人使用有两种方法,下面是方法代码

ps:因为本人是云桌面开发,所以只作截图,具体代码需要自己手动,也可以用微信或者qq直接提取文字,两种方法都可行,大家自己选择。

ps:word转pdf,文件必须是docx格式,docx和doc的区别可查看

docx和doc的区别

本人做的是预览功能,跟下载一个样,都是下载,只不过前端拿到pdf后,简单处理就可实现界面预览

一:docx4j转pdf

因为本人没有使用该方法,所以没有提取工具类,大家想代码整洁,可自己提取。

注意:这个方法本人使用的时候没有办法保留插图和图片,如果有这个需要,推荐第二个方法。

1.1先引入docx4j相关jar包

1.2docx4j转pdf代码实现

ps:

fontMapper.put("隶书", PhysicalFonts.get("LiSu"));
        fontMapper.put("宋体", PhysicalFonts.get("SimSun"));
        fontMapper.put("微软雅黑", PhysicalFonts.get("Microsoft Yahei"));
        fontMapper.put("黑体", PhysicalFonts.get("SimHei"));
        fontMapper.put("楷体", PhysicalFonts.get("KaiTi"));
        fontMapper.put("新宋体", PhysicalFonts.get("NSimSun"));
        fontMapper.put("华文行楷", PhysicalFonts.get("STXingkai"));
        fontMapper.put("华文仿宋", PhysicalFonts.get("STFangsong"));
        fontMapper.put("仿宋", PhysicalFonts.get("FangSong"));
        fontMapper.put("幼圆", PhysicalFonts.get("YouYuan"));
        fontMapper.put("华文宋体", PhysicalFonts.get("STSong"));
        fontMapper.put("华文中宋", PhysicalFonts.get("STZhongsong"));
        fontMapper.put("等线", PhysicalFonts.get("SimSun"));
        fontMapper.put("等线 Light", PhysicalFonts.get("SimSun"));
        fontMapper.put("华文琥珀", PhysicalFonts.get("STHupo"));
        fontMapper.put("华文隶书", PhysicalFonts.get("STLiti"));
        fontMapper.put("华文新魏", PhysicalFonts.get("STXinwei"));
        fontMapper.put("华文彩云", PhysicalFonts.get("STCaiyun"));
        fontMapper.put("方正姚体", PhysicalFonts.get("FZYaoti"));
        fontMapper.put("方正舒体", PhysicalFonts.get("FZShuTi"));
        fontMapper.put("华文细黑", PhysicalFonts.get("STXihei"));
        fontMapper.put("宋体扩展", PhysicalFonts.get("simsun-extB"));
        fontMapper.put("仿宋_GB2312", PhysicalFonts.get("FangSong_GB2312"));
        fontMapper.put("新細明體", PhysicalFonts.get("SimSun"));
        //解决宋体(正文)和宋体(标题)的乱码问题
        PhysicalFonts.put("PMingLiU", PhysicalFonts.get("SimSun"));
        PhysicalFonts.put("新細明體", PhysicalFonts.get("SimSun"));
        //宋体&新宋体
        PhysicalFont simsunFont = PhysicalFonts.get("SimSun");
        fontMapper.put("SimSun", simsunFont);
        //设置字体
        mlPackage.setFontMapper(fontMapper);

注意:这个方法在window系统下没啥问题,但是如果是linux系统下部署就不行了,因为在linux系统下环境缺少这些字体,所以设置后还是没啥用,需要配置环境字体,下面是配置步骤。

1.3:linux环境下配置字体格式,防止乱码

(1)在linux(CentOS7)环境中新建文件夹/usr/share/fonts/win_font

(2)将C:\Windows\Fonts(win10)中的字体文件拷贝到/usr/share/fonts/win_font文件夹中

(3)加载字体文件,直接顺序执行命令

 mkfontscale       //字体扩展
 mkfontdir           //新增字体目录
 fc-cache -fv      //刷新缓存

(4)查看字体安装情况

 fc-list :lang=zh

第一种方法结束。

二:荐:利用aspose解决word转pdf

前言:

该方法,需要下载aspose-words-15.8.0jar包,也可以是其它版本,然后引入进来,放到maven项目根目录lib文件夹下,也可以把jar包放到仓库,引入到pom文件,这个操作不会的话,自行百度,在此不多说。下面是实现word转pdf详情步骤。

2.1:下载asposejar包

本人提供的下载链接可以自己下载,也可以百度下载其它版本

百度网盘链接:

链接:https://pan.baidu.com/s/19Zev_2q17bVTWNqvpAG-ZQ 提取码:uqrk

2.2:引入jar包

2.2.1在项目根目录中创建一个lib文件,和src文件夹同级别

2.2.2引入本地jar包

        <dependency>
            <groupId>com.aspose</groupId>
            <artifactId>aspose-words</artifactId>
            <version>15.8.0</version>
            <scope>system</scope>
            <systemPath>${project.basedir}/lib/aspose-words-15.8.0-jdk16.jar</systemPath>
        </dependency>

2.3配置License.xml

ps:为什么配置这个玩意呢,因为这个aspose转pdf后会带水印,配置License.xml就是去掉水印。

这个东西也可以百度,可以找到,下面贴出来的,是本人用的一个

2.3.1License.xml直接放到resources的根目录

<License>
    <Data>
        <Products>
            <Product>Aspose.Total for Java</Product>
            <Product>Aspose.Words for Java</Product>
        </Products>
        <EditionType>Enterprise</EditionType>
        <SubscriptionExpiry>20991231</SubscriptionExpiry>
        <LicenseExpiry>20991231</LicenseExpiry>
        <SerialNumber>8bfe198c-7f0c-4ef8-8ff0-acc3237bf0d7</SerialNumber>
    </Data>
    <Signature>
        sNLLKGMUdF0r8O1kKilWAGdgfs2BvJb/2Xp8p5iuDVfZXmhppo+d0Ran1P9TKdjV4ABwAgKXxJ3jcQTqE/2IRfqwnPf8itN8aFZlV3TJPYeD3yWE7IT55Gz6EijUpC7aKeoohTb4w2fpox58wWoF3SNp6sK6jDfiAUGEHYJ9pjU=
    </Signature>
</License>

2.4word转pdf工具类

/**
 * @author : zhangbohao
 * description : Aspose工具类
 */
public class AsposeUtil {

    /**
     * 加载license 用于破解 不生成水印
     */
    @SneakyThrows
    private static void getLicense() {
        try (InputStream is = AsposeUtil.class.getClassLoader().getResourceAsStream("License.xml")) {
            License license = new License();
            license.setLicense(is);
        }
    }

    /**
     * word转pdf
     *
     * @param wordPath word文件保存的路径
     * @param pdfPath  转换后pdf文件保存的路径
     */
    @SneakyThrows
    public static void wordToPdf(String wordPath, String pdfPath) {
        getLicense();
        File file = new File(pdfPath);
        try (FileOutputStream os = new FileOutputStream(file)) {
            Document doc = new Document(wordPath);
            doc.save(os, SaveFormat.PDF);
        }
    }
}

2.5代码具体使用

这样就可以完美导出pdf了

2.6项目打包问题

本地导入jar包的时候,springboot是不会给打进去的,所以pom需要配置一下

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <!-- 将本地jar一起打包 -->
            <configuration>
                <includeSystemScope>true</includeSystemScope>
            </configuration>     
        </plugin>
    </plugins>
</build>

这样两种方法导出pdf都没啥问题了,祝大家工作顺利!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

清石小猿

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

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

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

打赏作者

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

抵扣说明:

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

余额充值