python替换PDF中文字的代码需求!

公司查保密,很多以前的PDF文件中存在“密”的文字都需要删除。
我现在想先尝试输入一个PDF文件路径后,能够用代码的方式将文件中的“密”替换成“哈”。经过了全网的查找和大量的尝试,结果发现网上已有的代码都是错的,至少没找到一个直接能用的。目前网上还没有这个问题的解决思路。
我根据网上查询的资料,也写了一段python代码,但无法将字符串类型的内容替换后,写入新的PDF中去,代码如下:

import PyPDF2

with open(r'C:\Users\lenovo\Desktop\1.2 10MW变压器冷却系统技术条件-扫描-20201208 - 副本.pdf', 'rb') as file:
    pdf = PyPDF2.PdfReader(file)
    num_pages = len(pdf.pages)

    writer = PyPDF2.PdfWriter()

    for page_num in range(num_pages):
        page = pdf.pages[page_num]
        content = page.extract_text().replace('密', '哈')
        page.merge_page(content)
        writer.add_page(page)

with open(r'C:\Users\lenovo\Desktop\11.pdf', 'wb') as output:
    writer.write(output)

睿智的各位,有没有能解决这个问题的代码,可以联系我,有偿。

提供一个思路,你看行不行。
查找密的位置,在对应位置添加一个图片水印,这样可能会简单一点。
给PDF添加水印这个功能,应该是很常见的。

PyPDF2 库的限制导致替换功能无法正常工作。你可以尝试使用其他的 PDF 处理库,例如 PyMuPDF 【fitz】试试
看看这个Demo对你有没有帮助 pip install PyMuPDF

import fitz
input_path = r'C:\扫描副本.pdf'
output_path = r'C:\11.pdf'
doc = fitz.open(input_path)
for page in range(doc.page_count):
    page_content = doc.load_page(page)
    blocks = page_content.get_text("dict")["blocks"]
    for block in blocks:
        for line in block["lines"]:
            for span in line["spans"]:
                if "密" in span["text"]:
                    span["text"] = span["text"].replace("密", "哈")
doc.save(output_path)
doc.close()

【以下回答由 GPT 生成】

我可以帮助您解决这个问题。您所提供的代码有些问题,主要是在替换文字后无法将内容写入新的PDF文件。

要解决这个问题,您可以使用PyPDF2库来读取和写入PDF文件,并使用reportlab库来生成新的PDF。下面是一个可行的解决方案:

首先,确保您已经安装了PyPDF2reportlab库。您可以使用以下命令来安装它们:

pip install PyPDF2
pip install reportlab

然后,使用以下代码来实现替换PDF文件中文字的功能:

from PyPDF2 import PdfReader
from reportlab.pdfgen import canvas

def replace_text_in_pdf(input_path, output_path, search_text, replace_text):
    # 打开原始PDF文件
    pdf = PdfReader(input_path)

    # 获取PDF中的总页数
    num_pages = len(pdf.pages)

    # 创建一个新的PDF文件
    c = canvas.Canvas(output_path)

    for page_num in range(num_pages):
        # 获取当前页面
        page = pdf.pages[page_num]

        # 提取页面内容
        content = page.extract_text()

        # 替换文本
        replaced_content = content.replace(search_text, replace_text)

        # 将替换后的内容绘制到新的PDF页面上
        c.drawString(10, 10, replaced_content)  # 这里使用drawString方法可以插入文字

        # 添加新页面
        c.showPage()

    # 保存并关闭新的PDF文件
    c.save()

# 指定输入和输出文件路径,以及要替换的文本
input_path = r'C:\Users\lenovo\Desktop\1.2 10MW变压器冷却系统技术条件-扫描-20201208 - 副本.pdf'
output_path = r'C:\Users\lenovo\Desktop\11.pdf'
search_text = '密'
replace_text = '哈'

# 调用替换函数
replace_text_in_pdf(input_path, output_path, search_text, replace_text)

请注意,drawString方法可以用来将文本插入到新的PDF页面中。您可以根据需要调整该方法的参数,如xy位置等。

这个解决方案使用PyPDF2库来读取原始PDF文件,并使用reportlab库来生成新的PDF文件并插入修改后的内容。希望这可以解决您的问题!如果您还有任何疑问,请随时向我提问。



【相关推荐】


  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7709018
  • 除此之外, 这篇博客: Python 多图拼接,多图转PDF,一气呵成中的 不难发现,这获取到的不仅是文件夹下的图片路径,而是该文件下所有的文件路径, 没关系,后面可以通过试错来给它筛喽(当然也可以多写几行代码筛选一下,保留住图片的文件路径[依据后缀],甚至筛选出一些特定的图片文件) 部分也许能够解决你的问题。

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