Як створити PDF-файли в Python [закрито]


156

Я працюю над проектом, який знімає зображення у користувача, а потім створює PDF-файл, який містить усі ці зображення.

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


47
Якщо ви сумніваєтесь, py
вставте

8
Ще один пошуковий трюк: [language or tag] some_keyword як у [python] PDFабо[python] PDF image
mvv

Для тих , хто прибуває сюди з допомогою matplolib: stackoverflow.com/questions/17788685 / ...
Девід Parks

Я спростував це питання, оскільки прийнята відповідь - це неправильна відповідь ....
boatcoder

Відповіді:


39

Пропоную pyPdf . Це працює дуже добре. Я також писав щоденник в блозі, але ви можете знайти його тут .


7
Струм вилка PyPDF2 знаходиться тут .
Едмонд Бернетт

98
Зверніть увагу, що файл pypdf розрізає / вставляє / тощо. Наявний вміст PDF - ви не можете додавати текст чи зображення до PDF.
drevicko

3
pyPDF2 не призначений для створення нових PDF-документів, 4cs
michelek

160

Ось мій досвід після дотримання підказок на цій сторінці.

  1. pyPDF не може вставляти зображення у файли. Він може лише розколотися і злитися. (Джерело: Ctrl + F через сторінку документації ) Що чудово, але ні, якщо у вас є зображення, які вже не вбудовані в PDF.

  2. Здається, що pyPDF2 не має додаткової документації поверх pyPDF.

  3. ReportLab дуже великий. ( Userguide ) Однак, маючи трохи 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, як зазначено вище, у свою документацію.


13
Треба сказати, що репортаж - найкращий для покоління PDF, який я спробував, безумовно, найповніший. Однак це також трохи складніше. blog.pythonlibrary.org/2010/03/08/… blog.pythonlibrary.org/2010/09/21/…
Хосе

1
Це саме те, що я шукав
Maarten

@JoseSalvatierra Спасибі Хосе ... це дуже просто. Дякуємо за посилання на блог.
Arindam Roychowdhury

33

Пропоную Pdfkit . ( керівництво по установці )

Він створює pdf з html-файлів. Я вибрав це, щоб створити pdf за 2 етапи зі свого стека Python Pyramid:

  1. Візуалізація на стороні сервера з шаблонами mako із потрібним стилем та розміткою для вашого PDF-документа
  2. pdfkit.from_string(...)Метод виконання , передаючи виведений html як параметр

Таким чином ви отримуєте PDF-документ із підтримкою стилізації та зображень.

Ви можете встановити його наступним чином:

  • за допомогою піп

    pip install pdfkit

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

14

Ви можете спробувати це (Python-for-PDF-Generation) або спробувати PyQt , який підтримує друк на pdf.

Python for Generation PDF

Формат портативного документа (PDF) дозволяє створювати документи, які виглядають абсолютно однаково на кожній платформі. Іноді документ PDF повинен генеруватися динамічно, але це може бути досить складною проблемою. На щастя, є бібліотеки, які можуть допомогти. У цій статті розглядається одна з таких для Python.

Детальніше читайте на http://www.devshed.com/c/a/Python/Python-for-PDF-Generation/#whoCFCPh3TAks368.99


Посилання більше не працює.
Роберт Кох

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()

в моєму тесті код генерує одну сторінку з 2 зображеннями
конструктор

оновлену версію коду можна знайти в github.com/constructor-igor/TechSugar/blob/master/pythonSamples/…
конструктор

7

Я зробив це досить багато в PyQt, і це працює дуже добре. Qt має широку підтримку зображень, шрифтів, стилів тощо, і все це можна виписати в PDF-документи.


1
Ого, Qt виглядає дивовижно. Кажуть, вони підтримують 15 платформ, в т.ч. Windows, Mac OS X, Linux, Android, iOS, Windows RT та ці операційні системи в режимі реального часу - INTEGRITY QNX VxWorks qt.io/qt-framework . І, оскільки я фанат пітона, мені подобається, що "PyQt поєднує всі переваги Qt і Python. Програміст володіє всією силою Qt, але вміє використовувати це простотою Python." Riverbankcomputing.co.uk / софт / pyqt / intro
AnneTheAgile

7

