批量提取PDF指定地区内容到 Excel , 根据PDF文件第一行笔墨来自动重定名v1.3-附思绪和代码实现

[复制链接]
发表于 2026-4-24 08:48:54 | 显示全部楼层 |阅读模式
本次文章更新内容,图片以及扫描的PDF也可以支持批量提取指定地区内容了,重要是通过截图指定地区,然后使用OCR来辨认该地区的笔墨来实现的,以是精度大概会有点不敷,但是假如是数字的话,题目不大; 以是最好还是纯电子版本的PDF文件提取结果最好。
 

 
需求1:假如我有一批数目比力多的同样格式的PDF电子文档,须要把特定多个地区的数字大概笔墨提取出来
需求2:我有一批PDF文档,但是文件的名称都是一些乱码,我须要根据PDF文件内里第一页内容的第一行的标题笔墨来批量重定名这些文件
 
分析:不顺应场景:假如多个PDF文件的须要提取内容的地区的位置不一样,好比我要提取的数字在第一个PDF文件在(30,30)的坐标,结果在第二个文件酿成了(35,35)这个坐标,那么软件就会无法很好的提取这个内容文本,以是这个代码的实用范围是多个PDF文档格式划一,而且须要提取的文本信息所在的PDF位置都根本一样的环境下实用。
 
 
思绪1:我们恣意选一个PDF文件作为样本,然后用代码把要提取的地区用方框标注出来,再然后把这些地区的坐标生存下来,后续批量处理处罚每个PDF的时间,就根据生存的这些地区坐标来提取对应位置的笔墨大概数字
思绪表现图:
 

 
 
 
末了的结果表现图:
 

 
 
 
这种思绪的缺陷和须要注意的点:
1 须要每个批量处理处罚的文件要提取的数据的位置都是一样的,好比第一个PDF文件须要提取的数字位于【100,100】这个坐标,那么后续每个文件须要提取的数字都要位于这个位置,如有变动,就会导致提取不到须要的数据,可以通过扩大地区的坐标范围来肯定水平上的办理这个题目
2 假如提取的笔墨不齐备,分析大概框选的方框略微小了一点,我代码内里设置了一个单独增大某个地区的功能
 
 

 
需求2思绪:一批PDF文档的名称都是一些乱码,我须要根据PDF文件内里第一页内容的标题来批量重定名这些文件,现实上很简单,就是分析PDF文件,然后获取第一行的内容,然后重定名该文件即可,这个代码不复杂,就没放在本页了。
 
 
代码:
  1. from typing import Optional, Dict, List
  2. from solapi.magic_eden.site_api.utils.consts import MEAPIUrls
  3. from solapi.magic_eden.site_api.utils.data import collection_stats_cleaner, collection_info_cleaner, \
  4.     collection_list_stats_cleaner
  5. from solapi.magic_eden.site_api.utils.types import MECollectionStats, MECollectionInfo, MECollectionMetrics
  6. from solapi.utils.api import BaseApi
  7. class MagicEdenCollectionApi(BaseApi):
  8.     def get_collection_stats_dirty(self, symbol: str) -> Optional[Dict]:
  9.         url = f'{MEAPIUrls.COLLECTION_STATS}{symbol}'
  10.         res = self._get_request(url)
  11.         return res.get('results') if isinstance(res, dict) else None
  12.     def get_collection_info_dirty(self, symbol: str) -> Optional[Dict]:
  13.         url = f'{MEAPIUrls.COLLECTION_INFO}{symbol}'
  14.         res = self._get_request(url)
  15.         return res if bool(res) else None
  16.     def get_collection_stats(self, symbol: str) -> Optional[MECollectionStats]:
  17.         data = self.get_collection_stats_dirty(symbol)
  18.         if data:
  19.             return collection_stats_cleaner(data)
  20.     def get_collection_info(self, symbol: str) -> Optional[MECollectionInfo]:
  21.         data = self.get_collection_info_dirty(symbol)
  22.         if data:
  23.             return collection_info_cleaner(data)
  24.     def get_collection_list_stats_dirty(self):
  25.         url = MEAPIUrls.COLLECTION_LIST_STATS
  26.         res = self._get_request(url)
  27.         return res.get('results') if isinstance(res, dict) else None
  28.     def get_collection_list_stats(self) -> Optional[List[MECollectionMetrics]]:
  29.         data = self.get_collection_list_stats_dirty()
  30.         if data:
  31.             return list(map(lambda x: collection_list_stats_cleaner(x), data))
  32.     def get_collection_list_dirty(self):
  33.         url = MEAPIUrls.COLLECTION_LIST
  34.         res = self._get_request(url)
  35.         return res.get('collections') if isinstance(res, dict) else None
  36.     def get_collection_list(self) -> Optional[List[MECollectionInfo]]:
  37.         data = self.get_collection_list_dirty()
  38.         if data:
  39.             return list(map(lambda x: collection_info_cleaner(x), data))
复制代码
 
 
 
 
 
 
 

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表