国产精品亚洲AV三区_国产精品日本一区二区在线播放_国产成人无码久久久精品一_性感美女视频在线观看免费精品

更多精彩內容,歡迎關注:

視頻號
視頻號

抖音
抖音

快手
快手

微博
微博

基于Python實現PDF區域文本提取工具

導讀這篇文章主要為大家介紹了如何通過Python實現一個非常精簡的圖像化的PDF區域選擇提取工具,文中示例代碼講解詳細,希望對大家能有所幫助。
功能簡介

打開軟件后界面如下:

點擊打開文件按鈕打開之前的PDF文件后效果如下:

框選區域后,標題欄會自動顯示當前框選的區域提取到的文字,還可以左右按鈕切換:

實際我們需要提取文字的區域可能不止這一個,所以程序支持多區域框選:

完成區域框選后就可以點擊保存文件,將PDF每頁提取到的文本保存到一個csv文件中,當前選區的保存結果如下:

可以看到已經按框選順序依次保存了每一個區域的字符串。

如果選擇區域時發現提取結果不準確,可以撤銷后重新選擇:

保存圖片則會將PDF的每頁的整體保存為一張圖片,未選擇區域時,以頁碼為文件名保存圖片:

選擇區域時,會自動提取最后一個區域提取的文本作為當前頁的文件名:

開發代碼

當然這個項目由于本人是一次使用wxpython,功能非常簡約,現在將完整代碼開源出來期待各位大佬的改進。

源碼和已編譯工具下載地址:

https://codechina.csdn.net/as604049322/python_gui

完整代碼:

"""
小小明的代碼
CSDN主頁:https://blog.csdn.net/as604049322
"""
__author__?=?'小小明'
__time__?=?'2021/11/24'

import?csv

import?wx
import?os
import?fitz


class?MyCanvas(wx.Panel):
????def?__init__(self,?parent):
????????wx.Panel.__init__(self,?parent)
????????self.parent?=?parent
????????self.rects?=?[]
????????self.Bind(wx.EVT_LEFT_DOWN,?self.OnLeftButtonEvent)
????????self.Bind(wx.EVT_LEFT_UP,?self.OnLeftButtonEvent)
????????self.Bind(wx.EVT_MOTION,?self.OnLeftButtonEvent)
????????self.Bind(wx.EVT_PAINT,?self.DoDrawing)
????????b?=?wx.Button(self,?-1,?"打開文件",?(0,?0))
????????self.Bind(wx.EVT_BUTTON,?self.OnButton,?b)
????????b?=?wx.Button(self,?-1,?"保存文件",?(75,?0))
????????self.Bind(wx.EVT_BUTTON,?self.save_file,?b)
????????b?=?wx.Button(self,?-1,?"保存圖片",?(150,?0))
????????self.Bind(wx.EVT_BUTTON,?self.save_img,?b)
????????b?=?wx.Button(self,?-1,?"撤銷選區",?(225,?0))
????????self.Bind(wx.EVT_BUTTON,?self.back_select,?b)

????????b?=?wx.Button(self,?-1,?"《",?(300,?0),?size=(25,?25))
????????self.Bind(wx.EVT_BUTTON,?self.previous,?b)
????????b?=?wx.Button(self,?-1,?"》",?(325,?0),?size=(25,?25))
????????self.Bind(wx.EVT_BUTTON,?self.next,?b)

????????self.g1?=?wx.Gauge(self,?-1,?100,?(0,?30),?(-1,?100),?wx.GA_VERTICAL)

????def?previous(self,?evt):
????????if?not?hasattr(self,?"pdfDoc"):
????????????return
????????if?self.i?>?0:
????????????self.i?-=?1
????????????self.change_pdf_page(self.i,?False)
????????????self.DoDrawing(-1)
????????????if?self.rects:
????????????????self.parent.SetTitle(self.path?+?"|"?+?self.extract_pdf_text())

