问题描述
问题陈述
库和版本
- python-3.6
- fitz-0.0.1.dev2
- pymupdf-1.17.5
问题面对
对于前两个迭代,注释是完美的,并且裁剪也可以按预期完美地工作。但是,通过迭代文本实例中搜索词的下一次出现,然后在该区域周围进行裁剪,并且搜索词的注释也会失败。 找不到解决此问题的方法。
def cropPdf( pdfName,word):
c=0
# opening the pdf file using fitz
fitz_doc=fitz.open(pdfName)
# getting first page of the doc
fitz_page=fitz_doc[0]
# finding all instances where the searchword is found
text_instances=fitz_page.searchFor(word)
# Iterating through each text instances
for text_cord in text_instances:
c=c+1
pdfPath = "./" + pdfName + ".pdf"
# To add highlight(Rectangle Annotation) around the search word
highlight = fitz_page.addRectAnnot(text_cord)
# getting the bounding Box cordinate
x0,y0,x1,y1=highlight.rect
# here i set the cropping area around the annotated text
fitz_page.setCropBox(fitz.Rect(x0+600,y0+600,x0-600,y0-600))
#
pix=fitz_page.getpixmap()
print(fitz_page.number)
base_name_highlight="output"+str(c)+".png"
# saving the cropped area as png file
pix.writeImage("./highlight_folder/"+base_name_highlight)
# Deleting the marked annotation which helps me to avoid duplicate annotation inside a cropped area,# when starting to annotate the next occurence of the word to annotate while iterating.
fitz_page.deleteAnnot(highlight)
cropPdf(pdfName="A4_4.pdf",word="INSULATION")
结果图像
-
所有裁剪后的图像的预期输出
-
裁剪时为假情况
解决方法
对裁剪框的更改可能会影响页面的所有坐标。因此,在进入注释循环之前,我应该在变量中指定cropbox的初始状态。在每次迭代结束时,我都应重置为初始的裁剪框,这将有助于在不更改坐标的情况下注释下一次发生的情况