it-swarm.com.ru

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

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

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

156
Stephen T.

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

41
Geo

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

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

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

  3. ReportLab очень обширный. ( Руководство пользователя ) Однако, с небольшим количеством Ctrl + F и просмотром его источника, я получил это:

    • Во-первых, скачать установщик 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 - это здорово, но было бы полезно включить helloworlds, подобные приведенным выше, в свою документацию.

137
Evgeni Sergeev

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

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

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

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

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

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

    pip install pdfkit

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

Вы можете попробовать 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

14
gruszczy

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

6
Allen

Вот решение, которое работает только со стандартными пакетами. 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()
5
Anton Schwaighofer

Я считаю, что Matplotlib имеет возможность сериализации графики, текста и других объектов в PDF-документ.

5
Andrea

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

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

5
ismailsunni

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

4
mirek

Вы можете попробовать xhtml2pdf http://flask.pocoo.org/snippets/68/

1
zeroc00l

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

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

1
Brecht Machiels

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

1
Tofystedeth

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

0
mfs

Если вы знакомы с 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

0
Chepe