????def?next(self,?evt):
????????if?not?hasattr(self,?"pdfDoc"):
????????????return
????????if?self.i?3d}"
????????????????pix.save(f"{path}/{name}.png")
????????????????self.g1.SetValue((i?+?1)?*?100?//?self.pdfDoc.pageCount)
????????dlg.Destroy()
????????os.system(f"explorer?{path}")

????def?save_file(self,?evt):
????????if?not?hasattr(self,?"pdfDoc"):
????????????return
????????path?=?self.save_FileDialog()
????????if?path?is?None:
????????????return
????????data?=?[]
????????for?i?in?range(self.pdfDoc.pageCount):
????????????page?=?self.pdfDoc[i]
????????????row?=?[self.extract_pdf_text(page,?rect)
???????????????????for?i,?rect?in?enumerate(self.rects)]
????????????data.append(row)
????????with?open(path,?"w")?as?f:
????????????writer?=?csv.writer(f,?lineterminator="\n")
????????????row?=?[f"區域{i}"?for?i?in?range(1,?len(row)?+?1)]
????????????writer.writerow(row)
????????????for?row?in?data:
????????????????writer.writerow(row)
????????os.system(f"cmd?/c?start?{path}")

????def?extract_pdf_text(self,?page=None,?rect=None):
????????if?page?is?None:
????????????page?=?self.pdfDoc[self.i]
????????if?rect?is?None:
????????????rect?=?self.rects[-1]
????????a,?b,?c,?d?=?rect
????????clip?=?fitz.Rect(a,?b,?a?+?c,?b?+?d)
????????text?=?page.get_text(clip=clip).strip()
????????return?text

????def?change_img(self,?img_path,?move=True):
????????self.bmp?=?wx.Bitmap(img_path)
????????self.SetSize(self.bmp.GetSize())
????????self.parent.SetSize(self.parent.GetBestSize())
????????if?move:
????????????self.parent.Center()

????def?DoDrawing(self,?evt):
????????if?not?hasattr(self,?"bmp"):
????????????return
????????dc?=?wx.ClientDC(self)
????????dc.DrawBitmap(self.bmp,?0,?0,?True)
????????dc.SetPen(wx.Pen('blue'))
????????dc.SetBrush(wx.Brush('white',?wx.BRUSHSTYLE_TRANSPARENT))
????????dc.DrawRectangleList(self.rects)

????def?OnLeftButtonEvent(self,?event):
????????if?event.LeftDown():
????????????self.x,?self.y?=?event.GetPosition()
????????????self.rects.append([self.x,?self.y,?0,?0])
????????elif?event.Dragging():
????????????x,?y?=?event.GetPosition()
????????????self.rects[-1][2]?=?x?-?self.x
????????????self.rects[-1][3]?=?y?-?self.y
????????????self.DoDrawing(-1)
????????elif?event.LeftUp():
????????????print(self.rects)
????????????if?self.rects[-1][2]?

為你推薦
資訊專欄
熱門視頻
相關推薦
詳解python的循環 python實現新年倒計時實例代碼 Python實現消消樂小游戲 學習python的while循環嵌套 提升Python運行速度的5個小技巧 Python按鍵或值對字典進行排序 圖像檢索之基于vlfeat實現SIFT特征 python繪圖中的四個繪圖技巧 js中toString方法3個作用 信息系統項目管理師報考條件 信息系統項目管理師報考時間 信息系統項目管理師報名時間 信息系統項目管理師考試時間 pmp與信息系統項目管理師 信息系統項目管理師報考要求 信息系統項目管理師有效期 信息系統項目管理師考什么論文 信息系統項目管理師是什么類別 軟考信息系統項目管理師怎么備考 備考流程有哪些 考信息系統項目管理師需要考幾門 Python數據分析處理(三)--運動員信息的分組與聚合 Python實現城市公交網絡分析與可視化 Python 垃圾回收機制詳解 python正則表達式語法學習筆記 一文秒懂python正則表達式常用函數 Python常用的正則表達式處理函數詳解 JS截取字符串的三種方法詳解 PHP遍歷數組的6種方式總結 php兩種基本的輸出方及實例詳解 php生成唯一uid的解決方法詳解 PHP7中對十六進制字符串處理的問題詳解 PHP對接抖音開發平臺接口的詳細教程 php7安裝mysqli實例講解 php去掉一維數組的鍵值的實例方法 PHP中empty()和isset()的區別介紹 PHP實現JWT的Token登錄認證 php判斷時間戳是否為今天實例講解 PHP7 preg_replace出錯及解決辦法 五年班的學習計劃怎么寫 五年級的學習計劃 初中新學期學習計劃怎么寫
Top 国产精品亚洲AV三区_国产精品日本一区二区在线播放_国产成人无码久久久精品一_性感美女视频在线观看免费精品
<strike id="cakm0"></strike>
  • <button id="cakm0"><dl id="cakm0"></dl></button>
  • <samp id="cakm0"><tbody id="cakm0"></tbody></samp>
    <samp id="cakm0"><pre id="cakm0"></pre></samp><ul id="cakm0"></ul>
    <strike id="cakm0"></strike>
    <li id="cakm0"></li>
  • <ul id="cakm0"></ul>
  • 久久久久久精| 亚洲新中文字幕| 在线观看亚洲一区| 亚洲国产成人不卡| 亚洲三级毛片| 性亚洲最疯狂xxxx高清| 久久中文字幕导航| 国产精品分类| 精品电影在线观看| 一区二区欧美国产| 久久激情视频| 欧美午夜无遮挡| 亚洲高清视频一区| 午夜免费久久久久| 欧美大片国产精品| 国产亚洲毛片| 一本色道久久综合亚洲精品不卡| 欧美在线啊v一区| 欧美欧美全黄| 激情视频一区二区| 亚洲主播在线播放| 欧美激情一区二区三区四区 | 亚洲精选视频在线| 午夜精品短视频| 欧美全黄视频| 亚洲成色777777在线观看影院| 亚洲午夜精品一区二区| 欧美成人伊人久久综合网| 国产麻豆精品theporn| 日韩视频免费观看| 开元免费观看欧美电视剧网站| 国产精品久久久久aaaa樱花| 亚洲片国产一区一级在线观看| 欧美综合国产精品久久丁香| 欧美性事免费在线观看| 91久久精品美女高潮| 久久久久99精品国产片| 国产日韩欧美麻豆| 亚洲伊人久久综合| 欧美先锋影音| 夜夜嗨一区二区| 欧美乱在线观看| 亚洲国产mv| 老牛影视一区二区三区| 国产欧美一区二区精品秋霞影院| 国产精品99久久久久久白浆小说| 欧美激情视频一区二区三区不卡| 亚洲国产高清视频| 免费试看一区| 亚洲欧洲三级电影| 免费视频最近日韩| 亚洲欧洲一二三| 免费看的黄色欧美网站| 亚洲国产精品电影在线观看| 久久美女艺术照精彩视频福利播放| 国产深夜精品| 久久精品国产一区二区三| 国内精品视频在线播放| 久久久久久自在自线| 激情久久久久久| 久久综合999| 91久久午夜| 欧美另类69精品久久久久9999| 亚洲欧洲在线播放| 欧美激情亚洲视频| 亚洲一区在线看| 国产婷婷色一区二区三区| 久久久水蜜桃| 亚洲精品影视| 国产精品久久久久aaaa九色| 性欧美xxxx大乳国产app| 国产一区二区久久久| 蜜臀91精品一区二区三区| 亚洲国产欧美国产综合一区| 欧美日韩中文字幕在线| 欧美亚洲一区| 亚洲黄色成人久久久| 国产精品成人免费精品自在线观看| 亚洲欧美日韩中文视频| 在线精品国产成人综合| 欧美日韩国产精品一区| 欧美伊人精品成人久久综合97| 悠悠资源网亚洲青| 欧美午夜激情在线| 久久久久久久久久久久久9999| 亚洲国产乱码最新视频| 国产精品日本| 免费在线日韩av| 亚洲欧美日韩精品久久久久| 亚洲二区免费| 国产精品综合| 欧美精品一区二区蜜臀亚洲| 欧美在线视频一区| 一本久道久久久| 影音先锋日韩有码| 欧美视频不卡| 欧美大片第1页| 欧美亚洲免费| 亚洲天堂第二页| 91久久久在线| 国内外成人免费激情在线视频网站| 欧美日韩亚洲一区二区三区在线| 久久先锋资源| 欧美一二三视频| 亚洲天堂久久| 亚洲精品日韩激情在线电影| 黄色亚洲在线| 国产女人aaa级久久久级| 欧美日本一区二区高清播放视频| 久久亚洲精品视频| 久久精品国产久精国产爱 | 国内在线观看一区二区三区| 欧美日韩在线视频观看| 欧美成人亚洲成人| 久久久久青草大香线综合精品| 亚洲专区一区| 国产精品99久久久久久人| 最新日韩在线| 亚洲国产成人精品视频| 一区在线免费观看| 国产午夜一区二区三区| 国产日韩精品视频一区| 国产精品日韩欧美一区二区三区| 欧美视频在线视频| 欧美日韩免费观看一区二区三区| 欧美激情视频一区二区三区在线播放 | 亚洲欧美日韩国产中文在线| 亚洲最快最全在线视频| 亚洲理论在线| 亚洲精品日韩在线观看| 亚洲欧洲免费视频| 亚洲伦理精品| 一本色道久久综合亚洲91| 亚洲人成网站色ww在线| 亚洲精品乱码久久久久久日本蜜臀 | 影院欧美亚洲| 亚洲东热激情| 日韩视频一区二区三区| 亚洲图片激情小说| 亚洲欧美日韩精品久久亚洲区| 亚洲欧美日韩在线不卡| 欧美一区在线视频| 久久久在线视频| 欧美高清在线观看| 欧美精品一区二区高清在线观看| 欧美日韩国产综合新一区| 国产精品qvod| 国语自产偷拍精品视频偷 | 亚洲午夜在线观看视频在线| 亚洲一区二区三区午夜| 欧美一区二区三区在线观看| 久久亚洲精品一区| 欧美另类视频| 国产欧美精品一区| 影音先锋另类| 夜夜嗨一区二区| 欧美一区二区视频观看视频| 久久综合福利| 国产精品成人aaaaa网站| 国产婷婷色一区二区三区四区| 亚洲国产精品欧美一二99| 日韩视频在线永久播放| 欧美在线黄色| 欧美另类videos死尸| 国产情侣一区| 亚洲人成网站999久久久综合| 亚洲一区欧美激情| 麻豆精品视频在线观看视频| 欧美性猛交xxxx免费看久久久| 国产一区二区三区在线免费观看 | 亚洲精品国久久99热| 午夜亚洲福利| 欧美精品在线视频| 国产在线精品成人一区二区三区 | 国产精品美女主播| 亚洲第一中文字幕在线观看| 亚洲小说春色综合另类电影| 你懂的一区二区| 国产亚洲电影| 亚洲深夜福利视频| 欧美不卡高清| 韩国av一区二区| 亚洲一区高清| 欧美久久久久免费| 激情欧美日韩| 欧美一区二区三区在线| 欧美视频在线观看一区| 亚洲黄色免费| 久久综合久色欧美综合狠狠| 国产精品久久久久一区二区三区| 亚洲日本aⅴ片在线观看香蕉| 久久精品国产99国产精品澳门| 国产精品99一区二区| 亚洲人成在线影院| 麻豆精品视频在线观看| 国产一区二区视频在线观看| 亚洲欧美日本国产专区一区| 欧美性大战久久久久| 宅男精品视频| 欧美日韩高清免费|