JAVA实现DOC转PDF的示例代码

目录
  • 一、下载依赖
  • 二、代码实现
  • 三、转换结果
  • 四、后续研究
  • 五、总结

Word作为目前主流的文本编辑软件之一,功能十分强大,应用人群广,但是它也存在一些问题。像是Word文件在不同软件或操作平台之间传输的时候,时不时会出现各种格式的“变化”,也会有点“不稳定”,例如内容和格式经常容易篡动。

相较于Word,pdf格式文件显然优秀不少。虽然在内容编辑和修改方面表现不佳,但pdf格式文件在不同平台和软件上的稳定性表现着实出色。日常办公中,越来越多的会选择将编辑好的Word文件转换成Pdf格式文件,然后再分享给第三方浏览。

如果只是1个Word文件转换成Pdf文件,简直so easy;10个Word文件转换成pdf文件,虽烦躁,但能忍;如果是将1000个word文件转换成pdf文件呢?这会估计一股无名之火直冲天灵盖,立马想摔电脑的冲动都有了。

但对于程序猿来说,操作起来显然会容易很多,正好接到一个任务,索性就来和大家分享一下:将docx转成PDF文档,还要以代码的方式实现批量操作。先后参考了Apache poi java库以及docx4j组件,于是选择以docx4j组件来进行文档操作。

第一批次的文档共90篇:

以下开始实现docx4j的文档转PDF功能:

一、下载依赖

docx4j所有的依赖jar包使用marven去处理还是蛮简洁的:

<dependency>
	<groupId>org.docx4j</groupId>
	<artifactId>docx4j-JAXB-Internal</artifactId>
	<version>8.2.4</version>
</dependency>
<dependency>
	<groupId>org.docx4j</groupId>
	<artifactId>docx4j-export-fo</artifactId>
	<version>8.2.4</version>
</dependency>

就两个,短暂等待下载依赖之后发现,docx4j的依赖jar包还是挺多的:

手动开始敲代码吧。

二、代码实现

package com.convert.test;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;

import org.docx4j.Docx4J;
import org.docx4j.fonts.IdentityPlusMapper;
import org.docx4j.fonts.Mapper;
import org.docx4j.fonts.PhysicalFonts;
import org.docx4j.openpackaging.exceptions.Docx4JException;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;

public class ConvertTest {

	public static void main(String[] args) {

		word2pdf("D:\\tran\\2.doc", "D:\\tran\\2.pdf");

	}