Я вважаю, що matplotlib має можливість серіалізувати графіку, текст та інші об'єкти до PDF-документа.


Так, ти можеш. Ця відповідь ТА має кілька хороших посилань на те, як це зробити.
drevicko

7

fpdf - пітон (теж). І часто використовується. Див. Пошук PyPI / pip. Але, можливо, він був перейменований з pyfpdf в fpdf. З особливостей: підтримка PNG, GIF та JPG (включаючи прозорість та альфа-канал)


1
Ваша відповідь незрозуміла, але, безумовно, PyFPDF pfoject pyfpdf.readthedocs.io/en/latest
Войцех Качмарек,

Вся плутанина в називанні справді шкода. Ця відповідь та коментар @WojciechKaczmarek дійсно заслуговують на більшу кількість прихильників та уваги. PyFPDF - порт пітона часто використовуваної бібліотеки PDF, спочатку написаний на PHP.
Ідеограма

6

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

Для цього потрібен reportlab , але я виявив, що reportlab не настільки прямий для використання (принаймні для мене).



3

Це залежить від того, в якому форматі перебувають ваші файли зображень, але для проекту тут на роботі я використовував інструмент tiff2pdf в LibTIFF від RemoteSensing.org . В основному просто використовується підпроцес для виклику tiff2pdf.exe з відповідним аргументом, щоб прочитати тип тифу, який я мав, і вивести тип PDF, який я хотів. Якщо вони не є тиффами, ви, ймовірно, можете перетворити їх у тиффи за допомогою PIL або, можливо, знайти інструмент, більш конкретний для вашого типу зображення (або більш загальний, якщо зображення будуть різноманітними), як згаданий вище ReportLab.


3

fpdf добре працює для мене. Набагато простіше, ніж ReportLab і дійсно безкоштовно. Працює з UTF-8.


2
Посилання / опис: fpdf.org FPDF - це клас PHP, який дозволяє генерувати PDF-файли з чистим PHP, тобто без використання бібліотеки PDFlib. F від FPDF розшифровується як безкоштовно: ви можете використовувати його для будь-якого використання та змінювати його відповідно до ваших потреб. FPDF має й інші переваги: ​​функції високого рівня. Ось перелік його основних особливостей: Вибір одиниці вимірювання, формат сторінки та поля, управління заголовком сторінки та колонтитулом, Автоматичний розрив сторінки, Автоматичний розрив рядків та виправдання тексту, Підтримка зображень (JPEG, PNG та GIF), Кольори, Посилання, TrueType, Type1 та підтримка кодування, Стиснення сторінки
AnneTheAgile

12
Не надто актуально, враховуючи питання про Python, а не про PHP
KingRadical,

1
чому все це забороняє? fpdf також доступний для python. pip install fpdf працює
користувач1981924

1
fpdf, можливо, почався з php. Але є пітонський порт, який працює дуже добре. Тому я вважаю, що це дуже відповідна відповідь, яка заслуговує більше голосів, ніж голосів. (Я не впевнений у ситуації, коли ця відповідь була спочатку розміщена)
Сумуду

3

rinohtype підтримує вбудовування зображень у форматі PDF, PNG та JPEG (в основному) та інших растрових форматах (коли встановлено Подушка).

(Повне розкриття: я автор ринотипу)


1
Гей! Виправте мене, якщо я помиляюся, але здається, що це досить потужний інструмент, і на відміну від багатьох, багато інших, перелічених тут, не є обгорткою python для стародавньої бібліотеки php / ruby ​​/ perl / pyqt4 / інших лайно.
Mikaelblomkvistsson

3

Якщо ви знайомі з LaTex, ви можете розглянути питання про пілатекс

Однією з переваг пілатексу є те, що він легко контролює якість зображення. Зображення у вашому PDF-файлі матимуть таку ж якість, що й оригінальні зображення. Під час використання звіту про перевірку я помітив, що зображення автоматично стискаються, а якість зображення знижується.

Недоліком пілатексу є те, що, оскільки він заснований на LaTex, зображення може бути важко розмістити саме там, де ви хочете, на сторінці. Однак я виявив, що використання аргументу позиції в класі рисунку, а іноді і підфігури, дає досить хороші результати.

Приклад коду для створення 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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.