美文网首页
读pdf及DBF文件

读pdf及DBF文件

作者: Chaweys | 来源:发表于2020-12-26 10:18 被阅读0次

读pdf

#coding=utf-8
import PyPDF2

'''
读pdf保存至列表
'''
result=[]
with open('old.pdf','rb') as f:
    #pdf读文件对象
    pdfreader=PyPDF2.PdfFileReader(f)
    #由pdf读文件对象获取pdf文件的所有页数
    pages=pdfreader.getNumPages()
    #循环所有页数(从0开始)
    for page in range(pages):
        #获取pdf每页的对象
        pageobj=pdfreader.getPage(page)
        #pdf每页对象转成字符串追加至列表result中维护
        result.append(pageobj.extractText())


'''
拷贝pdf
'''
with open('old.pdf','rb') as f:
    # pdf读文件对象
    pdfreader=PyPDF2.PdfFileReader(f)
    # 由pdf读文件对象获取pdf文件的所有页数
    pages=pdfreader.getNumPages()

    #定义写pdf文件对象
    pdfwriter=PyPDF2.PdfFileWriter()

    '''
    注:写pdf或读pdf文件必须定义模式二进制:b,否则报错
    如果报错:PyPDF2.utils.PdfReaderError:Multiple definitions in dictionary at bytes ox30a for key/Type
    是因为读pdf文件对象校验了严格模式,解决:
    pdfreader=PyPDF2.PdfFileReader(f,strict=False)
    '''
    with open('new.pdf','wb') as f:
        #循环所有页数(从0开始)
        for page in range(pages):
            #获取pdf每页的对象
            pageobj=pdfreader.getPage(page)
            #写pdf文件对象添加每页读pdf文件的对象
            pdfwriter.addPage(pageobj)
            #最后写入文件流
            pdfwriter.write(f)

读DBF

#coding=utf-8
from dbfread import DBF

result=[]
#直接读数据库文件对象
table=DBF('new.dbf')
#获取表的列名
fieldname=table.field_names
result.append(fieldname)
#循环表每行,将每行转成字符串追加至列表保存
for record in table:
    result.append(record.values())


'''
如果提示编码问题,如下解决
'''
result2=[]
table=DBF('new.dbf')
try:
    fieldname=table.field_names
    result2.append(fieldname)
    for record in table:
        result2.append(record.values())
except UnicodeDecodeError as e:
    table.encoding='gbk'
    fieldname = table.field_names
    result2.append(fieldname)
    for record in table:
        result2.append(record.values())

使用pdfminer读取pdf文件

#解析pdf保存在txt文件中
#注:使用pdfminer模块,前提是python版本要大于等于3.6

from pdfminer.pdfparser import PDFParser
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdfpage import PDFPage, PDFTextExtractionNotAllowed
from pdfminer.pdfinterp import PDFResourceManager,PDFPageInterpreter
from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import LAParams
from io import StringIO


'''
PDFParser:用来解析pdf文件
PDFDocument:用来保存PDFParser解析后的对象
PDFPageInterpreter:Interpreter(解释器)用来处理解析后的文档页面内容
PDFResourceManager:pdf共享资源管理器,用于存储共享资源,如字体或图像
PDFPageAggregator:Aggregator(聚合器)
'''

class PDFUtils:
    def __init__(self):
        pass

    def pdf2txt(self,path):
        output=StringIO()
        with open(path,'rb') as f:
            parser=PDFParser(f)                #解析读取的pdf文件二进制流
            pdfdocument=PDFDocument(parser)    #解析pdfparser对象生成文档对象

            if not pdfdocument.is_extractable: #判断pdf文档对象是否提供txt转换,不提供就忽略
                raise PDFTextExtractionNotAllowed


            pdfrm=PDFResourceManager()                        #创建pdf资源管理器,来管理共享资源
            laparams=LAParams()                               #创建一个pdf设备对象
            device=PDFPageAggregator(pdfrm,laparams=laparams) #创建一个pdf设备对象
            interpreter=PDFPageInterpreter(pdfrm,device)      #创建一个pdf解释器对象

            for page in PDFPage.create_pages(pdfdocument):    #循环遍历列表生成器,PDFPage.create_pages(pdfdocument)返回一个列表生成器,即获取该pdf文档对象一共多少页
                interpreter.process_page(page)                #再用解释器解释每一页
                layout=device.get_result()                    #再用pdf设备获取每一页的对象
                for x in layout:
                    if hasattr(x,"get_text"):                 #判断是否有get_text()方法,如果有则获取文本值
                        content=x.get_text()
                        output.write(content)                 #将获取的文本值写入StringIO的输出流中

        content=output.getvalue()                             #从StringIO的输出流中再获取文本值
        output.close()
        return content

if __name__ == '__main__':
    path='test-dchu.pdf'
    pdfutils=PDFUtils()
    content=pdfutils.pdf2txt(path)
    print(content)
    with open('pdf2txt.txt','w',encoding='utf-8') as f:
        f.write(content)

结果:
第一节
测试pdf读取
1
2
3
源pdf.png

相关文章

  • 读pdf及DBF文件

    读pdf 读DBF 使用pdfminer读取pdf文件

  • dbf文件sql驱动 工具

    dbf文件简介 dbf 文件的接收和使用工具可以参考 dbf jdbc 驱动简介 目前市面上有的dbf jdbc驱...

  • dbf文件操作工具

    dbf文件 DBF文件格式是一种比较“古老”的数据库文件格式了,dbf是dBase和FoxPro所使用的数据库格式...

  • PostGIS中dbf file (.dbf) can not

    postgis数据库文件shapefile导入 dbf file (.dbf) can not be opened...

  • excel转dbf教程

    一、目标 将给定excel文件根据例库格式转为dbf数据库文件,如:例库: 原始Excel文件: 转换后的dbf数...

  • Oracle移动dbf文件

    1,以sysdba登录到sqlplus 2,查询数据文件 3,关闭数据库 4,移动数据文件 5,以mount方式启...

  • 创建删除数据库

    oracle创建数据库database有以下三步: 1,创建两个数据库的文件(.dbf | _temp.dbf) ...

  • Python ☞ day 10

    Python学习笔记之 自动化办公与鼠标键盘模拟 读写csv文件 读csv文件 写csv文件 读取PDF文件 读...

  • 技能!如何把PDF文档压缩到最小?

    PDF文件是我们现在日常工作中最常用的文件格式之一了,众所周知PDF文件格式能将文字、字型、格式、颜色及独立于设备...

  • PDF文件修改,PDF转Word

    PDF文件的优点 PDF文件格式可以将文字、字型、格式、颜色及独立于设备和分辨率的图形图像等封装在一个文件中,还可...

网友评论

      本文标题:读pdf及DBF文件

      本文链接:https://www.haomeiwen.com/subject/junwnktx.html