Creando y escribiendo en un archivo pdf en Python

¿Por qué no funciona esto?

with open('file.pdf', 'w') as outfile: outfile.write("Hello") 

El código funciona bien, pero el archivo .pdf no se puede abrir. ¿Cuál es la diferencia entre un archivo de texto normal y un pdf? ¿Qué hacer si quiero crear y escribir en un archivo pdf en python?

Podrías instalar la librería fpdf y luego:

 from fpdf import FPDF pdf = FPDF() pdf.add_page() pdf.set_xy(0, 0) pdf.set_font('arial', 'B', 13.0) pdf.cell(ln=0, h=5.0, align='L', w=0, txt="Hello", border=0) pdf.output('test.pdf', 'F') 

¿Cuál es la diferencia entre un archivo de texto normal y un pdf?

Un archivo PDF tiene un formato específico. Puedes leer más aquí . Un texto es un archivo mucho más simple, por lo tanto, cuando intenta abrir un archivo que cree que es un PDF, pero no tiene este formato, no se puede abrir el archivo.

¿Qué hacer si quiero crear y escribir en un archivo pdf en python?

Debe utilizar un módulo, como PyPDF2 , Reportlab o FPDF . Por otra parte leer la biblioteca de PDF de Python .

Cada tipo de archivo tiene su propio formato interno, un conjunto de reglas sobre qué debe ir donde definir la información que debe representar. Por lo general, la extensión del archivo (‘.pdf’ en este caso) está configurada para indicarle qué formato interno utiliza un archivo, pero no existe una garantía absoluta de ello.

Si escribe una cadena en un archivo con Python, el archivo tendrá exactamente lo que usted puso, en este caso solo los cinco caracteres ASCII H, e, l, l yo. Eso correspondería al formato normal para un archivo de texto. Entonces, en este caso, ha creado un archivo de texto pero ha puesto una extensión ‘.pdf’ en él. Su formato interno sigue siendo un archivo de texto, y si lo cambia a ‘file.txt’, encontrará que puede abrirlo bien (con un editor de texto).

Si desea crear un archivo PDF verdadero (algo con el formato interno correcto para un PDF), deberá usar un paquete especializado que pueda escribir ese tipo de archivo. @gsamaras y @ rasmus-lyngdal-christensen dieron algunas buenas sugerencias (Reportlab, PyPDF2 y fpdf).