亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用python突出顯示pdf文件中的文本內容并保存屏幕截圖

使用python突出顯示pdf文件中的文本內容并保存屏幕截圖

慕容3067478 2022-01-11 16:39:04
我有一個 pdf 文件列表,我需要在這些文件的每一頁上突出顯示特定文本,并為每個文本實例保存一個快照。到目前為止,我能夠突出顯示文本并將 pdf 文件的整個頁面保存為快照。但是,我想找到突出顯示文本的位置并放大快照,與整頁快照相比,它會更詳細。我很確定必須有解決這個問題的方法。我是 Python 新手,因此我找不到它。如果有人能幫助我解決這個問題,我將不勝感激。我曾嘗試使用PyPDF2,Pymupdf庫,但我無法找出解決方案。我還嘗試通過提供有效的坐標來突出顯示,但找不到將這些坐標作為輸出的方法。[![Sample snapshot from the code[![\]\[1\]][1]][1]][1]#import PyPDF2import osimport fitzfrom wand.image import Imageimport csv#import re#from pdf2image import convert_from_pathcheck = r'C:\Users\Pradyumna.M\Desktop\Pradyumna\Automation\Intel Bytes\Create Source Docs\Sample Check 8 Apr 2019'dir1 = check + '\\Source Docs\\'dir2 = check + '\\Output\\'dir = [dir1, dir2]for x in dir:    try:        os.mkdir(x)    except FileExistsError:        print("Directory ", x, " already exists")### READ PDF FILEwith open('upload1.csv', newline='') as myfile:    reader = csv.reader(myfile)    for row in reader:        rowarray = '; '.join(row)        src = rowarray.split("; ")        file = check + '\\' + src[4] + '.pdf'        print(file)        #pdfFileObj = open(file,'rb')        #pdfReader = PyPDF2.PdfFileReader(pdfFileObj)        #print("Total number of pages: " + str(pdfReader.numPages))        doc = fitz.open(file)        print(src[5])        for i in range(int(src[5])-1, int(src[5])):            i = int(i)            page = doc[i]            print("Processing page: " + str(i))            text = src[3]            #SEARCH TEXT            print("Searching: " + text)            text_instances = page.searchFor(text)            for inst in text_instances:                highlight = page.addHighlightAnnot(inst)                file1 = check + '\\Output\\' + src[4] + '_output.pdf'
查看完整描述

1 回答

?
牧羊人nacy

TA貢獻1862條經驗 獲得超7個贊

“找不到將這些坐標作為輸出的方法” - 您可以通過以下方式獲取坐標:


for inst in text_instances:

    print(inst)

inst是fitz.Rect包含找到的文本的左上角和右下角坐標的對象。所有信息都可以在docs 中找到。


我設法使用以下代碼片段突出顯示點并保存裁剪區域。我正在使用 python 3.7.1,我的輸出fitz.version是('1.14.13', '1.14.0', '20190407064320').


import fitz


doc = fitz.open("foo.pdf")

inst_counter = 0

for pi in range(doc.pageCount):

    page = doc[pi]


    text = "hello"

    text_instances = page.searchFor(text)


    five_percent_height = (page.rect.br.y - page.rect.tl.y)*0.05


    for inst in text_instances:

        inst_counter += 1

        highlight = page.addHighlightAnnot(inst)


        # define a suitable cropping box which spans the whole page 

        # and adds padding around the highlighted text

        tl_pt = fitz.Point(page.rect.tl.x, max(page.rect.tl.y, inst.tl.y - five_percent_height))

        br_pt = fitz.Point(page.rect.br.x, min(page.rect.br.y, inst.br.y + five_percent_height))

        hl_clip = fitz.Rect(tl_pt, br_pt)


        zoom_mat = fitz.Matrix(2, 2)

        pix = page.getPixmap(matrix=zoom_mat, clip = hl_clip)

        pix.writePNG(f"pg{pi}-hl{inst_counter}.png")


doc.close()

我在一個帶有“你好”的樣本 pdf 上對此進行了測試:

http://img1.sycdn.imooc.com//61dd42f20001548d09570670.jpg

腳本的一些輸出: 

http://img1.sycdn.imooc.com//61dd430f0001af7209630172.jpg

http://img1.sycdn.imooc.com//61dd431c0001bf1209540198.jpg


查看完整回答
反對 回復 2022-01-11
  • 1 回答
  • 0 關注
  • 374 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號