fitz 将pdf裁剪成左中右三部分,并提取内容保存为excel

news/2024/7/21 4:58:58 标签: pdf, excel, 人工智能

fitz介绍

fitz官网
fitz 是 PyMuPDF 库的一个封装,它是一个用于处理 PDF 文件的 Python 库。PyMuPDF 是一个强大而灵活的 PDF 处理库,而 fitz 则是对其进行了精简和封装,使得使用起来更加方便。

fitz 提供了许多功能,包括打开、创建、编辑和保存 PDF 文件。下面是 fitz 的一些主要特点:

打开和读取 PDF 文件:使用 fitz.open 方法可以打开一个 PDF 文件,并返回一个 fitz.Document 对象。你可以通过这个对象访问和操作 PDF 的页面、书签、元数据等信息。

页面操作:通过 fitz.Document 对象可以获取 PDF 的页面数量,并可以根据索引或页码获取单个页面。你可以对页面进行裁剪、旋转、缩放和提取等操作。

文本提取:使用 get_text 方法可以提取页面中的文本内容。你还可以按照坐标提取指定区域内的文本。

图像提取:使用 get_pixmap 方法可以获取页面上的图像,你可以将图像保存为文件或进行进一步的处理。

创建和编辑 PDF:fitz 允许你创建新的空白 PDF,向其中添加页面、书签和注释,并且可以对现有的 PDF 进行编辑和修改,如删除、替换、合并页面等操作。

高级功能:fitz 还提供了一些高级功能,如搜索文本、添加标注和链接、提取嵌入的字体信息等。

总体而言,fitz 是一个功能强大的 PDF 处理库,可以帮助你在 Python 中对 PDF 进行各种操作。你可以根据自己的需求使用 fitz 来读取、创建、编辑和提取 PDF 文件的内容。

pdfplumber__19">fitz与pdfplumber 区别

参考:chatgpt
fitz 和 pdfplumber 都是常用的用于提取 PDF 内容的 Python 库,它们在使用方式和功能上有一些区别。

适用库:fitz 是 PyMuPDF 库的封装,而 pdfplumber 是基于 PyPDF2 和 pdftotext 的库。

功能丰富度:fitz 提供了更多高级功能,比如支持页面裁剪、渲染、文本搜索和标注等。它还可以处理图像和矢量对象。pdfplumber 则更专注于提取文本内容,提供了一些辅助功能,比如可以获取页面的大小和位置信息。

文本提取准确性:由于 PDF 文件的复杂性,不同的库可能对于某些特殊情况下的文本提取准确性有所不同。在一般情况下,fitz 和 pdfplumber 在文本提取方面的准确性都比较高。

库的易用性:pdfplumber 的 API 设计更加简洁明了,上手较为容易。fitz 则是 PyMuPDF 库的封装,相较而言,它的使用可能稍微复杂一些。

综上所述,如果你的主要需求是提取文本内容,pdfplumber 可能会更适合你。如果你需要更多高级功能或对 PDF 进行更复杂的处理,例如页面裁剪或图像处理,那么 fitz 更适合你。根据实际需求选择适合的库可以更好地满足你的需求。

代码

注意pdf权限问题,并且pdf排版是一行一行,而不是分块的,这样格式比较规整

 import fitz
 import pandas as pd
 
