用python实现html转pdf:weasyprint、pdfkit

Python 代码轻松实现 HTML 文件及HTML字符串到 PDF 文档的 文章说明了使用Python进行HTMLPDF换方法,解释了使用PythonHTML换为PDF的优势和限制,并提供了使用Spire.Doc for Python进行HTMLPDFHTML字符串到PDF换的说明和代码示例。通过参考文章的方法,开发人员可以创建自己的Python程序,实现自动化和高质量的换。 阅读详情

目录

weasyprint

pdfkit

报错处理

文件转pdf:from_file

URL网页转pdf:from_url

字符串转pdf:from_string

部分参数说明

verbose

toc、cover、cover_first

css


weasyprint

支持将文件、URL、字符串转为pdf,使用weasyprint将html转pdf,代码简单,但是环境配置麻烦,几乎都在报错的路上。

环境配置参考:https://doc.courtbouillon.org/weasyprint/stable/first_steps.html#installation

需要下载安装对应版本的msys:官网下载地址https://www.msys2.org/

运行就报这个错:raise OSError(msg)
OSError: cannot load library 'libgobject-2.0-0': error 0x7e. Additionally, ctypes.util.find_library() did not manage to locate a library called 'libgobject-2.0-0',需要将gtk的bin添加到环境变量path中,或者使用os模块添加。

代码示例:

from weasyprint import HTML
import os

os.add_dll_directory(r'E:\python\gtk-bundle_3.6.4-20130513_win64\bin')


def html_pdf():
    html = HTML(filename='test.html')
    html.write_pdf('test.pdf')


if __name__ == '__main__':
    html_pdf()

pdfkit

报错处理

基本会出现的报错处理:

报错1:

OSError: No wkhtmltopdf executable found: "b''"
If this file exists please check that this process can read it or you can pass path to it manually in method call, check README. Otherwise please install wkhtmltopdf - https://github.com/JazzCore/python-pdfkit/wiki/Installing-wkhtmltopdf

没有安装或配置wkhtmltopdf程序:

安装包下载地址:https://wkhtmltopdf.org/downloads.html

配置方法,在转pdf时指定configuration参数,如下:

config = pdfkit.configuration(wkhtmltopdf=r'E:\wkhtmltopdf\bin\wkhtmltopdf.exe')

pdfkit.from_file('test.html', 'ts.pdf', configuration=config)

报错2:

OSError: wkhtmltopdf reported an error:
Exit with code 1 due to network error: ProtocolUnknownError

没有设置'enable-local-file-access':True,具体设置见下文中options配置参数。

文件转pdf:from_file

支持将html、TXT、xml文件转为pdf

配置参数:https://wkhtmltopdf.org/usage/wkhtmltopdf.txt

import pdfkit

def html_pdf():
    config = pdfkit.configuration(wkhtmltopdf=r'E:\wkhtmltopdf\bin\wkhtmltopdf.exe')

    options = {
        # 可添加allow、cookie、custom-header、post等参数
        'encoding': 'utf-8',
        'enable-local-file-access': True,
        'page-size': 'A4',  # 设置页面大小为A4
        'dpi': 500,  # 设置分辨率
        'margin-top': '10mm',  # 设置上边距
        'margin-left': '10mm',
        'margin-right': '10mm',
        'margin-bottom': '10mm',
        'no-outline': None,
        'custom-header': [
            ('Accept-Encoding', 'gzip')
        ],
        'cookie': [
            ('cookie-key1', 'cookie-value1'),
            ('cookie-key2', 'cookie-value2')
        ],
        'orientation': 'Landscape'  # 默认横向Portrait,纵向为Landscape
    }

    # 可以传递单个文件或多个文件的列表:
    pdfkit.from_file('test.html', 'ts.pdf', configuration=config, options=options)
    pdfkit.from_file(['test1.html','test2.html','test3.html'], 'ts.pdf', configuration=config, options=options)
    

通过打开文件的方式转换

    with open('test.html', 'r', encoding='utf-8') as f:
        pdfkit.from_file(f, 'test.pdf', configuration=config, options=options)

URL网页转pdf:from_url

    # 可以传递单个URL或多个URL的列表:
    url_list = ['https://cloud.tencent.com', 'https://blog.csdn.net', 'https://fanyi.youdao.com/']
    pdfkit.from_url('https://fanyi.youdao.com/', 'test.pdf', configuration=config, options=options)
    pdfkit.from_url(url_list, 'test.pdf', configuration=config, options=options)

字符串转pdf:from_string

可以通过HTML中的meta标签传递 options的 参数

    html_body = """
        <html>
          <head>
            <meta name="pdfkit-page-size" content="A4"/>
            <meta name="pdfkit-orientation" content="Landscape"/>
            <meta name="pdfkit-encoding" content="utf-8"/>
          </head>
          测试页面打印效果
          </html>
        """
    pdfkit.from_string('测试字符串转pdf', 'str_to_pdf.pdf', configuration=config, options=options)
    pdfkit.from_string(html_body, 'test1.pdf', configuration=config)  # 可以通过HTML中的meta标签传递 options的 参数

