PyPdf无法逐行读取PDF文本

3

我曾使用 PyPdf 从 PDF 文件中读取文本。然而,PyPDF 并不是按照 PDF 中的每一行文本来读取,它是以一种杂乱无章的方式进行读取。在 PDF 中并没有换行符的地方,它也会插入一个新的换行符。

import PyPDF2
pdf_path = r'C:\Users\PDFExample\Desktop\Temp\sample.pdf'
pdfFileObj = open(pdf_path, 'rb')
pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
page_nos = pdfReader.numPages
for i in range(page_nos):
        # Creating a page object
        pageObj = pdfReader.getPage(i)
        # Printing Page Number
        print("Page No: ",i)
        # Extracting text from page
        # And splitting it into chunks of lines
        text = pageObj.extractText().split("  ")
        # Finally the lines are stored into list
        # For iterating over list a loop is used
        for i in range(len(text)):
                # Printing the line
                # Lines are seprated using "\n"
                print(text[i],end="\n\n")
        print()

这让我获得了以下内容:
Our Ref :
21
1
8
88
1
11
5 
 
Name: 
S
ky Blue
 
 
Ref 1 :
1
2
-
34
-
56789
-
2021/2 
 
Ref 2:
F2021004
444
 

Amount: 
$
1
00
.
11
... 

预期的是

Our Ref :2118881115 Name: Sky Blue Ref 1 :12-34-56789-2021/2 Ref 2:F2021004444
Amount: $100.11 Total Paid:$0.00 Balance: $100.11 Date of A/C: 01/08/2021 Date Received: 10/12/2021
Last Paid: Amt Last Paid: A/C Status: CLOSED Collector : Sunny Jane

这是pdf文件的链接: https://pdfhost.io/v/eCiktZR2d_sample2

2
PDF不是一个文字处理器格式。它的目的是在各种输出设备上生成视觉上相似的文档。为此,它可能会在视觉上排列在一起的字符之间发出PostScript定位命令。PyPDF无法逐行读取文件,因为该格式实际上没有行,只有一堆看起来没有PostScript代码的字符。另外:PyPDF最后更新于2010年。它已经有了后继者。PyPDF2接着被PyPDF3PyPDF4所取代。它们都不能真正做到你所期望的。它们在页面级别上的工作效果最佳。 - BoarGules
该PDF文件已不可用,而您也没有说明您使用的PyPDF2版本。PyPDF2在过去一个月内有很大的改进。 - Martin Thoma
1
@MartinThoma 我也尝试了版本为 2.3.1 的,但它也没有起作用。 - Himanshuman
@MartinThoma 我已经更新了 PDF 文件的链接。 - Himanshuman
1
谢谢您的赞美之词。我是PyPDF2的当前维护者,这意味着我发布它并组织许多事情。我不是原始作者,当然也不是这个项目中唯一的开发人员 :-) 我正在做很多社区工作 - 关注stackoverflow.com就是其中一部分 :-) - Martin Thoma
显示剩余3条评论
1个回答

4
我尝试了一个叫做pdfplumber的不同包。它能够按照我想要的确切方式逐行阅读PDF文件。
1. 安装pdfplumber包。
pip install pdfplumber

2. 获取文本并将其存储在某个容器中

import pdfplumber 
pdf_text = None 
with pdfplumber.open(pdf_path) as pdf:
    first_page = pdf.pages[0]
    pdf_text  = first_page.extract_text()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接