You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python PDF转文本丢失内容、排版错乱问题求助

PDF转文本时出现数值丢失、排版错乱问题,求排查方向或解决方案

大家好,我最近在用Python开发PDF转文本的功能,目前用了pdfminer和PyPDF2实现了基础转换,但遇到了一些棘手的问题:

  • 部分场景下会出现内容丢失:比如段落中间的数值(像600,95)完全没出现在转换结果里
  • 还有排版错乱的情况:段落里的数值会跑到段落末尾,和原本的文本结构不符

我想请教各位:

  1. 有没有人遇到过类似的问题?
  2. 这种情况是不是和PDF文件的类型(比如扫描件生成的PDF、矢量PDF)有关?

我附上了PDF原文截图、转换结果截图(原文段落中包含"XX 600,95 XX",转换后仅保留"XX XX",或变为"XX XX 600,95"),以及我使用的代码,盼能得到大家的帮助或相关排查思路。

我的实现代码

from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import LAParams, LTTextBox, LTTextLine
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdfinterp import PDFPageInterpreter, PDFResourceManager
from pdfminer.pdfpage import PDFPage, PDFTextExtractionNotAllowed
from pdfminer.pdfparser import PDFParser
from PyPDF2 import PdfFileReader
from urllib.request import urlopen
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage
from io import StringIO, BytesIO

def readPDF(pdfFile):
    rsrcmgr = PDFResourceManager()
    retstr = StringIO()
    codec = 'utf-8'
    laparams = LAParams()
    device = TextConverter(rsrcmgr, retstr, codec=codec, laparams=laparams)
    interpreter = PDFPageInterpreter(rsrcmgr, device)
    password = ""
    maxpages = 0
    caching = True
    pagenos=set()
    for page in PDFPage.get_pages(pdfFile, pagenos, maxpages=maxpages, password=password,caching=caching, check_extractable=True):
        interpreter.process_page(page)
    device.close()
    textstr = retstr.getvalue()
    retstr.close()
    return textstr

if __name__ == "__main__":
    scrape = open("file location", 'rb')
    pdfFile = BytesIO(scrape.read())
    outputString = readPDF(pdfFile)
    print(outputString)
    pdfFile.close()

内容的提问来源于stack exchange,提问作者RDeep

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 14:12:34