PDF如何实现按行读取

PDF如何实现按行读取
https://res.ygyg.cn/userbusipub/M00/14/AC/CicmImJ7DcmAfB6vAAQLhfInluc603.pdf
这是PDF链接,试过aliyun的ocr识别,但是ocr好像不能精确定位到哪一行

import com.spire.pdf.*;
import com.spire.pdf.utilities.PdfTable;
import com.spire.pdf.utilities.PdfTableExtractor;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class ExtractTable {
    public static void main(String[] args)throws IOException {
        //加载PDF文档
        PdfDocument pdf = new PdfDocument();
        //pdf.loadFromFile("test.pdf");
        URL url = new URL("https://res.ygyg.cn/userbusipub/M00/14/AC/CicmImJ7DcmAfB6vAAQLhfInluc603.pdf");
        //打开链接
        HttpURLConnection conn = (HttpURLConnection)url.openConnection();
        //设置请求方式为"GET"
        conn.setRequestMethod("GET");
        //超时响应时间为5秒
        conn.setConnectTimeout(5 * 1000);
        //通过输入流获取图片数据
        InputStream inStream = conn.getInputStream();
        pdf.loadFromStream(inStream);
 
        //创建StringBuilder类的实例
        StringBuilder builder = new StringBuilder();
 
        //抽取表格
        PdfTableExtractor extractor = new PdfTableExtractor(pdf);
        PdfTable[] tableLists ;
        for (int page = 0; page < pdf.getPages().getCount(); page++)
        {
            tableLists = extractor.extractTable(page);
            if (tableLists != null && tableLists.length > 0)
            {
                for (PdfTable table : tableLists)
                {
                    int row = table.getRowCount();
                    int column = table.getColumnCount();
                    for (int i = 0; i < row; i++)
                    {
                        for (int j = 0; j < column; j++)
                        {
                            String text = table.getText(i, j);
                            builder.append(text+" ");
                        }
                        builder.append("\r\n");
                    }
                }
            }
        }
        
        //控制台输出
        System.out.println(builder.toString());
 
        //将提取的表格内容写入txt文档
        FileWriter fileWriter = new FileWriter("ExtractedTable.txt");
        fileWriter.write(builder.toString());
        fileWriter.flush();
        fileWriter.close();
    }
}

看你的测试pdf是表格内容,使用pef转表格可以完整的转换出来,那么按照你的需求按行读取,思路为,将pad内的表格内容读取出来,
遍历表格内容,如果将其转存可以存为excel
下面是示例代码
我屏蔽的事转excel部分,有帮助点一下采纳哦,有问题可以继续讨论

import pdfplumber
import xlwt

# 定义保存Excel的位置
# workbook = xlwt.Workbook()  #定义workbook
# sheet = workbook.add_sheet('Sheet1')  #添加sheet
# i = 0 # Excel起始位置

# path = input("请输入PDF文件位置:")
path = "CicmImJ7DcmAfB6vAAQLhfInluc603.pdf"  # 导入PDF路径
pdf = pdfplumber.open(path)
print('\n')
print('开始读取数据')
print('\n')
for page in pdf.pages:
    # 获取当前页面的全部文本信息,包括表格中的文字
    # print(page.extract_text())                     
    for table in page.extract_tables():
        # print(table)
        # 按行遍历pdf表格
        for row in table:   
            # 打印数据    
            print(row)
            # # 写入excel 
            # for j in range(len(row)):
            #     sheet.write(i, j, row[j])
            # i += 1
        print("读取完成")
        print('---------- 分割线 ----------')

pdf.close()

# 保存Excel表
# workbook.save('PDFresult.xls')
# print('\n')
# print('写入excel成功')
# print('保存位置:')
# print('PDFresult.xls')
# print('\n')
# input('PDF取读完毕,按任意键退出')

貌似表格识别可以,但是你也是需要自己处理一下

img

这个不如转换成word来读取,如果要读取pdf的话,就需要研究一下pdf是怎样保存文本的(json数格式),

Free Spire.PDF for Java可以识别和读取PDF表格数据(官方文档:Java 提取 PDF 中的表格),读取出来结果基本跟表格一致,一行一行的

import com.spire.pdf.*;
import com.spire.pdf.utilities.PdfTable;
import com.spire.pdf.utilities.PdfTableExtractor;

import java.io.FileWriter;
import java.io.IOException;

public class ExtractTable {
    public static void main(String[] args)throws IOException {
        //实例化PdfDocument类的对象
        PdfDocument pdf = new PdfDocument();

        //加载PDF文档
        pdf.loadFromFile("test.pdf");

        //创建StringBuilder类的实例
        StringBuilder builder = new StringBuilder();

        //创建PdfTableExtractor类的对象
        PdfTableExtractor extractor = new PdfTableExtractor(pdf);

        //遍历每一页
        for (int page = 0; page < pdf.getPages().getCount(); page++)
        {
            //提取页面中的表格存入PdfTable[]数组
            PdfTable[] tableLists = extractor.extractTable(page);
            if (tableLists != null && tableLists.length > 0)
            {
                //遍历表格
                for (PdfTable table : tableLists)
                {
                    int row = table.getRowCount();//获取表格行
                    int column = table.getColumnCount();//获取表格列
                    for (int i = 0; i < row; i++)
                    {
                        for (int j = 0; j < column; j++)
                        {
                            //获取表格中的文本内容
                            String text = table.getText(i, j);

                            //将获取的text写入StringBuilder容器
                            builder.append(text+" ");
                        }
                        builder.append("\r\n");
                    }
                }
            }
        }

        //保存为txt文档
        FileWriter fileWriter = new FileWriter("ExtractedTable.txt");
        fileWriter.write(builder.toString());
        fileWriter.flush();
        fileWriter.close();
    }
}

读取结果:

img