	public static void word2pdf(String source, String target) {

		try {
            WordprocessingMLPackage pkg = Docx4J.load(new File(source));

            Mapper fontMapper = new IdentityPlusMapper();
            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"));
            pkg.setFontMapper(fontMapper);

            Docx4J.toPDF(pkg, new FileOutputStream(target));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (Docx4JException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }

	}
}

三、转换结果

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Using pdbs 420=7mm
Using pdbs 420=7mm

有一点报错,不过并不影响pdf的生成,打开生成的pdf,内容也是完整的。算是完成了吧,只要再写一个for循环,去遍历所有的文档就可以了。但是后来发现转换下来的pdf数量少了10个,所有的文档并没有全都转换成功。

四、后续研究

排查一番,发现这些文档中有10个doc文档,就该就是这10个没有成功了,单独拎出来转换一下,结果就报错了:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
org.docx4j.openpackaging.exceptions.Docx4JException: This file seems to be a binary doc/ppt/xls, not an encrypted OLE2 file containing a doc/pptx/xlsx
	at org.docx4j.openpackaging.packages.OpcPackage.load(OpcPackage.java:612)
	at org.docx4j.openpackaging.packages.OpcPackage.load(OpcPackage.java:414)
	at org.docx4j.openpackaging.packages.OpcPackage.load(OpcPackage.java:287)
	at org.docx4j.openpackaging.packages.OpcPackage.load(OpcPackage.java:265)
	at org.docx4j.openpackaging.packages.WordprocessingMLPackage.load(WordprocessingMLPackage.java:168)
	at org.docx4j.Docx4J.load(Docx4J.java:232)
	at com.convert.test.ConvertTest.word2pdf(ConvertTest.java:26)
	at com.convert.test.ConvertTest.main(ConvertTest.java:19)

This file seems to be a binary doc/ppt/xls, not an encrypted OLE2 file containing a doc/pptx/xlsx
“此文件似乎是一个二进制文件doc/ppt/xls,而不是包含doc/pptx/xlsx的加密OLE2文件”
貌似docx4j并不能完美的支持所有的word文档,至少doc文档并不能支持。我想到之前有小伙伴也遇到过这样问题,后来说是用了永中的office转换,索性今天自己也来尝试一下。

三下五除二,一顿操作,永中office官网上的office直接就能把我的doc文档转成html展示在浏览器上,心细如尘的我,还在其官网上发现有一款“PDF工具集”的产品:

在文章的右侧有“开发者”选项,可以直接点击它进入到转换的界面。进入之后,发现永中支持的格式还是不少的,在页面的上半部分就列出了当前支持的所有格式:

继续向下滚动鼠标滚轮,到达文档转换的位置:

可以直接点击上传一份doc文档,等待上传完毕,就可以直接将doc文档转换成PDF文档了,这样一来,不管多少个文件,都能一键实现word文件转换成pdf文件,小伙伴们再也不用担心了。

五、总结

其实,目前市面上已有的文档转换类的产品非常多,市场竞争十分激烈。但依旧不妨碍有好的产品涌现出来,受到一众用户的喜欢和追捧。

一款好的产品一定是契合用户的本性,能够对用户形成一种强大的吸引力,将其牢牢“粘住”。就像永中的这款产品,紧跟市场需求,更看到了用户的痛点,真正做到用一款简单、实用、好操作的产品,赢得市场,更赢得了用户!

到此这篇关于JAVA实现DOC转PDF的示例代码的文章就介绍到这了,更多相关JAVA实现DOC转PDF功能内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java利用openoffice将doc、docx转为pdf实例代码

    本文研究的主要是Java编程利用openoffice将doc.docx转为pdf的实现代码,具体如下. 1. 需要用的软件 OpenOffice , JodConverter 2.启动OpenOffice的服务 我到网上查如何利用OpenOffice进行转码的时候,都是需要先用cmd启动一个soffice服务,启动的命令是:soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;". 但是实际上,对于我的项目,进行转

  • JAVA实现DOC转PDF的示例代码

    目录 一.下载依赖 二.代码实现 三.转换结果 四.后续研究 五.总结 Word作为目前主流的文本编辑软件之一,功能十分强大,应用人群广,但是它也存在一些问题.像是Word文件在不同软件或操作平台之间传输的时候,时不时会出现各种格式的"变化",也会有点"不稳定",例如内容和格式经常容易篡动. 相较于Word,pdf格式文件显然优秀不少.虽然在内容编辑和修改方面表现不佳,但pdf格式文件在不同平台和软件上的稳定性表现着实出色.日常办公中,越来越多的会选择将编辑好的Wo

  • Java实现合并多个PDF的示例代码

    这里合并用到了一个itext的包.使用maven直接导入依赖即可. <dependency> <groupId>com.lowagie</groupId> <artifactId>itext</artifactId> <version>2.1.7</version> </dependency> 这个是我写的一个utl工具类,里面还写了一个main方法,如果你有两个pdf,可以直接用main方法跑一下. impo

  • Java实现无损Word转PDF的示例代码

    目录 前言 word转pdf实现思路 项目远程仓库 Maven项目pom文件依赖 核心代码实现 结果分析 前言 本来想写word转pdf和pdf转word的代码呢,没想到word转pdf就写了很多很多行代码才实现,为了方便大家消化理解,先写了word转pdf方法实现作为一篇文章. word转pdf实现思路 代码实现主要依赖两个第三方jar包,一个是pdfbox,一个是aspose-words.pdfbox包完全开源免费,aspose-words免费版生成有水印,且生成数量有限制.单纯用pdfbo

