gpt4 book ai didi

python - 如何使用 Python 从 PDF 中删除文本

转载 作者:行者123 更新时间:2023-11-28 17:14:32 30 4
gpt4 key购买 nike

我正在创建一个 python 脚本来编辑 PDF 中的文本。

我有这段 Python 代码,它允许我将文本添加到 PDF 文件的特定位置。

import PyPDF2
import io
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter
import sys

packet = io.BytesIO()
# create a new PDF with Reportlab
can = canvas.Canvas(packet, pagesize=letter)
# Insert code into specific position
can.drawString(300, 115, "Hello world")
can.save()
#move to the beginning of the StringIO buffer
packet.seek(0)
new_pdf = PyPDF2.PdfFileReader(packet)
# read your existing PDF
existing_pdf = PyPDF2.PdfFileReader(open("original.pdf", "rb"))
num_pages = existing_pdf.numPages
output = PyPDF2.PdfFileWriter()
# add the "watermark" (which is the new pdf) on the existing page
page = existing_pdf.getPage(num_pages-1) # get the last page of the original pdf
page.mergePage(new_pdf.getPage(0)) # merges my created text with my PDF.
x = existing_pdf.getNumPages()
#add all pages from original pdf into output pdf
for n in range(x):
output.addPage(existing_pdf.getPage(n))
# finally, write "output" to a real file
outputStream = open("output.pdf", "wb")
output.write(outputStream)
outputStream.close()

我的问题:我想用自定义文本替换原始 PDF 中特定位置的文本。一种写入空白字符的方法可以解决问题,但我找不到任何方法可以做到这一点。

PS.: 它必须是 Python 代码,因为稍后我需要将其部署为 .exe 文件,而我只知道如何使用 Python 代码来实现。

最佳答案

替换 PDF 中文本的通用算法是一个难题。我并不是说它永远无法完成,因为我已经用 Adob​​e PDF 库演示了这样做,尽管它使用的是一个非常简单的输入文件,没有任何复杂性,但我不确定 pyPDF2 是否具有执行此操作所需的功能所以。在某种程度上,仅仅找到文本可能是一个挑战。

您(或者更实际地说,您的 PDF 库)必须解析页面内容并跟踪图形状态的变化,特别是在文本位于 Form XObject 中时对当前转换矩阵的更改,以及文本转换矩阵,并更改字体;您必须使用字体资源来获取字符宽度,以确定插入字符串后文本光标的位置。您可能需要处理 standard-14 字体,这些字体在其字体资源中不包含该信息(应用程序 - 您的程序 - 应该知道它们的指标)

毕竟,如果您不需要将 Tj 或 TJ(显示文本)指令分解成不同的部分,则删除文本很容易。防止文本 after 移动(如果需要的话)可能需要插入一个新的 Tm 指令以将文本 after 重新定位到它本来应该在的位置。

插入新文本可能具有挑战性。如果你想与正在使用的字体保持一致并且它是嵌入的和子集,它可能不一定包含你插入文本所需的字形。插入后,您必须决定是否需要重排插入文本之后的文本。

最后,您需要您的 PDF 库来保存所有更改。坦率地说,与尝试从头开始编程相比,使用 Adob​​e Acrobat 的编辑功能可能更便宜、更具成本效益。

关于python - 如何使用 Python 从 PDF 中删除文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45144293/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com