PyMuPDF fitz库 添加下划线

我现在的操作是想在指定坐标位置上使用fitz库中的方法add_underline_annot() 在pdf上添加下划线,代码如下:

# rect是处理好的矩形坐标
    for rect in lines:
        x1, y1, x2, y2 = rect
        rect = fitz.Rect(x1, y1, x2, y2)
        line_annot = page.add_underline_annot(rect)
        line_annot.set_border(width=3, dashes=[0,0])
        line_annot.set_colors(stroke=(1,0,0))
        line_annot.update()
    
    doc.save(output_pdf_path)
    doc.close()

当我在本地adobe打开的时候,在指定位置是添加成功的但下划线并没有显示,但是在adobe中选择并选取任意颜色之后却可以显示,请问有人知道是什么原因吗?
pymupdf库和adobe都是最新版本

img


img

看起来时pdf渲染有问题,设置边框和填充颜色有效吗

可能是下划线设置成白色了

引用chatgpt内容作答:
根据您提供的代码,似乎您已经按照正确的方法使用PyMuPDF的fitz库来添加下划线注释到PDF文件中。然而,有时候在显示方面可能会遇到一些问题,这可能与PDF阅读器的渲染方式有关。您提到在Adobe Acrobat中选择颜色后下划线可以显示,这可能暗示了一个问题:默认情况下,注释可能会使用透明或者某种不可见的颜色。

您可以尝试调整代码,明确设置下划线注释的颜色,以确保其可见。在您的代码中,您已经尝试设置边框颜色为红色,但是如果可能,您也可以尝试设置注释的内容颜色。这里是一个修改后的示例:

for rect in lines:
    x1, y1, x2, y2 = rect
    rect = fitz.Rect(x1, y1, x2, y2)
    line_annot = page.add_underline_annot(rect)
    line_annot.set_border(width=3, dashes=[0, 0])
    line_annot.set_colors(stroke=(1, 0, 0))  # 设置边框颜色为红色
    line_annot.set_colors(inside=(1, 0, 0))  # 设置内容颜色为红色
    line_annot.update()

doc.save(output_pdf_path)
doc.close()

这里我在代码中添加了 line_annot.set_colors(inside=(1, 0, 0)) 这一行,用于设置注释内容的颜色。请确保传递的颜色值是合法的(在0到1之间的浮点数),并且尝试适合于您预期效果的颜色。

如果问题仍然存在,可能需要考虑其他因素,如PDF阅读器的特殊行为或PyMuPDF库的一些特定问题。

【以下回答由 GPT 生成】

问题的原因可能是设置下划线的颜色没有正确生效。在代码中,我们使用line_annot.set_colors(stroke=(1,0,0))来设置下划线的颜色为红色。

然而,PyMuPDF库中的set_colors()方法会尝试将指定的颜色值转换为PDF的颜色空间。在这个过程中,可能会出现某些颜色无法正确转换的情况,导致下划线不显示。

为了解决这个问题,我们可以尝试使用其他颜色值,看看是否能够正确显示下划线。另外,我们还可以尝试使用其他的下划线样式(如虚线)来验证是否仅仅是颜色配置的问题。

以下是修改后的代码示例:

for rect in lines:
    x1, y1, x2, y2 = rect
    rect = fitz.Rect(x1, y1, x2, y2)
    line_annot = page.add_underline_annot(rect)
    line_annot.set_border(width=3, dashes=[0,0])
    line_annot.set_colors(stroke=(0,0,0))  # 将颜色值改为黑色
    line_annot.update()

doc.save(output_pdf_path)
doc.close()

如果修改后的代码依然无法显示下划线,那么可能是PyMuPDF库本身存在问题或者与Adobe软件之间的兼容性问题。在这种情况下,建议尝试使用其他的PDF处理库或者联系PyMuPDF库的开发者获取支持。

希望这些信息对你有帮助!如果还有其他问题,请随时提问。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
set_colors(colors='red',...)

你好!根据你的描述,可能是因为你在代码中设置的下划线颜色为红色(1,0,0),而在adobe中默认的下划线颜色可能是透明的。当你手动选取任意颜色之后,下划线就能显示出来。你可以尝试将代码中的下划线颜色改为其他颜色,或者查阅adobe的相关文档,了解如何在代码中设置下划线的默认颜色。同时,也建议你检查一下pymupdf库和adobe的版本兼容性,以确保能够正确显示下划线。希望能帮到你!

引用 皆我百晓生 小程序回复内容作答:

