admin管理员组文章数量:1605317
文章目录
- 前言
- 一、快速无格式版本
- 二、保留格式转换
前言
每次遇到PDF文件时,总有把它转为Word文档的冲动,也时常会有这种转换的必要。通常的做法可能会是去开个PDF编辑器的会员啥的,某次突然觉得作为程序员为何不自己写段代码来实现PDF——>word的转换呢?当然自己写这个代码未免也是太过草率,遍寻网上众多方式,也算是有所收获,以下版本亦是借鉴一些大师的写法。
一、快速无格式版本
转换速度快,转换后的文档无PDF中的格式和图片,某些文档会出错(**暂未深究具体影响因素** )。代码示例
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;
import java.io.*;
public class PdfAndWordByNoImage {
public static void pdfToWord(String pdfInputFile) throws Exception {
System.out.println("转换开始......");
long startTime = System.currentTimeMillis();
PDDocument doc = PDDocument.load(new File(pdfInputFile));
int pagenumber = doc.getNumberOfPages();//获取总页数
System.out.println("获取总页数:"+pagenumber);
FileOutputStream fos = null;
try {
fos = new FileOutputStream(pdfInputFile.substring(0, pdfInputFile.indexOf(".")) + ".doc");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
Writer writer = null;
try {
writer = new OutputStreamWriter(fos, "UTF-8");//文件按字节读取,然后按照UTF-8的格式编码显示
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
PDFTextStripper stripper = new PDFTextStripper();//生成PDF文档内容剥离器
stripper.setSortByPosition(true);//排序
stripper.setStartPage(1);//设置转换的开始页
stripper.setEndPage(pagenumber);//设置转换的结束页
try {
stripper.writeText(doc, writer);
writer.close();
doc.close();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("执行完毕,耗时:"+(System.currentTimeMillis()-startTime)+"ms,......");
}
public static void main(String[] args) throws Exception {
String pdfInputFile = "F:\\workSpace\\数据不说谎:大数据的世界.pdf";
pdfToWord(pdfInputFile);
}
依赖包:
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.11</version>
</dependency>
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>jbig2-imageio</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox-tools</artifactId>
<version>2.0.11</version>
</dependency>
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>fontbox</artifactId>
<version>2.0.11</version>
</dependency>
二、保留格式转换
可基本保留原格式及图片输出,转换速度有点慢。
代码示例
import com.spire.pdf.FileFormat;
import com.spire.pdf.PdfDocument;
public class PdfToWordByHaveImage {
public static void pdfTodoc(String fileInputPath,String fileOutPutPath){
PdfDocument pdf = new PdfDocument();
System.out.println("开始加载PDF文件...");
long startTime = System.currentTimeMillis();
pdf.loadFromFile(fileInputPath);
long endTime1 = System.currentTimeMillis();
// 保存为Word格式
Long diff = endTime1-startTime;
System.out.println("文件加载完毕,耗时:"+String.format("%.4f",diff.doubleValue()/1000)+"s,开始执行转换...");
pdf.saveToFile(fileOutPutPath,FileFormat.DOCX);
long endTime2 = System.currentTimeMillis();
Long diff2 = endTime2-endTime1;
System.out.println("文件转换完毕,耗时:"+String.format("%.4f",diff2.doubleValue()/1000)+"s,...");
}
public static void main(String[] args) {
String fileInputPath = "F:\\workSpace\\移动金融.pdf";
String fileOutPutPath = "F:\\workSpace\\移动金融.doc";
pdfTodoc(fileInputPath,fileOutPutPath);
System.out.println("ok");
}
}
依赖jar包
spire.pdf-3.7.4.jar
温馨提示:以上内容仅供参考,如有问题,请多指正!
.
学习无极限,不负时光,未来可期!
版权声明:本文标题:java代码实现PDF转DOC文档 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dongtai/1728480982a1160100.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论