0

我正在使用 PyMuPDF 并尝试遍历字符串列表并在拍摄图像并移动到下一个字符串之前突出显示它们。

下面的代码可以满足我的需要,但注释在每个循环之后仍然存在,我想在拍摄图像后删除它们。
下面的示例图像显示“命令”一词突出显示,但前面的字符串“图像”和“文件名”仍然突出显示,因为我会将数百个这样的图像编译成报告,我想让它更清楚地突出。

有没有类似 page.remove(highlight) 的东西?

pymupdf 输出示例图像

for pi in range(doc.pageCount):
    page = doc[pi]
    for tag in text_list:

        text = tag
        text_instances = page.searchFor(text)

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

        for inst in text_instances:
            inst_counter += 1
            highlight = page.addSquigglyAnnot(inst)            

            tl_pt = fitz.Point(max(page.rect.tl.x, inst.tl.x - five_percent_width), max(page.rect.tl.y, inst.tl.y - five_percent_height))
            br_pt = fitz.Point(min(page.rect.br.x, inst.br.x + five_percent_width), min(page.rect.br.y, inst.br.y + five_percent_height))

            hl_clip = fitz.Rect(tl_pt, br_pt)

            zoom_mat = fitz.Matrix(4, 4)
            pix = page.getPixmap(matrix=zoom_mat, clip = hl_clip)
            >I want to remove the annotation here
4

3 回答 3

1

做这个:

annot = page.firstAnnot
while annot:
    annot = page.deleteAnnot(annot)

该方法在删除的注释之后传递注释。

于 2020-06-11T13:46:54.537 回答
0

我发现一个可接受的解决方案是在截屏后将不透明度设置为 0%。

pix = page.getPixmap(matrix=zoom_mat, clip = hl_clip)
highlight.setOpacity(0)
highlight.update()
于 2020-05-25T02:54:04.990 回答
0

Jorj 的方法很好。但是,从文档中还有其他选项:

https://pymupdf.readthedocs.io/en/latest/faq.html#how-to-read-and-update-pdf-objects

此方法还可用于通过将其值设置为 null 来从外部参照字典中删除键:以下将从页面中删除旋转规范:doc.xref_set_key(page.xref, "Rotate", "null")。同样,要从页面中删除所有链接、注释和字段,请使用doc.xref_set_key(page.xref, "Annots", "null"). 因为 Annots 根据定义是一个数组,所以doc.xref_set_key(page.xref, "Annots", "[]")在这种情况下,使用语句设置一个空数组将完成相同的工作。

于 2021-09-30T07:38:52.860 回答