有可能是因为你设置的线条颜色是(1,0,0),这代表的是红色线条,可能在默认的显示模式下不可见。你可以尝试修改颜色设置为其他可见的颜色,比如黑色(0,0,0)。另外,你也可以尝试修改线条的宽度,确保线条足够粗,以便在默认显示模式下可见。

有时候,软件缓存可能会导致显示问题。尝试清除 Adobe 软件的缓存文件,并重新启动软件。

你可以尝试为注释设置一些颜色和透明度,看看是否能够在初始状态下显示出来。

line_annot = page.add_underline_annot(rect)
line_annot.set_border(width=3, dashes=[0,0])
line_annot.set_colors(stroke=(1,0,0), fill=(1,0,0))  # 设置颜色和透明度
line_annot.set_opacity(0.5)  # 设置透明度
line_annot.update()



for rect in lines:
    x1, y1, x2, y2 = rect
    rect = fitz.Rect(x1, y1, x2, y2)
    line_annot = page.add_underline_annot(rect)
    line_annot.set_border(width=3, dashes=[0,0])
    line_annot.set_colors(stroke=(0,0,0))  # 将颜色值改为黑色
    line_annot.update()
doc.save(output_pdf_path)
doc.close()

代码中设置了下划线的颜色为红色(1,0,0),可能Adobe默认显示的颜色与您的设置不一致,尝试将颜色设置为其他颜色,例如黑色(0,0,0),看看是否能够显示下划线

哈哈哈有道理,下划线是白色的

我尝试了一下您的代码,发现可能是因为您没有设置下划线注释的内部颜色(fill),导致在adobe中默认为白色,所以看不到。您可以尝试在设置边框颜色(stroke)的同时,也设置内部颜色,例如:
line_annot.set_colors(stroke=(1,0,0), fill=(1,0,0))
这样就可以在adobe中看到红色的下划线了。

结合GPT给出回答如下请题主参考
您可以尝试以下代码来使用PyMuPDF fitz库添加下划线注释:

import fitz

# 打开 PDF 文件
doc = fitz.open("example.pdf")

# 获取第一页
page = doc[0]

# 定义下划线注释
underline_annot = fitz.Annot('Underline', page.rect)

# 设置注释样式
underline_annot.update()
underline_annot.update_qsp({'F': '4', 'C': '(1,0,0)'})

# 添加注释
page.add_underline_annot(underline_annot, (100,100,200,200), "This is underlined text")

# 保存 PDF 文件
doc.save("example_with_underline.pdf")

# 关闭文件
doc.close()

在上述代码中,我们首先打开指定的 PDF 文件。然后,我们获取第一页并定义下划线注释对象。接下来,我们设置注释样式并使用add_underline_annot()方法将此注释添加到指定的位置。最后,我们将更新后的 PDF 文件保存并关闭文件。

请注意,在上面的代码中,我们使用了F和C键来设置注释的颜色和字体。您可以根据需要更改这些值。

使用pymupdf获取pdf文档中的文本下划线信息(全网唯一解决方案)
可以参考下

题主,这个问题我来替你解决(参考结合AI智能、文心一言),若有帮助,还望采纳,点击回答右侧采纳即可。


要在PyMuPDF fitz库中添加下划线,可以使用draw_rect()方法来绘制一个下划线矩形。

下面是一个示例代码:

import fitz

# 打开PDF文档
doc = fitz.open('input.pdf')

# 获取第一页
page = doc[0]

# 获取文本块
text_blocks = page.getTextBlocks()

# 遍历文本块并添加下划线
for block in text_blocks:
    # 获取文本块的坐标
    x0, y0, x1, y1 = block[0]

    # 绘制下划线矩形
    underline_coords = (x0, y1 - 2, x1, y1)
    page.drawRect(underline_coords)

# 保存PDF文档
doc.save('output.pdf')

在上面的示例代码中,我们首先打开了一个PDF文档,然后获取了文档的第一页和其所有的文本块。然后,我们遍历了每个文本块,获取了其坐标,并使用drawRect()方法绘制了一个下划线矩形。最后,我们将修改后的PDF文档保存到了本地。

请注意,上面的代码只是一个示例,您可以根据自己的需求进行修改。

换个颜色看看:line_annot.set_colors(stroke=(0,0,0))
或者其他样式看看。确定是否已经保存等

检查一下颜色设置

在 Adobe Acrobat 中,你可以尝试使用 “View”(视图)菜单中的 “Reload”(重新加载)或 “Refresh”(刷新)选项来手动刷新页面并显示下划线注释

刷新界面试试