def clip_pdf(filepath):
    # 打开原始 PDF 文件
    total_df = pd.DataFrame([],columns=['info','page','table_index','index'])
    src = fitz.open(filepath)
    src.select(list(range(6, 515)))
    doc = fitz.open()
    text_list = []

   
    for spage in src:

        print('spage')# for each page in input
        r = spage.rect  # input page rectangle
        pdf_width = 700
        rx = fitz.Rect(r[2] * 40 /pdf_width, r[2] * 85 /pdf_width, r[2] * 240 /pdf_width, r[3] ) 
        page = doc.new_page(-1, width=r[2] * 200 /pdf_width, height=r[3])  # 创建新页面
        page.show_pdf_page(page.rect, src, spage.number, clip=rx)  # 插入裁剪后的部分
        text  = page.get_text()


        rx = fitz.Rect(r[2] * 240 /pdf_width, r[2] * 85 /pdf_width, r[2] * 440 /pdf_width, r[3] )
        page = doc.new_page(-1, width=r[2] * 200 /pdf_width, height=r[3])  # 创建新页面
        page.show_pdf_page(page.rect, src, spage.number, clip=rx)  # 插入裁剪后的部分
        text2 = page.get_text()

        rx = fitz.Rect(r[2] * 440 /pdf_width, r[2] * 85 /pdf_width, r[2] * 640 /pdf_width, r[3] )
        page = doc.new_page(-1, width=r[2] * 200 /pdf_width, height=r[3])  # 创建新页面
        page.show_pdf_page(page.rect, src, spage.number, clip=rx)  # 插入裁剪后的部分
        text3 = page.get_text()

        df = pd.DataFrame(text.split('\n') [:-2],columns=['info'])
        df['table_index'] = 0
        df['index'] = df.index
        df2 = pd.DataFrame(text2.split('\n')[1:-1],columns=['info'])
        df2['table_index'] = 1
        df2['index'] = df2.index
        df3 = pd.DataFrame(text3.split('\n')[:-2] ,columns=['info'])
        df3['table_index'] = 2
        df3['index'] = df3.index
        page_df = pd.concat([df,df2] )
        page_df = pd.concat([page_df,df3])
        page_df['page'] = spage.number
        if total_df.empty:
            total_df = page_df
        else:
			total_df = pd.concat([total_df, page_df], axis=0)
# 保存输出文件
total_df.to_excel('output.xlsx')
doc.save("output.pdf", garbage=3, deflate=True)

http://www.niftyadmin.cn/n/699429.html

相关文章

Pytorch常用的函数(三)深度学习中常见的卷积操作详细总结

Pytorch常用的函数(三)深度学习中常见的卷积操作 1、标准卷积(Standard Convolution) 1.1 标准卷积的理解 我们直接来看二维卷积,这在实际应用中是最常见的。 上图中Conv 2D其实就是卷积核,也叫做滤波器。滤波器的值决定了输出的情况,模型…

上传自己的npm依赖包

有时候我们需要对某个依赖包的源码进行修改进行使用,但我们又不能对已有的源码官网进行上传更新,这时,我们可以获取依赖包进行修改后,自行部署到https://npmjs.com中 1.官网https://npmjs.com中注册一个账号(账号&…

Vue--》Vue3打造可扩展的项目管理系统后台的完整指南(八)

今天开始使用 vue3 ts 搭建一个项目管理的后台,因为文章会将项目的每一个地方代码的书写都会讲解到,所以本项目会分成好几篇文章进行讲解,我会在最后一篇文章中会将项目代码开源到我的GithHub上,大家可以自行去进行下载运行&…

Ubuntu18.04,opencv-4.3.0和opencv_contrib-4.3.0安装(填坑)

如果觉得本篇文章对您的学习起到帮助作用,请 点赞 关注 评论 ,留下您的足迹💪💪💪 本文主要Ubuntu18.04安装opencv-4.3.0和opencv_contrib-4.3.0,坑巨多,因此记录以备日后查看,同时…

Linux下用who命令查看当前登录用户

文章目录 1 查看当前登录用户(w 和 who)2 who命令查看某一时刻登录的用户3 查看当前登录用户的账户名(whoami)4 关于linux下who指令的总结介绍 1 查看当前登录用户(w 和 who) w命令可以查看某一时刻登录该…

【Leetcode】22.括号生成

一、题目 1、题目描述 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。 示例1: 输入:n = 3 输出:["((()))","(()())","(())()","()(())","()()()"]示例2: 输入:n = …

系统架构设计师-软件工程(1)

一、软件过程模型 (1)瀑布模型、(2)V模型【瀑布变种】、(3)原型模型、 (4)螺旋模型【原型瀑布】、(5)构件组装模型/基于构件的开发方法、 (…

.NET 8 Preview 4 中的 ASP.NET Core 更新

作者:Daniel Roth - Principal Program Manager, ASP.NET 翻译:Alan Wang 排版:Alan Wang .NET 8 Preview 4 现已可用,并包括了许多对 ASP.NET Core 的新改进。 以下是本预览版本中的新内容摘要: Blazor 使用 Blazor …