使用python突出显示pdf文件中的文本内容并保存屏幕截图

God*_*rey 2 python pdf pypdf2

我有一个 pdf 文件列表,我需要在这些文件的每一页上突出显示特定文本,并为每个文本实例保存一个快照。

到目前为止,我能够突出显示文本并将pdf文件的整个页面保存为快照。但是,我想找到突出显示文本的位置并放大快照,与整页快照相比,它会更详细。

我很确定这个问题一定有解决方案。我是 Python 的新手,因此我找不到它。如果有人能帮我解决这个问题,我将不胜感激。

我曾尝试使用PyPDF2,Pymupdf库,但我无法找出解决方案。我还尝试通过提供有效的坐标来突出显示,但找不到将这些坐标作为输出获取的方法。

[![Sample snapshot from the code[![\]\[1\]][1]][1]][1]

#import PyPDF2
import os
import fitz
from wand.image import Image
import csv
#import re
#from pdf2image import convert_from_path

check = 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 FILE
with 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'
                print(file1)
                doc.save(file1, garbage=4, deflate=True, clean=True)
                ### Screenshot
                with(Image(filename=file1, resolution=150)) as source:
                    images = source.sequence
                    newfilename = check + "\\Source Docs\\" + src[0] + '.jpeg'
                    Image(images[i]).save(filename=newfilename)
                    print("Screenshot of " + src[0] + " saved")
Run Code Online (Sandbox Code Playgroud)

Spa*_*y55 6

找不到将这些坐标作为输出获取的方法”-您可以通过执行以下操作来获取坐标:

for inst in text_instances:
    print(inst)
Run Code Online (Sandbox Code Playgroud)

instfitz.Rect包含找到的文本片段的左上角和右下角坐标的对象。文档中提供了所有信息。

我设法突出显示点并使用以下代码片段保存裁剪区域。我正在使用 python 3.7.1,我的输出fitz.version('1.14.13', '1.14.0', '20190407064320').

for inst in text_instances:
    print(inst)
Run Code Online (Sandbox Code Playgroud)

我在一个带有“你好”的示例 pdf 上对此进行了测试: 输入图像

脚本的一些输出: pg2-你好1 pg2-你好5

我从文档的以下页面组成了解决方案:

  • 引入库的教程页面
  • page.searchFor找出searchFor方法的返回类型
  • fitz.Rect了解返回的对象page.searchFor是什么
  • 食谱页面的集合(在 URL 中称为 faq)以了解如何裁剪和保存 pdf 页面的一部分