Автор оригинала: Mike Driscoll.
Сегодня мы будем смотреть на простую библиотеку поколения PDF под названием PYFPDF , порт FPDF который является библиотекой PHP. Это не замена для REPORTLAB, но она дает вам более чем достаточно для создания простых PDF и может удовлетворить ваши потребности. Давайте посмотрим и посмотрим, что это может сделать!
Примечание: PYFPDF больше не поддерживается. Это было заменено на FPDF2.
Установка PYFPDF.
Вы можете просто использовать PIP, чтобы установить PYFPDF:
pip install pyfpdf
Принимая PYFPDF для тест-драйва
Как и в любой новой библиотеке, вам нужно на самом деле написать какой-то код, чтобы увидеть, как он работает. Вот один из самых простых сценариев, которые вы можете сделать, это создаст PDF:
import pyfpdf
pdf = pyfpdf.FPDF(format='letter')
pdf.add_page()
pdf.set_font("Arial", size=12)
pdf.cell(200, 10, txt="Welcome to Python!", align="C")
pdf.output("tutorial.pdf")
Обратите внимание, что, когда мы инициализируем наш объект FPDF, нам нужно сказать, что мы хотим, чтобы результат был «буквой» размером. Это по умолчанию для «A4». Далее нам нужно добавить страницу, установить шрифт и поместите текст в. pdf.cll Звонок был немного неразвим. Первые два аргумента ширина и высота и вид указывают местоположение текста, в котором вы проходите. выровнять Параметр принимает только однобуквенные сокращения, и вам придется посмотреть в источнике, чтобы понять их. В этом случае мы центрируем текст, передавая его «C». Последняя строка принимает два параметра: имя PDF и пункт назначения. Если нет места назначения, то PDF выводится в тот же каталог, в котором работает скрипт.
Что если вы хотите добавить другую строку? Ну, вы можете добавить больше текста до конца, если вы редактируете, насколько большой ячейки есть и просто создайте другую клетку. Если вам нужен перерыв линии, вы можете изменить код следующим:
import pyfpdf
pdf = pyfpdf.FPDF(format='letter')
pdf.add_page()
pdf.set_font("Arial", size=12)
pdf.cell(200, 10, txt="Welcome to Python!", ln=1, align="C")
pdf.cell(200,10,'Powered by FPDF',0,1,'C')
pdf.output("tutorial.pdf")
Который приводит к следующему PDF: Tutorial.pdf
Добавление Bling с заголовками, нижними колонтитулами и сломанами страницы
Учебник, который включен на сайт Google Google PYFPDF, показывает, как делать заголовки, колонтитулы и разрывы страниц. Он не работает из-за имени метода, который должен был измениться, и код написан с использованием «это» вместо «я», поэтому я переписал его и немного убрал его. Вот код:
import pyfpdf
########################################################################
class MyPDF(pyfpdf.FPDF):
""""""
#----------------------------------------------------------------------
def header(self):
"""
Header on each page
"""
# insert my logo
self.image("logo.png", x=10, y=8, w=23)
# position logo on the right
self.cell(w=80)
# set the font for the header, B=Bold
self.set_font("Arial", style="B", size=15)
# page title
self.cell(40,10, "Python Rules!", border=1, ln=0, align="C")
# insert a line break of 20 pixels
self.ln(20)
#----------------------------------------------------------------------
def footer(self):
"""
Footer on each page
"""
# position footer at 15mm from the bottom
self.set_y(-15)
# set the font, I=italic
self.set_font("Arial", style="I", size=8)
# display the page number and center it
pageNum = "Page %s/{nb}" % self.page_no()
self.cell(0, 10, pageNum, align="C")
#----------------------------------------------------------------------
if __name__ == "__main__":
pdf = MyPDF()
pdf.alias_nb_pages()
pdf.add_page()
pdf.set_font("Times", size=12)
# put some lines on the page
for i in range(1, 50):
pdf.cell(0, 10, "Line number %s" % i, border=0, ln=1)
pdf.output("tutorial2.pdf")
Который создает следующее PDF: Tutorial2.pdf
На этот раз мы создаем подкласс FPDF и переопределить его Заголовок и нижний колонтитул Методы, поскольку они на самом деле все равно ничего не делают (то есть они заглушки). В нашем заголовке мы создаем объект изображения и пропустите в файле логотипа, а также местоположение X/Y и ширину (23) логотипа. Вы также можете пройти высоту, если вы заботитесь о том, чтобы сохранить соотношение сторон соотношения. Затем мы устанавливаем его и вставьте строку текста для заголовка. Наконец, мы положили в разрыв линии.
Нижний колонтитул настроен на 15 мм от дна. Это также в 8PT Arial Italic. Ошибка в официальном руководстве заключается в том, что она называет Self.Pageno (), но это не существует. Однако есть Page_no Метод, который, кажется, заменит его, поэтому я использовал это. Затем в нижней части скрипта мы фактически создаем наш объект PDF и скажу, чтобы написать кучу строк. Если вы запускаете этот скрипт, вы должны получить 3-страничный документ.
Использование PYFPDF для генерации PDF из HTML
Один из моих Читатели Указал, что PYFPDF также может генерировать PDF из базового HTML. Я не знаю, как я пропустил это, но это правда! Ты можешь! Вы можете прочитать об этом на проекте Вики Отказ Я воспроизводлю слегка измененный пример ниже:
html = """
Базовое использование
Теперь вы можете легко печатать текст во время смешивания различных стилей: смелый , Италический , подчеркнул или все сразу ! Вы также можете вставить гиперссылки, как этот www.mousevspython.comg или включите гиперссылку на изображении. Просто нажмите на один ниже.
Образец списка
- Опция 1
- Вариант 2.
- Вариант 3.
Заголовок 1 Головки 2.
ячейка 1Cell 2.
ячейка 2Cell 3.
“” “от Pyfpdf Import FPDF, HTMLMIXIN Class MyFPDF (FPDF, HTMLMIXIN): Pass () #first Страница pdf.add_page () pdf.write_html (html) pdf.output (‘html.pdf’, ‘f’)
Который создаст следующий PDF: HTML.PDF
Обертывание
На своем веб-сайте есть еще один учебник, который разговаривает о цветах и разрывах линии, но я оставлю это для вас, чтобы сделать как упражнение. Я ничего не видел здесь о рисунке, вставке таблиц или графиков, настраиваемых настраиваемых шрифтов или многие другие функции, которые доступны в ReportLab, но затем снова это должно быть простой библиотекой генерации PDF. Если вам нужны более продвинутые функции, то вы, безусловно, должны посмотреть на REPORTLAB или даже некоторые из Offshoot Projects, которые основаны на нем (RST2PDF или XHTML2PDF).
Дальнейшее чтение
- Официальный Учебник PYFPDF
- PYFPDF справочное руководство
Исходный код
- pyfpdf_examples.zip