提取pdf文件内容,将pdf文件转为txt格式

我现在有很多pdf文件,现在假设这些pdf文件都是文字类型的,非扫描版图片格式的。虽然可以使用软件将pdf转为txt文本文件,但是由于pdf文件数量太多,大概有好几百篇,所以我也没有尝试使用操作软件的手工方式。这两天,尝试过使用itext,引用itextpdf-5.5.10.jar,代码来自于http://stackoverflow.com/ques... 的ExtractPageContent类,直接使用,正确运行,没有报错。但是转换之后的文本内容明显减少,好像也只能识别出英文数据,达不到要求。使用python的pdfminer3k进行转换,乱码。使用ghostscript转换,乱码。后来用了别人的源码(基于poppler),效果还行,但是由于pdf是两列的格式,它进行转换时候,是按照行来转换的,转换之后的格式不好,如下图所示。
图片描述

转换之后的效果如图
图片描述

可以看到解析之后的文本明显错位了。
原来的pdf文件,百度网盘地址https://pan.baidu.com/s/1nvLQnLf
我现在还有一个问题是:pdf文件产生的方式有很多种,既可以使用latex编写产生,还可以使用word另存为,还可以使用编程语言如iReport等产生。而且这些格式如果不一样,那么会不会转换很麻烦?

阅读 9.6k
3 个回答
新手上路,请多包涵

楼主,我知道怎么提取中文文本不会乱码。但是你这种分一半的形式不知道怎么解决。
我其实也遇到了类似问题,就是我的pdf有一部分是表格形式的,一部分是图片的,我只想提取表格部分的,但是不知道如何确定范围去提取。这个楼主知道不?

新手上路,请多包涵

你好啊,我想请教你之前的pdf转txt的两列那个情况你现在处理好了吗?

我用过Spire.PDF for Java第三方控件来提取PDF文本,效果还不错,您可以参考下。下面是相关代码:

import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import java.io.*;

public class Extract_Text {

    public static void main(String[] args) {
        
        //创建PdfDocument实例
        PdfDocument doc = new PdfDocument();
        //加载PDF文件
        doc.loadFromFile("test.pdf");

        //创建StringBuilder实例                
        StringBuilder sb = new StringBuilder();   
 
        PdfPageBase page;                
        //遍历PDF页面,获取每个页面的文本并添加到StringBuilder对象
        for(int i= 0;i<doc.getPages().getCount();i++){
            page = doc.getPages().get(i);            
            sb.append(page.extractText(true));
        }
        FileWriter writer;
        try {
            //将StringBuilder对象中的文本写入到文本文件
            writer = new FileWriter("ExtractText.txt");
            writer.write(sb.toString());
            writer.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }

        doc.close();
    }
}

产品包下载链接:https://www.e-iceblue.cn/Down...

推荐问题
宣传栏