it-swarm.com.ru

Создание и запись в PDF-файл в Python

Почему это не работает: 

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

Код работает нормально, но файл .pdf открыть нельзя. В чем разница между обычным текстовым файлом и pdf?

9
John McIntyre Jr.

вы можете установить библиотеку fpdf и затем:

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')
14
Rasmus Lyngdal-Christensen

В чем разница между обычным текстовым файлом и pdf?

Файл PDF имеет определенный формат. Вы можете прочитать больше здесь . Текст - это гораздо более простой файл, поэтому, когда вы пытаетесь открыть файл, который you считает, что это PDF, но не имеет этого формата, файл открыть нельзя.

Что делать, если я хочу создать и записать в pdf файл на python?

Вам необходимо использовать модуль, например PyPDF2 , Reportlab или FPDF . Более того, читайте Python PDF library .

6
gsamaras

Каждый тип файла имеет свой внутренний формат - набор правил о том, что должно идти, где определять информацию, которую он должен представлять. Обычно расширение файла (в данном случае «.pdf») задает, какой внутренний формат используется в файле, но абсолютной гарантии этого нет. 

Если вы записываете строку в файл с помощью Python, файл будет содержать именно то, что вы вставили в него, в данном случае только пять ASCII символов H, e, l, l и o. Это будет соответствовать обычному формату для текстового файла. Таким образом, в этом случае вы создали текстовый файл, но добавили в него расширение «.pdf». Его внутренним форматом по-прежнему является текстовый файл, и если вы переименуете его в «file.txt», вы обнаружите, что можете просто открыть его (с помощью текстового редактора).

Если вы хотите создать настоящий PDF файл (что-то с правильным внутренним форматом для PDF), вам нужно будет использовать специализированный пакет, который может записать этот тип файла. @gsamaras и @ rasmus-lyngdal-christensen дали несколько хороших предложений (Reportlab, PyPDF2 и fpdf).

2
Matthias Fripp