Skip to main content

wkhtmltopdf python wrapper 使用 webkit 渲染引擎和 qt 将 html 转换为 pdf

项目描述

捆绑-Python-PDFKit

这是与 wkhtmltopdf 捆绑在一起的 Python-PDFKit,因此您不必单独安装它。仅适用于 Gnu/Linux。仅在 Debian 上测试。WKHTMLtoPDF 安装在您的 virtualenv 中,因此它不会在系统范围内可用。

要更新 wkhtml 的版本... 在这个包中,运行bundle.sh脚本(更改版本

首先)。

Python-PDFKit:HTML 到 PDF 包装器

https://travis-ci.org/JazzCore/python-pdfkit.png?branch=master https://badge.fury.io/py/pdfkit.svg

wkhtmltopdf 实用程序的 Python 2 和 3 包装器,用于使用 Webkit 将 HTML 转换为 PDF。

这是ruby​​ PDFKit库的改编版本,非常感谢他们!

安装

  1. 安装 python-pdfkit:

    $ pip install bundled-pdfkit  (or pip3 for python3)
  2. 安装 wkhtmltopdf(不需要这样做):

  • Debian/Ubuntu:

    $ sudo apt-get install wkhtmltopdf
  • 苹果系统:

    $ brew install caskroom/cask/wkhtmltopdf

警告!debian/ubuntu repos 中的版本减少了功能(因为它在没有 wkhtmltopdf QT 补丁的情况下编译),例如添加大纲、页眉、页脚、TOC 等。要使用此选项,您应该从wkhtmltopdf站点安装静态二进制文件,或者您可以使用此脚本.

  • Windows 和其他选项:查看 wkhtmltopdf主页以获取二进制安装程序

用法

对于简单的任务:

import pdfkit

pdfkit.from_url('http://google.com', 'out.pdf')
pdfkit.from_file('test.html', 'out.pdf')
pdfkit.from_string('Hello!', 'out.pdf')

您可以传递包含多个 URL 或文件的列表:

pdfkit.from_url(['google.com', 'yandex.ru', 'engadget.com'], 'out.pdf')
pdfkit.from_file(['file1.html', 'file2.html'], 'out.pdf')

您也可以传递打开的文件:

with open('file.html') as f:
    pdfkit.from_file(f, 'out.pdf')

如果您希望进一步处理生成的 PDF,可以将其读取到变量中:

# Use False instead of output path to save pdf to a variable
pdf = pdfkit.from_url('http://google.com', False)

您可以指定所有 wkhtmltopdf选项。您可以在选项名称中删除“-”。如果选项没有值,请使用None、False''作为 dict 值:。对于可重复的选项(包括允许、cookie、自定义标题、发布、发布文件、运行脚本、替换),您可以使用列表或元组。对于需要多个值的选项(例如 –custom-header Authorization secret),我们可以使用 2 元组(参见下面的示例)。

options = {
    'page-size': 'Letter',
    '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-name1', 'cookie-value1'),
        ('cookie-name2', 'cookie-value2'),
    ],
    'no-outline': None
}

pdfkit.from_url('http://google.com', 'out.pdf', options=options)

默认情况下,PDFKit 将显示所有wkhtmltopdf输出。如果你不想要它,你需要通过quiet选项:

options = {
    'quiet': ''
    }

pdfkit.from_url('google.com', 'out.pdf', options=options)

由于 wkhtmltopdf 命令语法,必须单独指定TOCCover选项。如果在 TOC 之前需要覆盖,请使用cover_first选项:

toc = {
    'xsl-style-sheet': 'toc.xsl'
}

cover = 'cover.html'

pdfkit.from_file('file.html', options=options, toc=toc, cover=cover)
pdfkit.from_file('file.html', options=options, toc=toc, cover=cover, cover_first=True)

您可以在使用css选项转换文件或字符串时指定外部 CSS 文件。

警告这是wkhtmltopdf中此错误的解决方法。您应该先尝试--user-style-sheet选项。

# Single CSS file
css = 'example.css'
pdfkit.from_file('file.html', options=options, css=css)

# Multiple CSS files
css = ['example.css', 'example2.css']
pdfkit.from_file('file.html', options=options, css=css)

您还可以通过 HTML 中的元标记传递任何选项:

body = """
    <html>
      <head>
        <meta name="pdfkit-page-size" content="Legal"/>
        <meta name="pdfkit-orientation" content="Landscape"/>
      </head>
      Hello World!
      </html>
    """

pdfkit.from_string(body, 'out.pdf') #with --page-size=Legal and --orientation=Landscape

配置

每个 API 调用都采用一个可选的配置参数。这应该是pdfkit.configuration() API 调用的一个实例。它将配置选项作为初始参数。可用的选项有:

  • wkhtmltopdf - wkhtmltopdf二进制文件的位置。默认情况下, pdfkit将尝试使用which(在 UNIX 类型系统上)或where(在 Windows 上)来定位它。

  • meta_tag_prefix - pdfkit特定元标记的前缀 - 默认为pdfkit-

示例 - 当wkh​​tmltopdf不在$PATH上时:

config = pdfkit.configuration(wkhtmltopdf='/opt/bin/wkhtmltopdf')
pdfkit.from_string(html_string, output_file, configuration=config)

故障排除

  • IOError:“未找到 wkhtmltopdf 可执行文件”

    确保您的$PATH中有 wkhtmltopdf或通过自定义配置进行设置(请参阅上一节)。Windows中的 wkhtmltopdf或 Linux中的 wkhtmltopdf应返回二进制文件的实际路径。

  • IOError:“命令失败”

    此错误意味着 PDFKit 无法处理输入。您可以尝试直接从错误消息中运行命令并查看导致失败的错误(在某些 wkhtmltopdf 版本上,这可能是由分段错误引起的)

变更日志

  • 0.6.1
    • 尝试解码 pdf 输出时修复 python 3+ 上的回归

  • 0.6.0
    • 支持可重复选项

    • 支持某些选项的多个值

    • 在需要特定参数顺序时修复一些极端情况

    • 一些 Python 3+ 兼容性修复

    • 更新自述文件

  • 0.5.0
    • 允许传递多个 css 文件

    • 修复外部文件编码问题

    • 在 *nix 系统上缺少 X 服务器时出现错误

    • 修复最新 wkhtmltopdf 版本破坏的测试

    • 更新自述文件

  • 0.4.1
    • 更简单的自定义配置设置

    • 更新自述文件

  • 0.4.0
    • 允许传递类似文件的对象

    • 能够将 PDF 作为字符串返回

    • 允许用户指定配置

    • API 调用现在在成功时返回 True

    • bug修复

  • 0.3.0
    • Python 3 支持

  • 0.2.4
    • 添加历史

    • 更新 setup.py

  • 0.2.3
    • 使用 setup.py 修复安装

    • 更新自述文件

下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

bundled-pdfkit-0.6.1.tar.gz (31.3 MB 查看哈希

已上传 source