【问题标题】:Sclicing with pymupdf使用 pymupdf 进行切片
【发布时间】:2021-04-15 19:10:27
【问题描述】:

我想使用 Python 和 pymupdf 在 pdf 文档中标记几个关键字。

代码如下(来源:original code):

import fitz

doc = fitz.open("test.pdf")

page = doc[0]

text = "result"

text_instances = page.searchFor(text)

for inst in text_instances:
    highlight = page.addHighlightAnnot(inst)
            highlight.setColors(colors='Red')
    highlight.update()


doc.save("output.pdf")

但是,文本只被标记在一页上。我尝试按照 pymupdf (documentation) 文档中的说明更改代码,以便对所有页面进行切片。

import fitz

doc = fitz.open("test.pdf")
for page in doc.pages(1, 3, 1):
    pass

text = "result"

text_instances = page.searchFor(text)

for inst in text_instances:
    highlight = page.addHighlightAnnot(inst)
    highlight.setColors(colors='Red')
    highlight.update()


doc.save("output.pdf")

不幸的是,它仍然只在一页上标记关键字。我需要更改什么,以便在所有页面上标记关键字?

【问题讨论】:

  • 你的缩进是错误的。目前,保存发生在循环期间。这意味着 output.pdf 将被最后一个循环覆盖。
  • @Alan 我更改了pass 的缩进,因为这个缩进是错误的。你的意思是这个缩进还是我在缩进上犯了另一个错误?
  • doc.save("output.pdf") 是inst 循环的一部分
  • @Alan 你说得对,我在上传问题时也错过了那个。但是,它仍然无法正常工作。

标签: python pdf pymupdf


【解决方案1】:

您的代码存在 2 个主要问题:

  1. 缩进
  2. 切片的开始是从零开始的

否则你对代码的理解似乎很好。

for page in doc.pages(1, 3, 1):
    pass

如果您想循环浏览页面,您需要将高亮代码放在页面循环中。此外,您是从第 2 页开始,而不是第 1 页,因为第 1 页由索引 0 表示。

#! /usr/bin/env python
# -*- coding: utf-8 -*-

import fitz

doc = fitz.open("test.pdf")

text = "result"

# page = doc[0]
# for page in doc.pages(start, stop, step):
for page in doc.pages(0, 3, 1):
    text_instances = page.searchFor(text)

    for inst in text_instances:
        highlight = page.addHighlightAnnot(inst) 
        highlight.setColors(colors='Red')
        highlight.update()
    
doc.save("output.pdf")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-06
    • 2010-09-20
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-12
    相关资源
    最近更新 更多