我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java将Word转换成PDF

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java将Word转换成PDF

最近项目需要做在线预览文档功能,要求对word文档后台转为pdf,遇到了很多问题,因此记录一下。

网上有很多将Word转换成PDF的方式,这里我试了几种比较简单的方式:POI、aspose、spire和documents4j。

1、POI

POI是Apache下的一个Java类库,可以帮助我们实现Java与各种Office格式文件的互相转换。下面是实现步骤:

引入依赖

<dependency>    <groupId>org.apache.poigroupId>    <artifactId>poiartifactId>    <version>4.1.2version>dependency> <dependency>    <groupId>org.apache.poigroupId>    <artifactId>poi-ooxmlartifactId>    <version>4.1.2version>dependency> <dependency>    <groupId>com.itextpdfgroupId>    <artifactId>itextpdfartifactId>    <version>5.5.13.2version>dependency>

工具类代码:

import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import org.apache.poi.xwpf.usermodel.XWPFDocument;import org.apache.poi.xwpf.usermodel.XWPFParagraph;import org.apache.poi.xwpf.usermodel.XWPFRun;import org.apache.poi.xwpf.usermodel.XWPFTable;import org.apache.poi.xwpf.usermodel.XWPFTableCell;import org.apache.poi.xwpf.usermodel.XWPFTableRow;import org.apache.poi.xwpf.usermodel.XWPFDocument;import org.apache.poi.xwpf.usermodel.XWPFParagraph;import org.apache.poi.xwpf.usermodel.XWPFRun;import com.lowagie.text.Document;import com.lowagie.text.DocumentException;import com.lowagie.text.pdf.PdfWriter;public class WordToPdfConverter {    public static void convertToPdf(String inputFilePath, String outputFilePath) {        try {            // 加载Word文档            FileInputStream fis = new FileInputStream(inputFilePath);            XWPFDocument document = new XWPFDocument(fis);             // 创建PDF文档            Document pdfDoc = new Document();            PdfWriter.getInstance(pdfDoc, new FileOutputStream(outputFilePath));            pdfDoc.open();             // 将Word文档内容写入PDF文档            for (XWPFParagraph paragraph : document.getParagraphs()) {                pdfDoc.add(paragraph.createRun().getText());            }             for (XWPFTable table : document.getTables()) {                for (XWPFTableRow row : table.getRows()) {                    for (XWPFTableCell cell : row.getTableCells()) {                        pdfDoc.add(cell.getText());                    }                }            }             pdfDoc.close();            document.close();             System.out.println("Word文档已成功转换为PDF!");        } catch (IOException | DocumentException e) {            e.printStackTrace();        }    }     public static void main(String[] args) {        String inputFilePath = "input.docx";        String outputFilePath = "output.pdf";        convertToPdf(inputFilePath, outputFilePath);     }}

POI库在转换过程中无法完全保留Word文档的所有样式。POI库的主要目标是处理Word文档的内容,而不是完全复制其样式。因此,转换后的PDF文件可能会有一些样式差异。如果是比较复杂的Word不建议使用此方式

2、Aspose.Words

Aspose.Words for Java是一个原生库,为开发人员提供了丰富的功能来创建、编辑和转换 Word、PDF、Web 文档,而无需在系统上安装 Microsoft Word 环境。该 Java 库是依赖于文档对象模型 (DOM) 的类和方法的集合,使开发人员能够在元素级别直接访问文档的内部工作方式。使用我们的产品,Java 开发人员可以高效地创建复杂的文档并修改其格式、布局和内容。
对于寻求综合工具来简化文档编辑和文档生成任务的开发人员来说,这个原生 Java API 是一个可靠的文档处理解决方案;大规模自动化文档密集型业务流程;减少人工干预、错误和延迟。

官网:https://products.aspose.com/words/java/

引入依赖(建议将jar包下载下来并上传私服里去)

https://releases.aspose.com/java/repo/com/aspose/aspose-words/18.6/aspose-words-18.6-jdk16.jar

<dependency>    <groupId>com.asposegroupId>    <artifactId>aspose-wordsartifactId>    <version>18.6version>    <classifier>jdk16classifier>dependency>

需要在项目里加入一个license.xml,不然生成的pdf会有水印

license.xml如下:

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

代码如下:

import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import com.aspose.words.Document;import com.aspose.words.License;import com.aspose.words.FontSettings;import com.aspose.words.SaveFormat;public static boolean asposeWordToPdf() {        if (!getLicense()) { // 验证License 若不验证则转化出的pdf文档会有水印产生            return false;        }        String inPath = "D:\\GoogleDownload\\ExportWord_230803_032555.docx";        String outputFilePath = "C:\\Users\\WPC\\Desktop\\test.pdf";        FileOutputStream os = null;        try {            long old = System.currentTimeMillis();            File file = new File(outputFilePath); // 新建一个空白pdf文档            os = new FileOutputStream(file);            com.aspose.words.Document doc = new Document(inPath); // Address是将要被转化的word文档            //Linux 下使用字体库//            FontSettings fontSettings = new FontSettings();//            fontSettings.setFontsFolder("/usr/share/fonts/windows"+File.separator,true);//            doc.setFontSettings(fontSettings);            doc.save(os, SaveFormat.PDF);// 全面支持DOC, DOCX, OOXML, RTF HTML, OpenDocument, PDF,            // EPUB, XPS, SWF 相互转换            long now = System.currentTimeMillis();            System.out.println("pdf转换成功,共耗时:" + ((now - old) / 1000.0) + "秒"); // 转化用时        } catch (Exception e) {            e.printStackTrace();            return false;        }finally {            if (os != null) {                try {                    os.flush();                    os.close();                } catch (IOException e) {                    e.printStackTrace();                }            }        }        return true;    }public static boolean getLicense() {        boolean result = false;        try {            InputStream is = Test.class.getClassLoader().getResourceAsStream("\\license.xml"); // license.xml应放在资源路径下            License aposeLic = new License();            aposeLic.setLicense(is);            result = true;        } catch (Exception e) {            e.printStackTrace();        }        return result;}

当文档中含有中文字符时,该段代码的执行需要调用操作系统的本地字体库支持,否则所有中文字符都将乱码。

该段代码如果想要在Linux服务器上完美运行,需要给Linux服务器安装中文字体库。可以看最后Java使用Spire.Pdf或Aspose-Words实现Word转换Pdf在Linux服务器上的中文乱码问题

3、spire.doc.free

Spire.Doc for Java是一个专业的 Word API,它使 Java 应用程序能够创建、转换、操作和打印 Word文档,而无需依赖 Microsoft Word。通过使用这个多功能库,开发人员可以轻松处理大量任务,例如插入图像、超链接、 数字签名、书签和水印、设置页眉和页脚、创建表格、设置背景图像以及添加脚注和尾注。此外,Spire.Doc for Java 支持从Word 到 PDF、XPS、Image、EPUB、HTML、TXT、ODT、RTF、WordML、WordXML 等文件格式转换。

注意:免费版Free Spire.Doc for Java 仅限于 500 个段落和 25 个表格。在读取或写入文件期间会强制执行此限制。将Word文档转换为PDF和XPS文件时,您只能获取PDF文件的前3页。

官网:https://www.e-iceblue.com/Introduce/doc-for-java.html

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lMa7mE7l-1691567356239)(img\SpireDocForJava.png)]

下载 Spire.Doc for Java 开始免费试用:https://www.e-iceblue.com/Download/doc-for-java.html

引入依赖:

<repositories>    <repository>        <id>com.e-iceblueid>        <url>https://repo.e-iceblue.cn/repository/maven-public/url>    repository>repositories><dependency>    <groupId>e-icebluegroupId>    <artifactId>spire.doc.freeartifactId>    <version>5.2.0version>dependency>

代码如下:

import com.spire.doc.FileFormat;private static void spireWordToPdf() throws IOException {    //实例化Document类的对象    com.spire.doc.Document doc = new com.spire.doc.Document();    // 下载Word文件//        URL url = new URL("http://xxxx/ExportWord_230724_172956.docx");//        InputStream inputStream = url.openStream();//        doc.loadFromStream(inputStream,FileFormat.Docx);    //加载Word    doc.loadFromFile("D:\\GoogleDownload\\ExportWord_230803_032555.docx");    //保存为PDF格式    doc.saveToFile("C:\\Users\\WPC\\Desktop\\test.pdf", FileFormat.PDF);}

该段代码如果想要在Linux服务器上完美运行,需要给Linux服务器安装中文字体库。可以看最后Java使用Spire.Pdf或Aspose-Words实现Word转换Pdf在Linux服务器上的中文乱码问题

4、documents4j

官网:https://documents4j.com/

GitHub:https://github.com/documents4j/documents4j

documents4j 是一个跨平台的文档转换库,并且可以在 Linux 上进行 Word 转 PDF 的操作。

它利用 Microsft Office 的 APIs 来进行文档转换,因此需要在Linux上安装 OpenOffice/LibreOffice 编辑器。

以下是在Linux环境下执行 Word 转 PDF 的基本步骤:

Ubuntu:使用以下命令安装

sudo apt-get install libreoffice

CentOS:使用以下命令安装

sudo yum install libreoffice

引入依赖:

<dependency>    <groupId>com.documents4jgroupId>    <artifactId>documents4j-localartifactId>    <version>1.0.3version>dependency><dependency>    <groupId>com.documents4jgroupId>    <artifactId>documents4j-transformer-msoffice-wordartifactId>    <version>1.0.3version>dependency>

代码如下:

import com.documents4j.api.DocumentType;import com.documents4j.api.IConverter;import com.documents4j.job.LocalConverter;    public static void word2pdf() throws IOException {    // 参考:https:blog.csdn.net/ka3p06/article/details/125476270 通过documents4j实现    InputStream docxInputStream = null;    OutputStream outputStream = null;    try {        // 原word地址//            docxInputStream = new FileInputStream("E:\\\\test2\\\\word模板.docx");        URL url = new URL("http://xxxx/ExportWord_230724_172956.docx");        docxInputStream = url.openStream();        // 转换后pdf生成地址        outputStream = new FileOutputStream("C:\\Users\\WPC\\Desktop\\test.pdf");        IConverter converter = LocalConverter.builder().build();        converter.convert(docxInputStream)                .as(DocumentType.DOCX)                .to(outputStream)                .as(DocumentType.PDF).execute();        // 关闭        converter.shutDown();        // 关闭        outputStream.close();        // 关闭        docxInputStream.close();    } catch (Exception e) {        System.out.println("[documents4J] word转pdf失败:" + e.toString());    } finally {        if (outputStream != null) {            outputStream.close();        }        if (docxInputStream != null) {            docxInputStream.close();        }    }}

Java使用Spire.Pdf或Aspose-Words实现Word转换Pdf在Linux服务器上的中文乱码问题

原因分析:

当Word文档中含有中文字符时,不管是使用Spire.Pdf或Aspose-Words实现Word转换Pdf,代码的执行都需要调用操作系统的本地字体库支持,否则所有中文字符都将乱码。

在Windows环境下没有问题但是在Linux环境下有问题,说明不是代码或者输入输出流编码的问题,根本原因是两个平台环境的问题。出现乱码说明Linux环境中没有相应的字体以供使用

如果你的代码想要在Linux服务器上完美运行,就需要给Linux服务器安装中文字体库

解决方案:

将转换无问题的Windows主机中的字体拷贝到Linux平台下进行安装,重启服务器后转换就不会出现乱码

Windows字体复制到Linux环境并安装

Windows字体库的位置是C:\Windows\fonts,这里面包含所有Windows下可用的字体

Linux字体库的位置是 /usr/share/Fonts

在该目录下新建一个目录,比如目录名叫 windows,然后将 Windows 字体库中你要的字体文件复制到新建的目录下(只需要复制*.ttc,和*.ttf格式的文件)

更改这些字体库的权限

sudo chmod 755 /usr/share/fonts/windows/*

然后进入Linux字体库

cd /usr/share/fonts/windows/

接着根据当前目录下的字体建立scale文件。PS:如果提示找不到这个命令,使用:yum install mkfontscale

sudo mkfontscale

接着建立dir文件。PS:如果提示找不到这个命令,使用:yum install fontconfig

sudo mkfontdir

然后运行

sudo fc-cache

最后需要重启一次服务器

如果是docker环境下

重复上面操作,不过进入的服务器是宿主机

**docker run -v /usr/share/fonts:/usr/share/fonts *****
docker启动时共享宿主机的字体库重启docker项目即可解决乱码问题

来源地址:https://blog.csdn.net/weixin_44000133/article/details/132190107

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java将Word转换成PDF

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

python怎么将pdf转换成word

您可以使用Python中的pytesseract库将PDF文件转换为文本,然后使用Python-docx库将文本转换为Word文档。首先,您需要安装以下库:- pytesseract:用于将PDF文件转换为文本- pdf2image:用于将
2023-09-22

Java 将Word文档转换为PDF

前言本文将介绍如何使用免费Java Word组件Free Spire.Doc for Java在Java应用程序中将Word文档转换到PDF格式。Free Spire.Doc for Java在转换过程中能够识别中文字符并支持丰富的word
2023-06-02

使用python怎么将Word转换成pdf

这篇文章将为大家详细讲解有关使用python怎么将Word转换成pdf,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。python的五大特点是什么python的五大特点:1.简单易学,开发程序
2023-06-14

pdf怎么转换成word

本篇内容主要讲解“pdf怎么转换成word”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“pdf怎么转换成word”吧!1、首先下载安装一个wps。2、安装完成后,打开它,点击左上角“打开”3、然
2023-07-02

Java怎么将PDF转为Word

这篇文章主要介绍“Java怎么将PDF转为Word”,在日常操作中,相信很多人在Java怎么将PDF转为Word问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java怎么将PDF转为Word”的疑惑有所帮助!
2023-06-02

怎么将文件PDF格式转换成Word格式

这篇文章给大家分享的是有关怎么将文件PDF格式转换成Word格式的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。(1)打开手机,在手机上的应用市场上搜索“PDF转换大师”,找到可以转换文档格式的工具,将其下载到手机
2023-06-05

如何将HTML转换成PDF

HTML转换成PDF:工具、用途、优缺点HTML(Hypertext Markup Language)是一种标记语言,用于创建和排版网页等电子文档。而PDF(Portable Document Format)则是由Adobe公司开发的一种电子文档格式,具有跨平台、可编辑、保护性等优点。那么,如何将HTML转换成PDF呢?本文将从工具、用途、优缺点三个方面进行介绍。一、工具有许多
2023-05-14

怎么将Excel转换成PDF

这篇文章主要介绍怎么将Excel转换成PDF,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、打开在线PDF转换平台——pdf365.cn 二、点击“Excel转PDF”图标,进入Excel文档上传页面,将需要转换的
2023-06-04

win8自带的Skydrive转换PDF文档将pdf转为word文档

知识点分析: 优点:不需要安装任何第三方转换软件,直接将pdf转为word文档,且十分稳定,不会像第三方工具转换后打开会产生一些不能识别的乱码 操作步骤: 1.打开 https://skydrive.live.com/ 2.上传你要转换成W
2022-06-04

word文档怎么转换成pdf格式

本篇内容主要讲解“word文档怎么转换成pdf格式”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“word文档怎么转换成pdf格式”吧!word文档转换成pdf格式方法:1、打开word,打开需要
2023-07-01

php如何将html转换成pdf

php将html转换成pdf的方法:【function genBillPdfContent($htmlContent) {$mpdf = new \Mpdf\Mpdf();$mpdf->SetDisplayMode('fullpa...】。
2021-02-24

php如何将word文档转成PDF文件

本文小编为大家详细介绍“php如何将word文档转成PDF文件”,内容详细,步骤清晰,细节处理妥当,希望这篇“php如何将word文档转成PDF文件”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。第一步:安装和配置
2023-07-05

如何在iPhone上将Word文档转换为PDF

无论是银行对账单还是求职简历,在某些场景下,您都需要在线提交 PDF 格式的文件。大多数文档仍然以Word格式在iPhone上存储的大部分时间。但是iPhone上没有专用的默认应用程序可以直接将Word文档转换为pdf格式,安装任何不安全的
2023-07-12

使用Python将PDF转换成图片

必须在Linux环境下,使用到的环境和工具:CentOS7+Python3.6+pdf2image+poppler        首先要在系统中安装poppler,这是一个用于呈现可移植文档格式(PDF)文档的免费软件实用程序库一、安装po
2023-01-31

java将word转换为html(代码)

代码:public static void main(String[] args) throws Exception { String filePath = "C:/Users/Administrator/Desktop/92个诊疗方案及临床路径/";
java将word转换为html(代码)
2019-04-13

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录