如何用Python向已有PDF文件添加AcroForm可编辑文本框
给已有PDF添加AcroForm可编辑文本框
已实现功能
- 新建PDF并添加可编辑文本框
- 给已有PDF添加不可编辑文本戳
新建PDF添加可编辑文本框代码
from reportlab.pdfgen import canvas from reportlab.lib.units import cm from reportlab.lib import colors from reportlab.lib.pagesizes import A4 pdf = canvas.Canvas("my_file.pdf", bottomup=0) pdf.drawString(100, 100, "blablabla") x = pdf.acroForm x.textfield(value = "hello world!", fillColor = colors.yellow, borderColor = colors.black, textColor = colors.red, borderWidth = 2, borderStyle = 'solid', width = 500, height = 50, x = 50, y = 40, tooltip = None, name = None, fontSize = 20) pdf.save()
使用Adobe Reader打开该文件可看到对应的可编辑文本框。
给已有PDF添加不可编辑文本戳代码
from io import BytesIO import pikepdf from reportlab.pdfgen import canvas import os from reportlab.lib.units import cm from reportlab.lib import colors from reportlab.lib.pagesizes import A4 from PyPDF2 import PdfFileReader, PdfFileWriter from pypdf import PdfReader text = "input.pdf" def generate_stamp(msg, xy): x, y = xy buf = BytesIO() # 临时存储生成的PDF内容 c = canvas.Canvas(buf, bottomup=0) # 创建画布,bottomup=0表示坐标从下往上递增(PDF标准) c.setFontSize(16) c.setFillColorCMYK(0, 0, 0, 0, alpha=0.7) # c.rect(194, 5, 117, 17, stroke=1, fill=1) c.setFillColorCMYK(0, 0, 0, 100, alpha=0.7) c.drawString(x, y, msg) c.save() buf.seek(0) return buf stamp = generate_stamp('SOME TEXT STAMP', (300, 100)) # 给PDF第一页添加文本戳 pdf_orig = pikepdf.open(text) pdf_text = pikepdf.open(stamp) formx_text = pdf_orig.copy_foreign(pdf_text.pages[0].as_form_xobject()) formx_page = pdf_orig.pages[0] formx_name = formx_page.add_resource(formx_text, pikepdf.Name.XObject) stamp_text = pdf_orig.make_stream(b'q 1 0 0 1 0 0 cm %s Do Q' % formx_name) pdf_orig.pages[0].contents_add(stamp_text) pdf_orig.save('./out.pdf')
需求
需要实现:将AcroForm可编辑文本框添加至已有input.pdf文件中,而非新建PDF文件。
内容的提问来源于stack exchange,提问作者Gregory
相关产品推荐
相关产品推荐

