package com.ljl; /*** @author  * @Package_name PACKAGE_NAME* @Date 2019/4/1 0001 上午 8:30* @Description*/import org.apache.pdfbox.cos.COSName;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageTree;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
import org.apache.pdfbox.text.PDFTextStripper;
//import org.apache.pdfbox.util.PDFTextStripper;import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.awt.image.RenderedImage;
import java.io.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;public class Pdf2word
{public static void main(String[] args){try{String pdfFile = "E:/Hadoop2.pdf";PDDocument doc = PDDocument.load(new File(pdfFile));int pagenumber = doc.getNumberOfPages();pdfFile = pdfFile.substring(0, pdfFile.lastIndexOf("."));String fileName = pdfFile + "_new.doc";File file = new File(fileName);if (!file.exists()){file.createNewFile();}FileOutputStream fos = new FileOutputStream(fileName);Writer writer = new OutputStreamWriter(fos, "UTF-8");PDFTextStripper stripper = new PDFTextStripper();stripper.setSortByPosition(true);// 排序stripper.setStartPage(1);// 设置转换的开始页stripper.setEndPage(pagenumber);// 设置转换的结束页stripper.writeText(doc, writer);writer.close();doc.close();System.out.println("pdf转换word成功!");}catch (IOException e){e.printStackTrace();}try {String pdfFile = "E:/Hadoop2.pdf";PDDocument doc = PDDocument.load(new File(pdfFile));List<PDImageXObject> imagelist=  getImageListFromPDF(doc,0);System.out.println("图片个数 : "+imagelist.size());for (int i=0;i<imagelist.size();i++){writeImageInputStream(imagelist.get(i));//写入文件系统}}catch (Exception e){e.printStackTrace();}}/*** 从pdf文档中读取所有的图片信息* * @return* @throws Exception */public static List<PDImageXObject> getImageListFromPDF(PDDocument document, Integer startPage) throws Exception {List<PDImageXObject> imageList = new ArrayList<PDImageXObject>();if(null != document){PDPageTree pages = document.getPages();startPage = startPage == null ? 0 : startPage;int len = pages.getCount();System.out.println("页数 "+len);if(startPage < len){for(int i=startPage;i<len;i++){PDPage page = pages.get(i);if(page!=null) {if( page.getResources()!=null) {Iterable<COSName> objectNames = page.getResources().getXObjectNames();for (COSName imageObjectName : objectNames) {if (page.getResources().isImageXObject(imageObjectName)) {imageList.add((PDImageXObject) page.getResources().getXObject(imageObjectName));}}}else {System.out.println("当前页面没有图片 page.getResources() is null ");}}else {System.out.println("page is null ");}}}}return imageList;}/*** 读取图片文件流信息* @param image* @return* @throws Exception */public static InputStream getImageInputStream(PDImageXObject image) throws Exception{if(null!=image && null!= image.getImage()){BufferedImage bufferImage = image.getImage();ByteArrayOutputStream os = new ByteArrayOutputStream();ImageIO.write(bufferImage, image.getSuffix(), os);return new ByteArrayInputStream(os.toByteArray());}return null;}/*** 写入文件系统* @param image* @throws Exception*/public static void writeImageInputStream(PDImageXObject image) throws Exception{if(null!=image && null!= image.getImage()) {//粗略写入到文件系统Date date=new Date();String name = date.getTime()+"_image" ;File imgFile = new File("E:/images/" + name + "." + image.getSuffix());//写入的地址FileOutputStream fout = new FileOutputStream(imgFile);ByteArrayOutputStream os = new ByteArrayOutputStream();BufferedImage imageb = image.getImage();ImageIO.write(imageb, image.getSuffix(), os);InputStream is = new ByteArrayInputStream(os.toByteArray());int byteCount = 0;byte[] bytes = new byte[1024];while ((byteCount = is.read(bytes)) > 0) {fout.write(bytes, 0, byteCount);}fout.close();is.close();}}}

上面是使用pdfbox-2.0.11.jar进行pdf转word的代码,和对pdf中图片的读取写入到文件系统,附带pom配置

<dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency><dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-jdk16</artifactId><version>1.46</version></dependency><dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.2</version></dependency><dependency><groupId>com.ibm.icu</groupId><artifactId>icu4j</artifactId><version>4.8</version></dependency><dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.11</version></dependency><dependency><groupId>org.apache.pdfbox</groupId><artifactId>fontbox</artifactId><version>2.0.11</version></dependency></dependencies>

jar包下载地址https://download.csdn.net/download/javabuilt/10575651

https://download.csdn.net/download/warren_one/10131767

使用java进行pdf转word实战相关推荐

  1. Java为 pdf、word和excel添加水印

    1. 引入依赖 <!--easyexcel--><dependency><groupId>com.alibaba</groupId><artifa ...

  2. java实现pdf转为word

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

  3. java实现PDF转Word(无水印无页数限制)完全开放

    jar包破解 1.pom文件 分别复制进pom文件,记得配置maven的中央仓库在settings.xml中配置单独的仓库地址<repositories><repository> ...

  4. Java:pdf转word

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

  5. java 实现pdf 转word去除水印和去除页数限制

    背景 每次下载的pdf文档想转成word文档,都从网上找各种找网址,网上的网址要么存在必须要充值,要么转化效果不好等等问题.作为一个技术人员,所以想能否实现pdf转化为word文档 代码实现 1.1 ...

  6. java实现PDF 转WORD

    CSDN话题挑战赛第2期 参赛话题:Java技术分享 引言 由于市场上目前的各种格式文件的转换基本上都需要会员,怎么办呢? 不走寻常路,我们是程序员 我们当然要不走寻常路了,我们要动用一些特殊手段,展 ...

  7. java实现pdf转word,解决个别排版错乱问题

    项目中要实现客户上传完pdf,上传成功后直接就转成word格式的,之前网上一些免费的转出来的word大致还行,但是有些排版就错乱了,如下图: 下面这个是用java改造后的,效果如下,排版整齐,和pdf ...

  8. Java 将PDF转为Word

    众所周知,PDF文档除了具有较强稳定性和兼容性外, 还具有较强的安全性,在工作中可以有效避免别人无意中对文档内容进行修改.但与此同时,也妨碍了对文档的正常修改.这时我们可以将PDF转为Word文档进行 ...

  9. java实现 pdf转word

    这里使用Apache PDFBox是Java开源PDF文档第三方库工具集,主要特征提取提取pdf提取文本.分隔合并.填写表单.保存为图片.PDF数字签名及创建PDF文件. 添加maven依赖 < ...

最新文章

  1. python增删改查人名管理_python3字典列表的增删改查(名片管理系统函数版)
  2. 为什么要开发抽象编程语言(APL)?
  3. python函数不定参数求和
  4. 在linux下搭建jira+svn[原创]
  5. 机器学习中的不平衡分类方法(part5)--决策树与随机森林
  6. 「BJOI2019」奥术神杖(AC自动机+DP)
  7. mysql 定义年龄属性_sql中定义年龄用什么数据类型,长度为多少?
  8. php实现身份证号码获取归属地地址的实列教程,含完整全国地区归属数据!
  9. at java.net.url init,java.net 基本测试
  10. It’s Android Time
  11. js 导出Excel
  12. LTE网络架构的简单概述
  13. Synctoy2.1通过计划任务备份文件到网络驱动器注销不生效问题
  14. 使用C/C++的#include命令(文件包含命令)时,文件名用尖括号或双撇号(双引号)括起来的区别
  15. matlab中ln4怎么表示,matlab里ln怎么表示
  16. objectArx --- ADS篇
  17. 高校排课系统/排课管理系统的设计与实现
  18. CNopendata空气质量站点监测数据
  19. 计算机应用基础上机考试,《计算机应用基础》上机考试试题.文件.doc
  20. c++新鸟的升级路(一)

热门文章

  1. C语言编程 - 清空键盘缓冲区
  2. 营业收费管理系统,整合多类抄表系统
  3. 190㎡现代轻奢私宅,满屋洋溢着高级与优雅~
  4. 根据HSV颜色空间识别魔方是否还原
  5. 递归专题---[2]开根号
  6. oracle语句查询时间范围
  7. Android 读取本地txt文件中的内容
  8. Linux关闭重启防火墙
  9. seo日常工作表_SEO日常工作内容主要有哪些
  10. Linux中Docker入门知识