部分参数说明

在from_file、from_url、from_string中可使用的其他参数介绍

verbose

可在API调用中传递verbose=True,获取wkhtmltopdf的报错说明

pdfkit.from_url('https://mp.csdn.net/', 'out.pdf', verbose=True, configuration=config)

toc、cover、cover_first

由于toc和cover选项必须分开指定,如果需要在toc之前提供封面,要使用cover_first选项

    toc = {
        'xsl-style-sheet': 't.xsl'
    }
    cover = 'c.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

在文件或字符串转pdf时,可通过css选项指定外部css文件,支持单个或多个css文件的添加

    # 添加单个css文件
    pdfkit.from_file('file.html', options=options, css='example.css', configuration=config)

    # 添加多个css文件
    css_list = ['example.css', 'example2.css']
    pdfkit.from_file('file.html', options=options, css=css_list, configuration=config)
python之xhtml2pdf: HTMLPDF工具示例详解 本文介绍了Python中一款强大的HTMLPDF工具XHTML2PDF,并提供了详细的示例说明,帮助读者快速上手使用该工具。通过本文,读者将了解如何安装和配置XHTML2PDF,以及如何使用该工具将HTML文件换为高质量的PDF文档。在现代的应用程序开发中,我们经常需要将HTML内容换为PDF文档。这种需求在打印电子商务收据、生成报告、导出电子书等场景中非常常见。Python中有众多强大的工具库可用于实现HTMLPDF换,而XHTML2PDF就是其中一款非常流行的选择。 阅读详情

相关推荐

ChatGPT4.0与PDF生成:高效办公的三种实用方案

本文详细介绍了三种将ChatGPT4.0生成内容高效换为PDF的实用方案,包括第三方工具一键换、编程生成高级PDF和在线编辑器可视化方案。这些方法能有效解决商务文档格式混乱问题,提升办公效率,特别适合需要精确控制文档排版的场景。

weixin_33734785的博客 90

PythonHTML保存为PDF

wkhtmltopdf是一个命令行工具,主要用于将HTML换为PDF文件。pdfkit是对wkhtmltopdf的封装,Python可以通过pdfkit调用wkhtmltopdf,进而实现批量PDF操作。

ylmx5201314的博客 1565

Python实战:5分钟搞定HTMLPDF(含Spire.Doc避坑指南)

本文详细介绍了使用Python库Spire.Doc实现HTMLPDF高效换的实战方法。针对样式丢失、中文乱码等常见问题,提供了从环境搭建、文件换到动态HTML字符串处理的完整解决方案与关键避坑指南,帮助开发者在5分钟内构建稳定的自动化报告生成流程。

weixin_29055699的博客 409

WeasyPrint:把 HTML 变成 PDF 的文档工厂

WeasyPrint:轻量级HTMLPDF工具 WeasyPrint是一款开源的Python工具,专注于将HTML和CSS渲染成PDF文档。它采用纯Python实现的CSS排版引擎,无需依赖浏览器内核或WebKit,即可生成精准的打印排版PDF。该工具特别适合服务端批量生成发票、报表、电子书等场景,具有部署简单、内存占用低、输出稳定可控等优势。支持CSS Paged Media、Flexbox等印刷排版特性,可通过pip直接安装使用。相比ReportLab等底层库或无头浏览器方案,WeasyPrint在易

guangmingtech699的博客 227

weasyprint,一个超酷的 Python 库!

更多Python学习内容:ipengtao.com大家好,今天为大家分享一个超酷的 Python 库 - weasyprint。Github地址:https://github.com/Kozea/WeasyPrint/在现代Web开发中,将HTML和CSS换为PDF或图像文件是一项常见的需求。PythonWeasyPrint库是一种强大的工具,能够将HTML和CSS渲染为PDF和PNG文件。W...

涛哥聊Python 4828

Python】用weasyprint实现html文件pdf文件

最近在工作中经常遇到html文件无法在手机端、pad上无法查看的苦恼,但又不想装一些乱七八糟的app,所以想到把html文件保存成pdf文件,以方便随时随地方便的查看文件。

qq_42533357的博客 4340

wkhtmltopdf不支持python3,有备用方案嘛?

是的,wkhtmltopdf 不支持 Python 3。但是您可以使用其他库来替代 wkhtmltopdf,例如: PDFkit: 这是一个 Python 包装器,它使用 wkhtmltopdf 命令行工具来将 HTML 换为 PDFWeasyPrint: 这是一个可以将 HTML 和 CSS 换为 PDFPython 库。 PyPDF2: 这是一个可以用于创建、合并和修改 P...

weixin_35756690的博客 358

