existing - Agregar texto a PDF existente usando Python
python edit pdf (8)
Ejemplo para [Python 2.7]:
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(10, 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("original.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("destination.pdf", "wb")
output.write(outputStream)
outputStream.close()
Ejemplo para Python 3.x:
from PyPDF2 import PdfFileWriter, PdfFileReader
import io
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter
packet = io.BytesIO()
# create a new PDF with Reportlab
can = canvas.Canvas(packet, pagesize=letter)
can.drawString(10, 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(open("original.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 = open("destination.pdf", "wb")
output.write(outputStream)
outputStream.close()
Necesito agregar texto adicional a un PDF existente usando Python, cuál es la mejor manera de hacerlo y qué módulos adicionales necesitaré instalar.
Nota: Idealmente, me gustaría poder ejecutar esto tanto en Windows como en Linux, pero con un solo empujón Linux solo lo hará.
Gracias por adelantado.
Ricardo.
Editar: pyPDF y ReportLab se ven bien, pero ninguno me permite editar un PDF existente, ¿hay alguna otra opción?
¿Has probado pyPdf ?
Lo sentimos, no tiene la capacidad de modificar el contenido de una página.
Aprovechando la answer anterior, los siguientes trabajos en Python 2.7.13:
from PyPDF2 import PdfFileWriter, PdfFileReader, PdfFileMerger
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(290, 720, "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("original.pdf")
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 = open("destination.pdf", "wb")
output.write(outputStream)
outputStream.close()
Puede tener más suerte dividiendo el problema en convertir PDF en un formato editable, escribiendo sus cambios, y luego convirtiéndolo de nuevo en PDF. No conozco una biblioteca que le permita editar PDF directamente, pero hay muchos convertidores entre DOC y PDF, por ejemplo.
Sé que esta es una publicación más antigua, pero pasé un largo tiempo tratando de encontrar una solución. Encontré una decente usando ReportLab y PyPDF, así que pensé en compartir:
- lea su PDF usando PdfFileReader (), llamaremos esta entrada
- cree un nuevo pdf que contenga su texto para agregar usando ReportLab, guárdelo como un objeto de cadena
- lee el objeto de cadena usando PdfFileReader (), llamaremos a este texto
- crear un nuevo objeto PDF usando PdfFileWriter (), llamaremos a esta salida
- iterar a través de la entrada y aplicar .mergePage ( texto .getPage (0)) para cada página a la que desee agregar el texto, luego use la salida .addPage () para agregar las páginas modificadas a un nuevo documento
Esto funciona bien para adiciones de texto simples. Vea la muestra de PyPDF para filmar un documento con marca de agua.
Aquí hay un código para responder la pregunta a continuación:
packet = StringIO.StringIO()
can = canvas.Canvas(packet, pagesize=letter)
<do something with canvas>
can.save()
packet.seek(0)
input = PdfFileReader(packet)
Desde aquí puede fusionar las páginas del archivo de entrada con otro documento
Si estás en Windows, esto podría funcionar:
También hay un documento técnico de un marco de creación y edición de PDF en Python. Está un poco anticuado, pero quizás pueda darte información útil:
cpdf hará el trabajo desde la línea de comandos. Sin embargo, no es python (afaik):
cpdf -add-text "Line of text" input.pdf -o output .pdf
pdfrw le permitirá leer en páginas de un PDF existente y dibujarlas en un lienzo de informe (similar al dibujo de una imagen). Hay ejemplos para esto en el subdirectorio pdfrw examples/rl1 en github. Descargo de responsabilidad: soy el autor pdfrw.