<th id="wu2k2"><s id="wu2k2"></s></th> <blockquote id="wu2k2"></blockquote>
  • <tr id="wu2k2"></tr>
  • <samp id="wu2k2"><tbody id="wu2k2"></tbody></samp><samp id="wu2k2"><tbody id="wu2k2"></tbody></samp>
  • 更多精彩內容,歡迎關注:

    視頻號
    視頻號

    抖音
    抖音

    快手
    快手

    微博
    微博

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

    文檔

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

    這篇文章主要為大家介紹了如何通過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實現PDF區域文本提取工具

    這篇文章主要為大家介紹了如何通過Python實現一個非常精簡的圖像化的PDF區域選擇提取工具,文中示例代碼講解詳細,希望對大家能有所幫助。
    推薦度:
    為你推薦
    資訊專欄
    熱門視頻
    相關推薦
    詳解python的循環 python實現新年倒計時實例代碼 Python實現消消樂小游戲 分享15個超級好用得Python實用技巧 學習python的while循環嵌套 提升Python運行速度的5個小技巧 Python按鍵或值對字典進行排序 圖像檢索之基于vlfeat實現SIFT特征 python繪圖中的四個繪圖技巧 js中toString方法3個作用 描寫春天花朵的詩句 關于思念的詩句 帶馬字的詩句 牡丹花的詩句 想念的詩句 含雁的詩句 愁的詩句 珍惜時間的名言 清明節的諺語 關于清明的諺語 Python數據分析處理(三)--運動員信息的分組與聚合 Python實現城市公交網絡分析與可視化 Python&nbsp;垃圾回收機制詳解 關于樹的詩句 緬懷親人的詩句 春暖花開的詩句 家國情懷的詩句 含有星字的詩句 用來贊美老師的詩句 看破紅塵的經典詩句 長江的詩句 關于傳統節日的詩句 三月桃花的詩句 夕陽的詩句 紀念烈士的詩句 西湖的詩句 贊美虎的詩句 與蓮有關的詩句 梅蘭竹菊的詩句 描寫山的詩句有哪些
    Top 亚洲麻豆精品果冻传媒| 久久精品国产福利电影网| 国产精品爱啪在线线免费观看| 国产成人无码精品久久久小说| 国产精品99久久久久久宅男| 久久久精品人妻一区二区三区蜜桃| 国产美女精品视频| 国产精品无码翘臀在线观看| 亚洲av无码国产精品色午夜字幕 | 国产精品亚洲一区二区三区在线| 日本精品高清一区二区2021| 老司机在线精品视频| 久久99热只有频精品8| 精品亚洲综合久久中文字幕| 成人区人妻精品一区二区不卡| 亚洲午夜久久久精品电影院| 亚洲国产成人久久精品影视| 亚洲日韩精品一区二区三区| 含羞草国产亚洲精品岁国产精品| 亚洲精品视频免费看| 老司机性色福利精品视频| 久久er国产精品免费观看2| 久久精品国产99久久丝袜| 热RE99久久精品国产66热| 国产2021精品视频免费播放| 99无码精品二区在线视频| 久久91亚洲精品中文字幕| 亚洲AV无码久久精品色欲| 国产精品日本一区二区不卡视频 | 久久国产精品自由自在| 国产成人综合色视频精品| 图片区精品综合自拍| 久久久一本精品99久久精品66直播| 精品国产无限资源免费观看| 2020国产精品自拍| 四虎永久在线精品波多野结衣 | 亚洲国产精品成人网址天堂| 色妞www精品视频一级下载| 国产精品亚洲精品观看不卡| 91精品啪在线观看国产电影| 久久久久亚洲精品日久生情|