Agent 应该中 PDF 工具方案分析报告 - AI分析分享

选型核心问题有三个维度:第一,Agent 的 PDF 任务频率与复杂度。低频、简单文档(如摘要报告)用 AI 原生工具或云 API 即可;高频、复杂布局(如财务报表、法律合同)应选 ReportLab 或 DocRaptor。第二,是否需要 JavaScript 渲染。如果 PDF 内容来自动态 Web 页面或包含图表库,应选择 Playwright(活跃维护、多浏览器支持)而非 PDFKit(其底层 wkhtmltopdf 已停止维护,CSS 冻结在旧版)。第三,合规与数据安全。

weixin_69334636的博客 561

python htmlpdf出现乱码_HTMLPDF神器:WeasyPrint

↑关注 + 星标,每天学Python新技能后台回复【大礼包】送你Python自学大礼包将网页换为pdf之前用过wkhtmltopdf这个工具,对应的python库是pdfkit,但是最终换出来的效果总是不尽如意。最近发现一个新的库 WeasyPrint , 经过一番测试效果非常不错,无论是从官方网站的介绍还是提供的文档,看得出作者应该是花了不少心思来做这件事。最重要的是,安装简单,使用方便。...

weixin_31355483的博客 1537

PythonHTMLPDF

PythonHTMLPDF

tangsiqi130的博客 1081

python weasyprint

WeasyPrint是一个Python库,能够将HTML和CSS换为PDF文档。它采用独立的CSS渲染引擎而非依赖浏览器,具有轻量级、安装简单的特点。该工具特别适合生成格式严格的文档如报表、发票等,支持打印专用的CSS特性如分页控制、页眉页脚设置。相比其他方案,WeasyPrint在易用性和功能性之间取得了平衡:比底层PDF库更易维护,比浏览器引擎方案更轻量。但需注意其对JavaScript不支持,且CSS特性有一定限制。对于需要快速生成静态样式文档的场景,WeasyPrint提供了高效的解决方案。

leohu0723的博客 373

使用 Python 爬虫抓取博客文章并保存为 PDF 格式——完整实战教程

通过这篇教程,您已经掌握了如何使用Python爬虫抓取博客文章并将其保存为PDF格式。在实际应用中,您可以根据需求扩展代码,例如: 支持批量抓取多个文章; 优化PDF排版效果; 自动化抓取图片资源并优化性能; 处理复杂的网页结构和分页问题。

2201_76125261的博客 936

如何通过python实现导出题库到pdf?

要通过Python实现将题库导出为PDF,你可以使用第三方库如pdfkitweasyprint来完成。以下是一种可行的方法: 安装所需的库:使用pip命令安装pdfkitweasyprint库。 准备HTML模板:创建一个HTML模板文件,其中包含题目、答案、图片等内容。确保在HTML中使用CSS样式来控制文本...

4G/5G随身WiFi专业DIY改装 482

牛逼,这个PDF库比其它工具好用99倍

将网页换为pdf之前用过wkhtmltopdf这个工具,对应的python库是pdfkit,但是最终换出来的效果总是不尽如意。最近发现一个新的库 WeasyPrint , 经过一番测...

Python之禅的专栏 1286

PyFPDF: 简单高效的Python PDF生成库

PyFPDF 是一个用于在Python中生成PDF文件的强大库,它是从PHP的著名扩展FPDF移植而来的(参见FPDF:"免费"的PDFlib替代品)。PyFPDF以其简单性、小巧性和多功能性著称,在易学的同时也提供了高级功能。 ### 主要特性 - 容易使用且容易扩展 - 提供了许多语言版本的简洁示例和脚本 - 没有任何外部依赖或扩展(可选PIL支持GIF) - 不需安装、编译或其他库(如DL...

gitblog_00169的博客 904

Python文件格式换实战:Excel与Word至PDF

在当今数字化时代,文件格式换是日常工作中的一个常见需求,尤其在数据处理和文档管理方面。Python作为一种强大的编程语言,因其简洁的语法和强大的库支持,在文件格式换方面显示出了其独特的优势。本章将为您概述Python在文件格式换中的应用,以及为何它成为处理这类问题的首选语言。我们将从理解Python文件格式换的基本概念开始,探讨Python换不同文件格式中的关键作用,并提供一个清晰的工作流程概览,以便读者能快速了解和掌握后续章节的核心内容。# 示例代码块:一个简单的文件格式换的伪代码。

weixin_30838971的博客 705

PDF的常用库和实用工具

PDF库和htmlPDF库、工具参考

曲折旅程,艰难人生 566
上一篇: python+pdfplumber:提取和分析PDF中的表格、文本等数据,实现pdf转图片、CSV、JSON、dict
下一篇: python+playwright自动化测试(一):安装及简单使用,截图录屏
觅远
博客等级 码龄6年 1万+粉丝 · 302原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值