Después de buscar algo encontré finalmente la solución: Resultó que this era el enfoque correcto después de todo. Sin embargo, siento que no fue suficientemente detallado. Parece que el póster probablemente lo tomó de here (los mismos nombres de variables, etc.).
La idea: crear un nuevo PDF en blanco con Reportlab que solo contenga una cadena de texto. Luego fusione/agréguelo como marca de agua usando pyPdf.
from pyPdf import PdfFileWriter, PdfFileReader
import StringIO
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter
packet = StringIO.StringIO()
# create a new PDF with Reportlab
can = canvas.Canvas(packet, pagesize=letter)
can.drawString(100,100, "Hello world")
can.save()
#move to the beginning of the StringIO buffer
packet.seek(0)
new_pdf = PdfFileReader(packet)
# read your existing PDF
existing_pdf = PdfFileReader(file("mypdf.pdf", "rb"))
output = PdfFileWriter()
# add the "watermark" (which is the new pdf) on the existing page
page = existing_pdf.getPage(0)
page.mergePage(new_pdf.getPage(0))
output.addPage(page)
# finally, write "output" to a real file
outputStream = file("/home/joe/newpdf.pdf", "wb")
output.write(outputStream)
outputStream.close()
Espero que esto ayude a alguien más.
¿Está convirtiendo un archivo de texto a un archivo de imagen para escribirle un texto y convertirlo a un formato híbrido de imagen/texto? No hay forma__ de que sea la mejor manera de anotar un '.pdf' o completar un formulario' .pdf'. – agf
Probablemente tengas razón. Parece que no puedo encontrar una forma adecuada de modificar un pdf existente en python:/ –
posible duplicado de [Agregar texto a PDF existente usando Python] (http://stackoverflow.com/questions/1180115/add-text-to-existing -pdf-using-python) – bain