Python fpdf html to pdf

Python fpdf html to pdf

PyFPDF supports basic HTML, mainly intended to write reports from web frameworks.

It understands a limited subset of the HTML language, and it doesn’t support advanced features nor CSS (look below).

HTMLMixin could be used along with FPDF class to implement this functionality (see the example).

Parameters

Details

HTML tags and attributes supported:

  • H1 to H8: headings (align attribute)
  • P: paragraphs (align attributes)
  • B, I, U: bold, italic, underline
  • FONT: (face, size, color attributes)
  • CENTER for aligning
  • A: links (href attribute)
  • IMG: images (src, width, height attributes)
  • OL, UL, LI: ordered, unordered and list items (can be nested)
  • TABLE: (border, width attributes)
    • THEAD: header (opens each page)
    • TFOOT: footer (closes each page)
    • TBODY: actual rows
    • TR: rows (bgcolor attribute)
      • TH: highlight cells (align, bgcolor, width attributes)
      • TD: rows (align, bgcolor, width attributes)

      Note: Tables should have at least a first TH row with a width attribute.

      Example

      html = """ 

      html2fpdf

      Basic usage

      You can now easily print text mixing different styles : bold, italic, underlined, or all at once!You can also insert links on text, such as www.fpdf.org, or on an image: click on the logo.

      Sample List

      • option 1
        1. option 2
      • option 3
      Header 1header 2
      cell 1cell 2
      cell 2cell 3
      """ from pyfpdf import FPDF, HTMLMixin class MyFPDF(FPDF, HTMLMixin): pass pdf = MyFPDF() #First page pdf.add_page() pdf.write_html(html) pdf.output('html.pdf', 'F')

      See html.py or Web2Py for a complete example.

      Источник

      Создание PDF при помощи PyFPDF и Python

      ReportLab – это основной инструмент, который я использую для создания PDF с нуля. Однако, я заметил, что есть еще один — PyFPDF или FPDF для Python. Пакет PyFPDF – это порт «бесплатного» пакета PDF, который написан на PHP. Релиза этого проекта не было несколько лет, однако есть движения в его репозитории на Github, так что работа над проектом ведется. Пакет PyFPDF поддерживает Python 2.7 и Pyhton 3.4+.

      Есть вопросы по Python?

      На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!

      Telegram Чат & Канал

      Вступите в наш дружный чат по Python и начните общение с единомышленниками! Станьте частью большого сообщества!

      Одно из самых больших сообществ по Python в социальной сети ВК. Видео уроки и книги для вас!

      В данной статье не будет утомительных разборов пакета PyFPDF. Однако, мы раскроем более чем исчерпывающую информацию для эффективного использования. Обратите внимание на то, что существует небольшая книжечка «Python и PDF: pyFPDF» от Эдвуда Оказио на Leanpub, если вы захотите узнать больше о библиотеке, сверх той информации, которая указана в данной статье или документации пакета.

      Установка

      Установка PyFPDF – это просто, так как он подразумевает работу с pip. Установка проходит следующим образом:

      На момент написания, эта команда устанавливала версию 1.7.2 на Python 3.6 без каких-либо проблем. Во время установки вы увидите, что этот пакет не имеет зависимостей, что приятно.

      Базовое использование

      Теперь, когда у вас есть установленный PyFPDF, попробуем использовать его для создания простого файла PDF. Откройте ваш редактор Python и создайте новый файл под названием **simple_demo.py**. После этого, введите следующий код:

      Первый элемент, который нам нужно обсудить, это импорт. Здесь мы импортируем класс FPDF из пакета fpdf. Настройки по умолчанию этого класса создают PDF в режиме Portrait, используя миллиметры в качестве единицы измерения и размер страницы А4. Если вы хотите быть четче, вы можете вписать следующую строку установки:

      Я не фанат использования буквы «P», чтобы указать классу, какая это ориентация. Вы можете использовать «L», если предпочитаете пейзаж вместо портрета.

      Пакет PyFPDF поддерживает supports ‘pt’, ‘cm’ и ‘in’ в качестве альтернативных единиц измерения. Если обратиться к источнику, вы увидите, что пакет PyFPDF поддерживает только следующие размеры страниц:

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

      В любом случае, следующий шаг – это создание страницы при помощи метода add_page. Далее, мы указываем шрифт при помощи метода set_font. Вы увидите, что мы передаем родительское наименование шрифта и размер, которые нам нужны. Вы также можете настроить стиль шрифта при помощи аргумента style. Если вы хотите сделать это, помните, что для этого нужна строка, такая как «В» для жирного шрифта, или «Bl» для полужирного.

      Далее, мы создаем клетку, шириной 200 миллиметров и 10 миллиметров в высоту. Клетка, по большому счету, плавающая, и содержит текст, к ней можно подключить границы. Она разделяется автоматически, если включен автоматический разрыв страницы, так что клетка перейдет за границу страницы. Параметр txt – это текст, который вам нужно ввести в PDF. Параметр In указывает PyFPDF, что нужно добавить разрыв строки, если он указан как 1, что мы и делаем в нашей статье. Наконец, мы можем установить выравнивание текста по ширине (по умолчания), или по центру («С»). Здесь мы выбираем второй вариант.

      Наконец, мы сохраняем документ на диск, вызывая метод output с путем к файлу, который мы хотим сохранить.
      После запуска кода, мой PDF выглядит следующим образом:

      Создание PDF при помощи PyFPDF и Python

      Давайте попробуем узнать побольше о работе PyFPDF со шрифтами.

      Работа со шрифтами

      PyFPDF содержит набор базовых шрифтов, старательно прописанных в класс FPDF:

      Источник

      A guide to generate PDFs in Python

      Python became essential for everyday developer tasks; whether you work with Python, you will need to know how to code with Python.

      Python is used for automation, testing, web development, data analysis. On the other hand, HTML is the primary language of web development and web-based applications.

      One of the superpowers of Python is to deal with data in any format and generate and convert data to any other format. PDF is one of the portable formats that can be used to view data across devices and platforms independent of the device and operating system.

      In this article, We will talk about how to generate PDF using Python, and we will introduce multiple libraries like FPDF, Reportlab, Pyppeteer and Pdfkit and the difference between them.

      Libraries

      There are a lot of libraries on Python to deal with PDF; We will introduce some of the popular libraries that can be used easily to convert HTML files to PDF format.

      1. FPDF

      Free-PDF is a python library Ported from PHP to generate PDF. It provides various functionalities to generate pdf, like generating PDFs from text files and writing your data formats to generate PDFs.

      While FPDF supports HTML, it only understands the basic functionalities and doesn’t understand CSS. That’s why you need to use HTMLMixin as it helps FPDF to understand the advanced features of the HTML.
      You can install FPDF with pip using the following command.

      from fpdf import FPDF, HTMLMixin # creating a class inherited from both FPDF and HTMLMixin class MyFPDF(FPDF, HTMLMixin): pass # instantiating the class pdf = MyFPDF() # adding a page pdf.add_page() # opening html file file = open("file.html", "r") # extracting the data from hte file as a string Data = file.read() # HTMLMixin write_html method pdf.write_html(data) #saving the file as a pdf pdf.output('Python_fpdf.pdf', 'F')

      The previous example takes a file anime file.html and converts it into a PDF file name Python_fpdf.pdf with the help of the HTMLMixin library.

      You can find more about FPDF here

      2. Reportlab

      Reportlab is a python library that helps you to create PDF.it has its opensource version and a commercial version, and the difference is that the commercial version supports a Report Markup Language (RML)both provide you with the following features:

      • Supports dynamic web PDF generation
      • Supports converting XML into PDF
      • Support vector graphics and inclusion of other PDF files
      • Support the creation of time charts and tables

      you can install it using the following command:

      Reportlab is a very complex tool with a lot of capability to create your format and style for PDF. The simplest example can be like the following:

      from reportlab.pdfgen import canvas c = canvas.Canvas("reportlab_pdf.pdf") c.drawString(100,100,"Hello World") c.showPage() c.save()

      You can find more info about reportlab here

      3. Pyppeteer

      We talked before about Puppeteer in Generate a PDF with JavaScript Article and how it is a tool to automate the browser. Pyppeteer is an unofficial port of the automation library provided by the chrome browser.

      Main differences between Puppeteer and Pyppeteer

      • Pyppeteer accepts both the dictionary input parameters and keyword arguments
      • Python is not using $ in the method names
      • Page.evaluate() and Page.querySelectorEval() may fail and require you to add a “` force_expr=True“` option to force input strings as an expression

      Install it using the following command:

      import asyncio from pyppeteer import launch #defining an async method async def main(): # launching browser session browser = await launch( ) # opening a new page page = await browser.newPage() # go to a specific address or file await page.goto(file: path\_to\_html_file.html') #create a screen shot from the page await page.screenshot() # save the screenshot as a pdf await page.pdf() #close the browser await browser.close() # invocation of the Async main function asyncio.get_event_loop().run_until_complete(main())

      You can read more about Pyppeteer here

      4. Python-Wkhtmltopdf

      wkhtmltopdf is a widely used command-line tool used to generate PDF from HTML URLs; Python-Wkhtmltopdf is a wrapper for this command-line tool to be used in Python.you can install it using the following command

      pip install py3-wkhtmltopdf==0.4.1

      The usage is simple; you need to import the library and provide wkhtmltopdf API with the URL and the path for the output file.

      from wkhtmltopdf import wkhtmltopdf wkhtmltopdf(url='apitemplate.io', output_file='wkhtmltopdf.pdf')

      You can find more information here

      5. Pdfkit

      A wrapper for the wkhtmltopdf makes it very easy to generate PDF from various formats like files, strings, and URLs.You can install it using the following command:

      Pdfkit supports features like:

      • Vector graphics
      • Text features like wrapping, aligning and bullet lists
      • PNG and JPEG Image embedding
      • Annotation features like Highlights and underlines
      • PDF security like encryption

      An example of the generation of a PDF from a file is:

      #importing pdfkit import pdfkit # calling the from file method to convert file to pdf pdfkit.from_file('file.html', 'file.pdf')

      It also supports generating pdfs from links by calling the from_url method.

      pdfkit.from_url('https://apitemplate.io/', python.pdf')

      you can also specify the setting of the page and font like the following:

      options = < 'page-size': 'A4', 'margin-top': '0.75in', 'margin-right': '0.75in', 'margin-bottom': '0.75in', 'margin-left': '0.75in', 'encoding': "UTF-8", 'custom-header': [ ('Accept-Encoding', 'gzip') ], 'cookie': [ ('cookie-empty-value', '""') ('cookie-name1', 'cookie-value1'), ('cookie-name2', 'cookie-value2'), ], 'no-outline': None >pdfkit.from_file('file.html', 'file.pdf', options=options)

      You can learn more about pdfkit from here

      Comparison

      So we have a lot of options to choose from. The only question remains which one is more suitable for me. I would say it depends on your application and what you actually need to do. For example, if you want to build a PDF from scratch, or you just want to convert HTML into a PDF, or you want to fill a particular template and convert it into a specific format.

      So if you want to convert HTML into PDF, I believe PDFKit, FPDF, and Wkhtmltopdf are the best options you have. But PDFkit is the more popular one of them. On the other hand, if you want to render PDFs, your options are Pyppeteer and Reportlab.

      Reportlab advantage is that it supports a wide variety of graphs like line plots and bar charts and can embed images. On the other hand, it doesn’t provide a method for creating a footer and footnotes and can embed only JPEG images, but with the right python extension, you can extend this to 30 more formats. Reportlab is also more difficult for beginner users and more comprehensive.

      On the other hand, Pyppeteer provides better rendering and is easier if you are familiar with its javascript version but only supports specific browsers like chrome and chromium that must be available on your machine to work with this tool.

      Conclusion

      This article talked about five of the most popular python libraries for generating PDFs.

      We had a brief introduction to some of the tools/ libraries like FPDF, wkHTMLToPdf, Pyppeteer, ReportLab, and PDFKit. We also compared them in different properties like complexity, size of generated files, resolution, and Features.
      Finally, if you want to have a tool with all the features of these libraries and more, in that case, I recommend that you check out APITemplate.io, which is a tool that can help you generate PDF quickly with PDF generating API over the cloud and totally compatible with CSS, JavaScript, and Python. It also comes with predefined templates which you can reuse and edit.

      Источник

      Читайте также:  Python setup py development
Оцените статью