转换思路

  1. 使用第三方库Spire的免费版本,转换页数要求11页
  2. 输入一个pdf时候,小于11页直接转换,大于11页就先切分成子pdf
  3. 对每一个小的pdf进行转换,最后再合并。

总体上就是一个大的pdf拆分转换再合并的问题。

特点

  1. 图片不会转换
  2. 文字正常转换
  3. 数学公式正常转换
  4. 排版不会失真

完全的不失真也做不到,会有微小的差别,但是和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相关推荐

  1. java pdf转word,没页数限制,去除水印

    1.pom.xml的依赖引入 <dependency><groupId>org.javassist</groupId><artifactId>javas ...

  2. java pdf转word

    Java 是一种用于编写跨平台应用软件的面向对象的编程语言.如果你想将 PDF 转换为 Word 文档,你可以使用以下几种方法: 在线工具:可以使用在线 PDF 转换工具,例如 smallpdf.co ...

  3. java pdf 转word源码_Java 实现word模板转为pdf

    1. pom相关依赖 工具poi-tl (操作word文档模板) + jacob (将操作后的word模板转为pdf) com.deepoove poi-tl 1.9.1 com.jacob jaco ...

  4. java pdf转word 支持图片转换到word(最大程度的解决原PDF)

    依赖 <dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</ar ...

  5. java pdf 转word

    使用java api 简单实现pdf文档转word文档功能. import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox ...

  6. 编写java实用工具-针对未压缩的pdf转word,(java实现),压缩过的pdf勿进

    压缩过的pdf勿进! 压缩过的pdf勿进! 压缩过的pdf勿进! 重要的事情说三遍. 主要是提供两种解决办法 第一种:转成同级目录word 第二种:直接console打印 java的好处之一就是取之不 ...

  7. Java:使用Java调用打印机进行打印(JPG、PDF和Word三种文件格式)

    目录 一.Java的打印简介 二.Java打印实现 2.1 JPG图片文件格式打印实现 2.2 PDF文件格式打印实现 2.3 Word文件格式打印实现 2.3.1 Word文件采用jacob插件进行 ...

  8. java 打印jpg、pdf、word

    转自: https://blog.csdn.net/vatxiongxiaohui/article/details/83985896 目录 一.Java的打印简介 二.Java打印实现 2.1 JPG ...

  9. java freemarker转PDF和Word

    最近项目要求做一个freemarker转PDF和Word的功能,因为以前没用过,遇到了很多坑所以在这里记录一下,方便自己以后用到,不说了直接上代码: 1.先说PDF的 (1)先做一个模板(用HTML页 ...

  10. java实现pdf转为word

    Installing Spire.Pdf.jar 如果您创建了⼀个 Maven 项⽬,您可以使⽤以下配置轻松地在您的应⽤程序中导⼊ jar.对于⾮ Maven 项⽬,请从此下载 jar ⽂件并⼿动 将 ...

最新文章

  1. (转)用Java获得当前性能信息
  2. 【转】对称加密和分组加密中的四种模式(ECB、CBC、CFB、OFB)
  3. [ZJOI2010]贪吃的老鼠
  4. python数组分成两个和相等的子集_前端面试2
  5. Python入门到精通三天速成第二讲——类与继承
  6. 《卓有成效的管理者》培训分享——来自项目管理群的讨论
  7. Mat矩阵和数组的运算
  8. Docker 安装 linux版
  9. 领域词汇知识库的类型、可用资源与构建技术漫谈
  10. 皖能合肥电厂电能量计量管理系统设计方案
  11. 如何下载b站视频到本地
  12. oracle04052,案例学习Oracle错误:ORA-04052
  13. redis 在java中的实例使用场景
  14. 微信小程序轮播图、焦点图-swiper
  15. 小程序实战工作的知识点总结
  16. 一个程序员找工作的经历,感动!
  17. 如何读懂网页中的源代码?
  18. java 汽车加速_汽车加速没劲怎么办?四个简单的方法教你提升汽车动力!
  19. php与mysql 圣经_今天买了本传说中的PHP圣经-PHP和MySQL Web开发
  20. 记录,本人给音悦台的建议

热门文章

  1. 实现radio取消选中的功能
  2. Java中 支持多继承吗?
  3. Request请求转发与URL编码
  4. Android 手机重启解决方案
  5. ubuntu20.04启动时黑屏
  6. Lect1 图像分类
  7. 加权平均资本成本【读书笔记】
  8. 为什么企业选择局域网即时通讯软件?局域网即时通讯软件哪家好?
  9. hp1015驱动64位_在win10/win7 64位系统上安装 hp laserjet 1015对应的打印机驱动
  10. 基于Android的手机安全卫士的开发