  • Java实现将彩色PDF转为灰度PDF的示例代码

    目录 配置程序环境 转彩色PDF为灰度 实现代码(Java) 补充 本文以Java代码为例介绍如何实现将彩色PDF文件转为灰度(黑白)的PDF文件,即:将PDF文档里面的彩色图片或者文字等通过调用PdfGrayConverter.toGrayPdf()方法转为文档页面为灰色调.无彩色效果的文档,可实现缩小文档大小的目的.下面是程序运行环境及代码示例. 配置程序环境 IntelliJ IDEA Spire.PDF for Java 5.3.1 PDF文档 关于如何引入jar文件: 1.通过Mave

  • .NET使用DinkToPdf将HTML转成PDF的示例代码

    0.介绍 C# .NET Core wrapper for wkhtmltopdf library that uses Webkit engine to convert HTML pages to PDF. 最近浏览文章的时候发现DinkToPdf框架,可以利用HTML转换成PDF,与我早期使用ITextSharp 框架构建PDF的方式不太一样.DinkToPdf直接将HTML转成PDF,HTML的构造直观且简单.这种方式可能可以成为不错的选择! 下面为大家简单介绍DinkToPdf的使用方式.

  • Java实现HTML转为Word的示例代码

    本文以Java代码为例介绍如何实现将HTML文件转为Word文档(.docx..doc).在实际开发场景中可参考此方法来转换.下面详细方法及步骤. 在编辑代码前,请先在程序中导入Spire.Doc.jar,导入方法如下: 方法1 将Free Spire.Doc for Java包下载到本地,解压,找到lib文件夹下的Spire.Doc.jar文件.然后在IDEA中打开“Project Structure”界面,然后执行如图步骤来手动导入本地路径下的jar文件: 方法2 通过Maven仓库下载导入

  • Java多线程编程实现socket通信示例代码

    流传于网络上有关Java多线程通信的编程实例有很多,这一篇还算比较不错,代码可用.下面看看具体内容. TCP是Tranfer Control Protocol的 简称,是一种面向连接的保证可靠传输的协议.通过TCP协议传输,得到的是一个顺序的无差错的数据流.发送方和接收方的成对的两个socket之间必须建 立连接,以便在TCP协议的基础上进行通信,当一个socket(通常都是server socket)等待建立连接时,另一个socket可以要求进行连接,一旦这两个socket连接起来,它们就可以

  • java导出json格式文件的示例代码

    本文介绍了java导出json格式文件的示例代码,分享给大家,具体如下: 生成json文件代码: import java.io.File; import java.io.FileWriter; import java.io.Writer; public class CreateFileUtil { /** * 生成.json格式文件 */ public static boolean createJsonFile(String jsonString, String filePath, String

  • Java异常退出条件的判断示例代码

    无论是功能性代码还是算法性代码,程序都是一系列流程的合集 既然是流程就分为:一般流程和异常流程: 一般流程保证了基本功能: 异常流程则是对程序稳定性的保证,不能因为一些非法输入,项目就挂了: 注意,布尔表达式的先后顺序,有时不可以交换 if (null == instance || instance.isEmpty()) 0. 常见异常退出条件 参数为空: 表示长度,表示索引的整型为负数,或者超出待索引数组或容器的范围: 1. String 的 startsWith 函数 首先来看 String

  • java poi导出图片到excel示例代码

    本文实例为大家分享了java使用poi导出图片到Excel的具体代码,供大家参考,具体内容如下 代码实现 Controller /** * 导出志愿者/人才数据 * @param talent_type * @return */ @RequestMapping("/exportData") public void exportData(Integer talent_type, HttpServletResponse response) { String fileId = UUID.ra

随机推荐