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

标签 python pdf reportlab pypdf

我正在创建一个 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/

相关文章:

php - FPDF/FPDI 错误 : Fatal error: Class 'setasign\Fpdi\FpdfTpl' not found in

python - 是否可以在 ReportLab 中为图像添加边框?

python - reportlab中旋转图片的简单方法

Python 全局变量/范围混淆

python - Scrapy 获取错误为 "DNS lookup failed"的网站

regex - 从pdf文件中提取邮政地址

python - 无法使用 subprocess.Popen 在 Web 服务中打开 pdf 文件

python - Flask:防止 HTML 在浏览器的 URL 栏中转义

python - MyPy 不允许将通用属性标记为最终属性

php - 将 php 表打印为 pdf