En este artículo, aprenderemos cómo crear archivos PDF en Python. Un módulo muy famoso llamado pypdf2 se usa para modificar y leer archivos PDF existentes, pero su principal desventaja es que no puede crear nuevos archivos PDF. Así que hoy queremos aprender sobre otro módulo de python llamado reportlab que nos ayuda a crear nuevos archivos pdf y editar el contenido de nuestro corazón en él.
Módulo requerido:
Reportlab: este módulo se utiliza para manejar archivos PDF.
pip install reportlab
Enfoque paso a paso:
Paso 1:
Empezamos importando los módulos y las clases. Canvas se usa para dibujar cosas en el pdf, ttfonts y pdfmetrics nos ayudarán a usar fuentes TTF personalizadas en el pdf, y los colores nos ayudarán a elegir colores fácilmente sin recordar sus valores hexadecimales.
Python3
# importing modules from reportlab.pdfgen import canvas from reportlab.pdfbase.ttfonts import TTFont from reportlab.pdfbase import pdfmetrics from reportlab.lib import colors
Paso 2:
A continuación, inicializamos todas las cosas que escribiríamos y dibujaríamos en el documento en variables específicas para llamarlas fácilmente cuando sea necesario.
Python3
# initializing variables with values fileName = 'sample.pdf' documentTitle = 'sample' title = 'Technology' subTitle = 'The largest thing now!!' textLines = [ 'Technology makes us aware of', 'the world around us.', ] image = 'image.jpg'
Paso 3:
A continuación, inicializamos un objeto de lienzo con el nombre del pdf y configuramos el título para que sea documentTitle.
Python3
# creating a pdf object pdf = canvas.Canvas(fileName) # setting the title of the document pdf.setTitle(documentTitle)
Paso 4:
A continuación, registramos nuestra fuente externa en las fuentes de reportlab usando pdfmetrics y TTFont y le asignamos un nombre. A continuación, configuramos la nueva fuente con un tamaño. Luego, dibujamos la string en el pdf usando la función drawCentredString que toma los valores x e y como el centro del texto escrito y la izquierda, derecha, arriba y abajo del texto se ajustan en consecuencia. Tenga en cuenta que necesitamos que el archivo TTF esté presente en la carpeta para ejecutar los comandos.
Python3
# registering a external font in python pdfmetrics.registerFont( TTFont('abc', 'SakBunderan.ttf') ) # creating the title by setting it's font # and putting it on the canvas pdf.setFont('abc', 36) pdf.drawCentredString(300, 770, title)
Paso 5:
A continuación, para el subtítulo, hacemos lo mismo excepto que esta vez el color del subtítulo es azul, y esta vez usamos una fuente estándar que se envía de forma nativa con reportlab.
Python3
# creating the subtitle by setting it's font, # colour and putting it on the canvas pdf.setFillColorRGB(0, 0, 255) pdf.setFont("Courier-Bold", 24) pdf.drawCentredString(290, 720, subTitle)
Paso 6:
A continuación, dibujamos una línea y luego ingresamos varias líneas de texto que definimos anteriormente dentro de una lista. La primera línea define la posición inicial x e y del texto. Las siguientes dos líneas establecen la fuente, el tamaño de fuente y el color de fuente del texto. Las siguientes dos líneas atraviesan cada elemento de la lista y lo agregan como una línea al texto. La última línea dibuja el texto en la pantalla.
Python3
# drawing a line pdf.line(30, 710, 550, 710) # creating a multiline text using # textline and for loop text = pdf.beginText(40, 680) text.setFont("Courier", 18) text.setFillColor(colors.red) for line in textLines: text.textLine(line) pdf.drawText(text)
Paso 7:
Por último, dibujamos una imagen en el pdf usando la función drawInlineImage en la que los parámetros son la ruta de la imagen y las coordenadas x e y de la imagen. En este caso, la imagen estaba en el mismo directorio que el archivo py, por lo que de acuerdo con la ruta relativa, necesitamos escribir solo el nombre del archivo con la extensión, si estaba en algún otro directorio, una ruta relativa correcta relevante debería ser usado.
Python3
# drawing a image at the # specified (x.y) position pdf.drawInlineImage(image, 130, 400) # saving the pdf pdf.save()
A continuación el programa completo:
Python3
# importing modules from reportlab.pdfgen import canvas from reportlab.pdfbase.ttfonts import TTFont from reportlab.pdfbase import pdfmetrics from reportlab.lib import colors # initializing variables with values fileName = 'sample.pdf' documentTitle = 'sample' title = 'Technology' subTitle = 'The largest thing now!!' textLines = [ 'Technology makes us aware of', 'the world around us.', ] image = 'image.jpg' # creating a pdf object pdf = canvas.Canvas(fileName) # setting the title of the document pdf.setTitle(documentTitle) # registering a external font in python pdfmetrics.registerFont( TTFont('abc', 'SakBunderan.ttf') ) # creating the title by setting it's font # and putting it on the canvas pdf.setFont('abc', 36) pdf.drawCentredString(300, 770, title) # creating the subtitle by setting it's font, # colour and putting it on the canvas pdf.setFillColorRGB(0, 0, 255) pdf.setFont("Courier-Bold", 24) pdf.drawCentredString(290, 720, subTitle) # drawing a line pdf.line(30, 710, 550, 710) # creating a multiline text using # textline and for loop text = pdf.beginText(40, 680) text.setFont("Courier", 18) text.setFillColor(colors.red) for line in textLines: text.textLine(line) pdf.drawText(text) # drawing a image at the # specified (x.y) position pdf.drawInlineImage(image, 130, 400) # saving the pdf pdf.save()
Producción:
Publicación traducida automáticamente
Artículo escrito por saikatsahana91 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA