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

使用python突出显示pdf文件中的文本内容并保存屏幕截图,python,pdf,pypdf2,Python,Pdf,Pypdf2,我有一个pdf文件列表,我需要突出显示这些文件的每一页上的特定文本,并为每个文本实例保存一个快照 到目前为止,我能够突出显示文本并将pdf文件的整个页面保存为快照。但是,我想找到突出显示的文本的位置,并在快照中进行放大,这将比完整页面快照更详细 我很肯定这个问题一定有解决办法。我是Python新手,因此无法找到它。如果有人能帮我解决这个问题,我将不胜感激 我尝试过使用PyPDF2,Pymupdf库,但我想不出解决方案。我还尝试通过提供坐标来突出显示,但无法找到将这些坐标作为输出的方法 [![Sa

我有一个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")
找不到将这些坐标作为输出的方法” -通过执行以下操作可以获得坐标:

for inst in text_instances:
    print(inst)
inst
fitz.Rect
对象,包含找到的文本的左上角和右下角坐标。所有信息都可以在中找到

我使用下面的代码片段成功地突出显示了点,并保存了一个裁剪区域。我使用的是python 3.7.1,fitz.version的输出是
('1.14.13','1.14.0','20190407064320')

导入fitz
doc=fitz.open(“foo.pdf”)
仪器计数器=0
对于范围内的pi(文档页面计数):
页面=文件[pi]
text=“你好”
text_instances=page.searchFor(文本)
百分之五高度=(page.rect.br.y-page.rect.tl.y)*0.05
对于文本_实例中的inst:
仪表计数器+=1
highlight=page.addHighlightAnnot(inst)
#定义一个覆盖整个页面的合适裁剪框
#并在突出显示的文本周围添加填充
tl_pt=fitz.点(第页矩形tl.x,最大值(第页矩形tl.y,仪表tl.y-百分之五高度))
br_pt=fitz.Point(page.rect.br.x,min(page.rect.br.y,inst.br.y+百分之五高度))
hl_clip=fitz.Rect(tl_pt,br_pt)
zoom_mat=fitz.矩阵(2,2)
pix=page.getPixmap(矩阵=zoom\u mat,clip=hl\u clip)
pix.writePNG(f“pg{pi}-hl{inst_counter}.png”)
文件关闭()

我在一个带有“hello”字样的pdf样本上测试了这一点:

脚本的一些输出:

我用以下几页文档组成了解决方案:

  • 进入图书馆的页面
  • 要计算
    searchFor
    方法的返回类型
  • 了解从
    页.searchFor返回的对象是什么
  • 页面(URL中称为faq)以了解如何裁剪和保存pdf页面的一部分
    • 找不到将这些坐标作为输出的方法” -通过执行以下操作可以获得坐标:

      for inst in text_instances:
          print(inst)
      
      inst
      fitz.Rect
      对象,包含找到的文本的左上角和右下角坐标。所有信息都可以在中找到

      我使用下面的代码片段成功地突出显示了点,并保存了一个裁剪区域。我使用的是python 3.7.1,fitz.version的输出是
      ('1.14.13','1.14.0','20190407064320')

      导入fitz
      doc=fitz.open(“foo.pdf”)
      仪器计数器=0
      对于范围内的pi(文档页面计数):
      页面=文件[pi]
      text=“你好”
      text_instances=page.searchFor(文本)
      百分之五高度=(page.rect.br.y-page.rect.tl.y)*0.05
      对于文本_实例中的inst:
      仪表计数器+=1
      highlight=page.addHighlightAnnot(inst)
      #定义一个覆盖整个页面的合适裁剪框
      #并在突出显示的文本周围添加填充
      tl_pt=fitz.点(第页矩形tl.x,最大值(第页矩形tl.y,仪表tl.y-百分之五高度))
      br_pt=fitz.Point(page.rect.br.x,min(page.rect.br.y,inst.br.y+百分之五高度))
      hl_clip=fitz.Rect(tl_pt,br_pt)
      zoom_mat=fitz.矩阵(2,2)
      pix=page.getPixmap(矩阵=zoom\u mat,clip=hl\u clip)
      pix.writePNG(f“pg{pi}-hl{inst_counter}.png”)
      文件关闭()
      

      我在一个带有“hello”字样的pdf样本上测试了这一点:

      脚本的一些输出:

      我用以下几页文档组成了解决方案:

      • 进入图书馆的页面
      • 要计算
        searchFor
        方法的返回类型
      • 了解从
        页.searchFor返回的对象是什么
      • 页面(URL中称为faq)以了解如何裁剪和保存pdf页面的一部分

      你好,你试过什么?你遇到什么问题了吗?@reportgunner我试过上面的库。我的问题是我无法从pdf文件中提取突出显示文本的坐标。请查看并@reportgunner感谢链接。非常感谢。你好,你试过什么?你遇到什么问题了吗?@reportgunner我试过上面的库。我的问题是我无法从pdf文件中提取突出显示文本的坐标。请查看并@reportgunner感谢链接。非常感谢。这个解决方案非常完美。同时,感谢分享所有这些链接。它们会非常有用。我们能用它们来提取pdf文件中预高亮显示内容的坐标吗?我不知道。我唯一一次使用图书馆是为了回答你的问题。查看文档;可能有一些东西可以提取页面中的亮点。使用fitz.Rect获取。谢谢:)这个解决方案是完美的。同时,感谢分享所有这些链接。它们会非常有用。我们能用它们来提取pdf文件中预高亮显示内容的坐标吗?我不知道。我唯一一次使用图书馆是为了回答你的问题。C