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

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

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

13 ответов


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


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

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

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

  3. 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 велик,но выиграет от включения helloworlds, как указано выше, в его документации.


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

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

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

таким образом вы получаете pdf-документ со стилем и изображениями поддерживаемый.

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

  • использование pip

    pip install pdfkit

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

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

Python для генерации PDF

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

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


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


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


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

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


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


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

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


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


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

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


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