pre{overflow-x: auto} 功能简介 打开软件后界面如下:
点击打开文件按钮打开之前的PDF文件后效果如下:
框选区域后,标题栏会自动显示当前框选的区域提取到的文字,还可以左右按钮切换:
实际我们需要提取文字的区域可能不止这一个,所以程序支持多区域框选:
完成区域框选后就可以点击保存文件,将PDF每页提取到的文本保存到一个csv文件中,当前选区的保存结果如下:
可以看到已经按框选顺序依次保存了每一个区域的字符串。
如果选择区域时发现提取结果不准确,可以撤销后重新选择:
保存则会将PDF的每页的整体保存为一张,未选择区域时,以页码为文件名保存:
选择区域时,会自动提取最后一个区域提取的文本作为当前页的文件名:
开发代码
当然这个项目由于本人是一次使用wxpython,功能非常简约,现在将完整代码开源出来期待各位大佬的改进。
源码和已编译工具下载地址:
>
"""
draw elastic shapes on a canvas on drag, move on right click;
see canvasDraw_tagspy for extensions with tags and animation
"""
from tkinter import
trace = False
class CanvasEventsDemo:
def init (self, parent=None):
canvas = Canvas(width=300, height=300, bg='beige')
canvaspack()
canvasbind('<ButtonPress-1>', selfonStart) # click
canvasbind('<B1-Motion>', selfonGrow) # and drag
canvasbind('<Double-1>', selfonClear) # delete all
canvasbind('<ButtonPress-3>', selfonMove) # move latest
selfcanvas = canvas
selfdrawn = None
selfkinds = [canvascreate_oval, canvascreate_rectangle]
if name == ' main ':
CanvasEventsDemo()
mainloop()
from tkinter import
def onCanvasClick(event):
print('Got canvas click', eventx, eventy, eventwidget)
def onObjectClick(event):
print('Got object click', eventx, eventy, eventwidget, end=' ')
print(eventwidgetfind_closest(eventx, eventy)) # find text object's ID
root = Tk()
canv = Canvas(root, width=100, height=100)
obj1 = canvcreate_text(50, 30, text='Click me one')
obj2 = canvcreate_text(50, 70, text='Click me two')
canvbind('<Double-1>', onCanvasClick) # bind to whole canvas
canvtag_bind(obj1, '<Double-1>', onObjectClick) # bind to drawn item
canvtag_bind(obj2, '<Double-1>', onObjectClick) # a tag works here too
canvpack()
rootmainloop()
思路是这样的,把绘制的每个区域抽象成单独的对象,每个对象中可以储存各自的信息(比如title, content, position等),每个对象中都包含各自的判断点是否在当前对象区域内的判断函数,这样就可以知道点到了哪个对象,也可以拿到对象内的数据, 触发相应的事件。
这样说可能不太直观,你可以看一下我封装好的一个库。
>
以上就是关于基于Python实现PDF区域文本提取工具全部的内容,包括:基于Python实现PDF区域文本提取工具、python实现canvas点击多次点击、python canvas 拖拽和移动\事件等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)