java代码实现PDF转DOC文档


前言

每次遇到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


温馨提示:以上内容仅供参考,如有问题,请多指正!

.
学习无极限,不负时光,未来可期!

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值