Как создать PDF файлы в Python

Я работаю над проектом, который принимает некоторые изображения от пользователя, а затем создает PDF файл, содержащий все эти изображения.

Есть ли способ или какой-либо инструмент для этого в Python? Например. для создания файла PDF (или eps, ps) из image1 + image 2 + image 3 → PDF файл?

Ответ 1

Я предлагаю pyPdf. Он работает очень хорошо. Я также написал сообщение в блоге некоторое время назад, вы можете найти его здесь.

Ответ 2

Вот мой опыт после подсказок на этой странице.

  • pyPDF не может вставлять изображения в файлы. Он может расколоться и слить. (Источник: Ctrl + F через страницу документации) Это здорово, но нет, если у вас есть изображения, которые еще не встроены в PDF.

  • pyPDF2, похоже, нет никакой дополнительной документации поверх pyPDF.

  • ReportLab очень обширен. (Userguide) Однако, с небольшим количеством Ctrl + F и grepping через его источник, я получил следующее:

    • Сначала загрузите установщик Windows и источник
    • Затем попробуйте это в командной строке Python:

      from reportlab.pdfgen import canvas
      from reportlab.lib.units import inch, cm
      c = canvas.Canvas('ex.pdf')
      c.drawImage('ar.jpg', 0, 0, 10*cm, 10*cm)
      c.showPage()
      c.save()
      

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

ReportLab велик, но выиграет от включения в него документации helloworld, как показано выше.

Ответ 3

Я предлагаю Pdfkit. (руководство по установке guide)

Он создает PDF из HTML файлов. Я выбрал его для создания PDF в 2 шага из моего стека Python Pyramid:

  1. Рендеринг на стороне сервера с мако-шаблонами со стилем и разметкой, которые вы хотите для вас pdf-документ
  2. Выполнение метода pdfkit.from_string(...) путем передачи рендеринга HTML в качестве параметра

Таким образом, вы получите документ в формате PDF с поддержкой стилей и изображений.

Вы можете установить его следующим образом:

  • используя пункт

    pip install pdfkit

  • Вам также необходимо установить wkhtmltopdf (в Ubuntu).

Ответ 4

Вы можете попробовать this (Python-for-PDF-Generation) или вы можете попробовать PyQt, который поддерживает печать в формате pdf.

Python для создания PDF

Формат Portable Document Format (PDF) позволяет создавать документы, которые выглядят одинаково на каждой платформе. Иногда документ PDF нужно генерировать динамически, и это может быть довольно сложной задачей. К счастью, есть библиотеки, которые могут помочь. В этой статье рассматривается один из них для Python.

Подробнее на http://www.devshed.com/c/a/Python/Python-for-PDF-Generation/#whoCFCPh3TAks368.99

Ответ 5

Я сделал это довольно много в PyQt, и он работает очень хорошо. Qt имеет обширную поддержку изображений, шрифтов, стилей и т.д., И все они могут быть записаны в pdf-документы.

Ответ 6

Я считаю, что matplotlib имеет возможность сериализовать графику, текст и другие объекты в pdf-документе.

Ответ 7

Я использую rst2pdf для создания PDF файла, так как я больше знаком с RST, чем с HTML. Он поддерживает встраивание практически любого вида растровых или векторных изображений.

Для этого требуется reportlab, но я обнаружил, что reportlab не так прост в использовании (по крайней мере, для меня).

Ответ 8

fpdf - это питон (тоже). И часто используется. См. Поиск PyPI/pip. Но, возможно, он был переименован из pyfpdf в fpdf. Из особенностей: Поддержка PNG, GIF и JPG (включая прозрачность и альфа-канал)

Ответ 9

Вот решение, которое работает только с стандартными пакетами. matplotlib имеет PDF файл для сохранения цифр в PDF. Вы можете создавать фигуры с подзаголовками, где каждый подзаголовок является одним из ваших изображений. У вас есть полная свобода возиться с фигурой: добавление заголовков, игра с позицией и т.д. Как только ваша фигура будет выполнена, сохраните ее в формате PDF. Каждый вызов savefig создает другую страницу PDF.

Пример ниже показывает 2 изображения бок о бок, на странице 1 и стр. 2.

from matplotlib.backends.backend_pdf import PdfPages
import matplotlib.pyplot as plt
from scipy.misc import imread
import os
import numpy as np

files = [ "Column0_Line16.jpg", "Column0_Line47.jpg" ]
def plotImage(f):
    folder = "C:/temp/"
    im = imread(os.path.join(folder, f)).astype(np.float32) / 255
    plt.imshow(im)
    a = plt.gca()
    a.get_xaxis().set_visible(False) # We don't need axis ticks
    a.get_yaxis().set_visible(False)

pp = PdfPages("c:/temp/page1.pdf")
plt.subplot(121)
plotImage(files[0])
plt.subplot(122)
plotImage(files[1])
pp.savefig(plt.gcf()) # This generates page 1
pp.savefig(plt.gcf()) # This generates page 2
pp.close()

Ответ 11

Это зависит от того, в каком формате находятся ваши файлы изображений, но для проекта здесь на работе я использовал инструмент tiff2pdf в LibTIFF из RemoteSensing.org. В основном используется только подпроцесс для вызова tiff2pdf.exe с соответствующим аргументом, чтобы прочитать тип tiff, который у меня был, и вывести вид pdf, который я хотел. Если они не являются tiffs, вы можете преобразовать их в tiffs с помощью PIL или, возможно, найти инструмент, более специфичный для вашего типа изображения (или более общий, если изображения будут разнообразными), например ReportLab, упомянутых выше.

Ответ 12

rinohtype поддерживает встраивание PDF, PNG и изображений JPEG (изначально) и других форматов растровых изображений (при установке Pillow).

(Полное раскрытие: я являюсь автором rinohtype)

Ответ 13

Если вы знакомы с LaTex, вы можете рассмотреть вопрос о pylatex

Одним из преимуществ pylatex является то, что легко контролировать качество изображения. Изображения в вашем pdf будут того же качества, что и исходные изображения. При использовании reportlab я обнаружил, что изображения автоматически сжимаются, а качество изображения снижается.

Недостаток pylatex заключается в том, что, поскольку он основан на LaTex, может быть трудно разместить изображения именно там, где вы хотите на странице. Однако я обнаружил, что использование аргумента position в классе Figure, а иногда и в Subfigure дает достаточно хорошие результаты.

Пример кода для создания PDF файла с одним изображением:

from pylatex import Document, Figure

doc = Document(documentclass="article")
with doc.create(Figure(position='p')) as fig:
fig.add_image('Lenna.png')

doc.generate_pdf('test', compiler='latexmk', compiler_args=["-pdf", "-pdflatex=pdflatex"], clean_tex=True)

Помимо установки pylatex (pip install pylatex), вам необходимо установить LaTex. Для Ubuntu и других систем Debian вы можете запустить sudo apt-get install texlive-full. Если вы используете Windows, я бы порекомендовал MixTex

Ответ 14

fpdf хорошо работает для меня. Гораздо проще, чем ReportLab и действительно бесплатно. Работает с UTF-8.