Java:pdf转word
转换思路
- 使用第三方库Spire的免费版本,转换页数要求11页
- 输入一个pdf时候,小于11页直接转换,大于11页就先切分成子pdf
- 对每一个小的pdf进行转换,最后再合并。
总体上就是一个大的pdf拆分转换再合并的问题。
特点
- 图片不会转换
- 文字正常转换
- 数学公式正常转换
- 排版不会失真
完全的不失真也做不到,会有微小的差别,但是和pdf基本上一样
java代码
pom.xml
<repositories><repository><id>com.e-iceblue</id><url>http://repo.e-iceblue.cn/repository/maven-public/</url></repository> </repositories><dependencies><dependency><groupId>e-iceblue</groupId><artifactId>spire.doc.free</artifactId><version>2.7.3</version></dependency><dependency><groupId>e-iceblue</groupId><artifactId>spire.pdf.free</artifactId><version>2.6.3</version></dependency> </dependencies>
文件工具类
package cn.com.javakf.utils;import com.spire.doc.Document; import com.spire.doc.FileFormat;import java.io.File;public class FileUtil {/*** 判断是否是pdf文件** @param path* @return*/public static boolean isPDFFile(String path) {File file = new File(path);String filename = file.getName();if (filename.endsWith(".pdf")) {return true;}return false;}/*** 创建子pdf目录,子doc目录** @param pdfPath* @param docPath* @return*/public static boolean createSubdirectory(String pdfPath, String docPath) {File pdfFile = new File(pdfPath);File docFile = new File(docPath);if (!pdfFile.exists()) {pdfFile.mkdirs();}if (!docFile.exists()) {docFile.mkdirs();}return true;}/*** 合并word文档** @param docPath 要合并文档路径* @param desPath 合并后文件路径* @return*/public static boolean mergeWordDocument(String docPath, String desPath) {File[] files = getFiles(docPath);Document document = new Document(docPath + "test0.docx");for (int i = 1; i < files.length; i++) {document.insertTextFromFile(docPath + "test" + i + ".docx", FileFormat.Docx_2013);}//保存合并的doc文档document.saveToFile(desPath);return true;}/*** 取目录下的所有文件** @param path* @return*/public static File[] getFiles(String path) {File file = new File(path);File[] files = file.listFiles();if (files == null) {return null;}return files;}/*** 删除目录(包含文件)** @param path*/public void deleteDirectory(String path) {File file = new File(path);if (file.exists()) {deleteFile(file);}}/*** 删除文件** @param file*/public void deleteFile(File file) {if (file.isDirectory()) {File[] files = file.listFiles();for (int i = 0; i < files.length; i++) {deleteFile(files[i]);}}file.delete();}}
pdf转word
package cn.com.javakf.utils;import com.spire.pdf.FileFormat; import com.spire.pdf.PdfDocument;import java.io.File;public class SpirePdfUtil {/*** 如果是大文件,需要进行切分,子pdf路径*/String pdfPath = "./pdf/";/*** 如果是大文件,需要对子pdf文件进行转化,子doc路径*/String docPath = "./doc/";/*** pdf转word** @param srcPath* @return*/public String pdfToWord(String srcPath) {boolean result = false;try {//最终生成的doc所在目录,默认和源文件同一文件夹String desPath = srcPath.substring(0, srcPath.length() - 4) + ".docx";// 1、判断输入的是否是pdf文件boolean pdfflag = FileUtil.isPDFFile(srcPath);if (pdfflag) {// 2、加载pdfPdfDocument pdf = new PdfDocument();pdf.loadFromFile(srcPath);// 3、如果pdf的页数小于11,那么直接进行转化if (pdf.getPages().getCount() <= 10) {pdf.saveToFile(desPath, FileFormat.DOCX);} else {// 3、否则输入的页数比较多,就开始进行切分再转化// 创建临时子pdf目录,子doc目录boolean flag = FileUtil.createSubdirectory(pdfPath, docPath);if (flag) {// 第一步:将其进行切分,每页一张pdfpdf.split(pdfPath + "test{0}.pdf", 0);// 第二步:将切分的pdf,一个一个进行转换File[] files = FileUtil.getFiles(pdfPath);for (int i = 0; i < files.length; i++) {PdfDocument sonpdf = new PdfDocument();sonpdf.loadFromFile(files[i].getAbsolutePath());sonpdf.saveToFile(docPath + files[i].getName().substring(0,files[i].getName().length() - 4) +".docx", FileFormat.DOCX);}//第三步:对转化的doc文档进行合并,合并成一个大的wordresult = FileUtil.mergeWordDocument(docPath, desPath);} else {return "创建文件夹失败!!!";}}} else {return "不是pdf文件!!!";}} catch (Exception e) {e.printStackTrace();} finally {//合并word文档成功后,删除临时创建的子pdf目录,子doc目录if (result == true) {new FileUtil().deleteDirectory(pdfPath);new FileUtil().deleteDirectory(docPath);}}return "OK";}}
测试
package cn.com.javakf.test;import cn.com.javakf.utils.SpirePdfUtil;public class PdfToWordTest {public static void main(String[] args) {String result = new SpirePdfUtil().pdfToWord("D:\\test.pdf");System.out.println(result);}}
Evaluation Warning : The document was created with Spire.PDF for Java.
解决办法:因为这段文字只出现在第一页,所以在文档创建时先添加一个空白页,最后再把空白页去掉。
参考:
https://github.com/fengdongdongwsn/PdfTool
https://www.e-iceblue.cn/spirepdfjava/spire-pdf-for-java-program-guide-content.html
Java:pdf转word相关推荐
- java pdf转word,没页数限制,去除水印
1.pom.xml的依赖引入 <dependency><groupId>org.javassist</groupId><artifactId>javas ...
- java pdf转word
Java 是一种用于编写跨平台应用软件的面向对象的编程语言.如果你想将 PDF 转换为 Word 文档,你可以使用以下几种方法: 在线工具:可以使用在线 PDF 转换工具,例如 smallpdf.co ...
- java pdf 转word源码_Java 实现word模板转为pdf
1. pom相关依赖 工具poi-tl (操作word文档模板) + jacob (将操作后的word模板转为pdf) com.deepoove poi-tl 1.9.1 com.jacob jaco ...
- java pdf转word 支持图片转换到word(最大程度的解决原PDF)
依赖 <dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</ar ...
- java pdf 转word
使用java api 简单实现pdf文档转word文档功能. import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox ...
- 编写java实用工具-针对未压缩的pdf转word,(java实现),压缩过的pdf勿进
压缩过的pdf勿进! 压缩过的pdf勿进! 压缩过的pdf勿进! 重要的事情说三遍. 主要是提供两种解决办法 第一种:转成同级目录word 第二种:直接console打印 java的好处之一就是取之不 ...
- Java:使用Java调用打印机进行打印(JPG、PDF和Word三种文件格式)
目录 一.Java的打印简介 二.Java打印实现 2.1 JPG图片文件格式打印实现 2.2 PDF文件格式打印实现 2.3 Word文件格式打印实现 2.3.1 Word文件采用jacob插件进行 ...
- java 打印jpg、pdf、word
转自: https://blog.csdn.net/vatxiongxiaohui/article/details/83985896 目录 一.Java的打印简介 二.Java打印实现 2.1 JPG ...
- java freemarker转PDF和Word
最近项目要求做一个freemarker转PDF和Word的功能,因为以前没用过,遇到了很多坑所以在这里记录一下,方便自己以后用到,不说了直接上代码: 1.先说PDF的 (1)先做一个模板(用HTML页 ...
- java实现pdf转为word
Installing Spire.Pdf.jar 如果您创建了⼀个 Maven 项⽬,您可以使⽤以下配置轻松地在您的应⽤程序中导⼊ jar.对于⾮ Maven 项⽬,请从此下载 jar ⽂件并⼿动 将 ...
最新文章
- (转)用Java获得当前性能信息
- 【转】对称加密和分组加密中的四种模式(ECB、CBC、CFB、OFB)
- [ZJOI2010]贪吃的老鼠
- python数组分成两个和相等的子集_前端面试2
- Python入门到精通三天速成第二讲——类与继承
- 《卓有成效的管理者》培训分享——来自项目管理群的讨论
- Mat矩阵和数组的运算
- Docker 安装 linux版
- 领域词汇知识库的类型、可用资源与构建技术漫谈
- 皖能合肥电厂电能量计量管理系统设计方案
- 如何下载b站视频到本地
- oracle04052,案例学习Oracle错误:ORA-04052
- redis 在java中的实例使用场景
- 微信小程序轮播图、焦点图-swiper
- 小程序实战工作的知识点总结
- 一个程序员找工作的经历,感动!
- 如何读懂网页中的源代码?
- java 汽车加速_汽车加速没劲怎么办?四个简单的方法教你提升汽车动力!
- php与mysql 圣经_今天买了本传说中的PHP圣经-PHP和MySQL Web开发
- 记录,本人给音悦台的建议