【Python】用python将html转化为pdf

news2024/11/15 15:52:29

其实早在去年就有做过,一直没有写,先简单记录下

  

1、主要用到的工具【wkhtmltopdf】

【下载地址】wkhtmltopdf

根据系统选择安装包,速度有点慢,先挂着

 2、下载Python库

pip install pdfkit
pip install wkhtmltopdf

3、简单代码验证

import pdfkit
pdfkit.from_url('http://baidu.com','out.pdf')
pdfkit.from_file('test.html','out1.pdf')
pdfkit.from_string('Hello World!','out2.pdf')

 返回Done、True说明环境没有问题了

输出的pdf文件

 

打开pdf

 源html是动态大尺寸,pdf显示静态,尺寸有减小

 文件打开正常,说明代码没有问题,后面就可以自由发挥爬虫技能

 此外支持列表

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

作为string变量,操作pdf

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

指定pdf格式(选项设置)

参考https://wkhtmltopdf.org/usage/wkhtmltopdf.txt 

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会show出所有的output,如果你不想使用,可以设置为quite:

options = {'quiet': ''}

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

传入任何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

【改进】

将之前的save_file方法改成save_to_pdf,并且在get_body方法中直接返回str(div),而不是div.text。代码如下:

def save_to_pdf(url):
    '''
    根据url,将文章保存到本地
    :param url:
    :return:
    '''
    title=get_title(url)
    body=get_Body(url)
    filename=author+'-'+title+'.pdf'
# windows系统文件名特殊字符,建议网上百度,然后替换即可
    if '/' in filename:
        filename=filename.replace('/','+')
    if '\' in filename:
        filename=filename.replace('\','+')
    print(filename)
    options = {
        'page-size': 'Letter',
        'encoding': "UTF-8",
        'custom-header': [
            ('Accept-Encoding', 'gzip')
        ]
    }

    config=pdfkit.configuration(wkhtmltopdf=r'C:Program Fileswkhtmltopdfinwkhtmltopdf.exe')
    pdfkit.from_string(body,filename,options=options,configuration=config)
    print('打印成功!')

【文件命名规范】

自媒体的出现,文件命名开始五花八门,下面用一行代码去除非法字符

# Python中过滤Windows文件名中的非法字符
import re

title='xxxxxxx'

fileName = re.sub(r'[\/:*?"<>|
]+','-',title)

# 去掉非法字符,在[]中*不需要转义,此时*不表示多次匹配,就表示本身的字符  

【参考链接】

https://blog.csdn.net/xc_zhou/article/details/80952168 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/108330.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CAD教程:CAD自定义之基础设置的操作技巧

在使用国产CAD软件绘制CAD图纸的过程中&#xff0c;有些时候会需要CAD自定义设置&#xff0c;那么你知道浩辰CAD建筑软件中CAD自定义之基础设置怎么使用吗&#xff1f;不知道也没关系&#xff0c;接下来的CAD教程就让小编来给大家介绍一下国产CAD软件——浩辰CAD建筑软件中CAD自…

【1799. N 次操作后的最大分数和】

来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 给你 nums &#xff0c;它是一个大小为 2 * n 的正整数数组。你必须对这个数组执行 n 次操作。 在第 i 次操作时&#xff08;操作编号从 1 开始&#xff09;&#xff0c;你需要&#xff1a; 选择两个…

实验一 逻辑回归

一、实验目的 &#xff08;1&#xff09;学习并掌握常见的机器学习方法&#xff1b; &#xff08;2&#xff09;能够结合所学的python知识实现机器学习算法&#xff1b; &#xff08;3&#xff09;能够用所学的机器学习算法解决实际问题。 二、实验内容与要求 &#xff08…

设计模式之备忘录模式

Memento design pattern 备忘录模式的概念、备忘录模式的结构、备忘录模式的优缺点、备忘录模式的使用场景、备忘录模式的实现示例、备忘录模式的源码分析 1、备忘录模式的概念 备忘录模式&#xff0c;又称快照模式&#xff0c;即在不破坏封装的前提下&#xff0c;获取并保存一…

【数电】Simulation Test 模拟测试

一、 选择题&#xff1a;&#xff08;共20分&#xff0c;每小题2分&#xff09; 1、逻辑函数的所有最小项之和等于多少&#xff1f; A. 0 B. 1 C. 0或1 D. 任意值 2、与非门的多余输入端应如何处理&#xff1f;…

MySQL面试常问问题(基础) —— 赶快收藏

目录 1. 什么是内连接、外连接、交叉连接、笛卡尔积呢&#xff1f; 2. 那MySQL 的内连接、左连接、右连接有有什么区别&#xff1f; 3.说一下数据库的三大范式&#xff1f; 4.varchar与char的区别&#xff1f; 5.blob和text有什么区别&#xff1f; 6.DATETIME和TIMESTAMP…

SCSS学习笔记

文章目录1.安装scss2.选择器嵌套3.属性嵌套4.父选择器&5.变量5.1变量的规范5.2变量的作用域5.3给变量设置默认值(!default)6数据类型7.运算符8.插值语法9.流程控制语句9.1 条件语句9.2循环语句9.2.1for9.2.2each9.2.3while10import10.1引入scss不编译10.2嵌套引入scss11.mi…

【软件测试】概念篇

目录 一、需求 1.1用户需求 1.2软件需求 1.3需求的重要性 二、测试用例 三、BUG 3.1什么是BUG 3.2如何描述一个BUG 4.3BUG优先级 四、软件开发模型 4.1软件生命周期 4.2开发模型 定义&#xff1a;软件测试就是一系列活动&#xff0c;这些活动是为了评估一个程序或者…

新店速递 | IU酒店带您领略“东方古罗马”

淄博&#xff0c;位处鲁中&#xff0c;是黄河三角洲生态经济和蓝色经济区的交汇处。四季分明的气候造就了这座齐国故都的生态多样性&#xff0c;南高北低的地理位置使其峻岭平原兼具&#xff0c;鲁中的位置又赋予他交通枢纽的重要性。这里历史气息浓厚&#xff0c;社会文化自由…

中文语法纠错全国大赛获奖分享:基于多轮机制的中文语法纠错

中文语法纠错任务旨在对文本中存在的拼写、语法等错误进行自动检测和纠正&#xff0c;是自然语言处理领域一项重要的任务。同时该任务在公文、新闻和教育等领域都有着落地的应用价值。但由于中文具有的文法和句法规则比较复杂&#xff0c;基于深度学习的中文文本纠错在实际落地…

新能源汽车市场渗透率不断提高,锂电设备需求空间较大

根据观研报告网发布的《中国新能源汽车行业发展深度研究与投资趋势调研报告&#xff08;2022-2029年&#xff09;》显示&#xff0c;近年来&#xff0c;随着各国开启能源转型&#xff0c;在汽车领域&#xff0c;由于电动汽车具有高效节能、零排放等优点&#xff0c;已逐渐成为汽…

配置小型公司网络WLAN基本业务(AC通过三层口管理AP)

组网需求&#xff1a; 某小型企业由于业务需要&#xff0c;希望员工能在企业内部随时随地的访问Internet&#xff0c;进行移动办公。该企业部署了一台AR路由器作为出口网关&#xff0c;希望同时在AR路由器上部署WLAN功能&#xff0c;为企业员工提供无线网络接入服务&#xff0c…

JDK,JRE,JVM的作用及关系

1.定义JDK(Java Development Kit): 是Java语言的软件开发工具包&#xff0c;内部包含了代码的编译工具和运行工具。JRE(Java Runtime Environment): 指Java运行时环境&#xff0c;包含java虚似机、以及核心类库(java帮我们写好的程序)等java运行所需的东西。JVM(Java Virtual M…

必须要学习的源码--ConcurrentHashMap

并发安全的集合&#xff1f; 并发不安全的集合 在 Java 中&#xff0c;有一些集合是不安全的&#xff0c;因为它们不是线程安全的。这意味着如果多个线程同时访问这些集合&#xff0c;那么它们可能会出现不可预料的行为。 Java 中的并发不安全的集合包括&#xff1a; ArrayLi…

花房集团上市,走向元宇宙新征程

12月12日&#xff0c;花房集团在港交所成功上市&#xff0c;首日便受到追捧&#xff0c;当日最高涨幅达28.75%。 继360、360数科、鲁大师后&#xff0c;这是“红衣教主”周鸿祎收获的第四个IPO。 花房集团作为直播界元老之一&#xff0c;两年内三次申请IPO&#xff0c;终于在…

(GCC)STM32进阶详解之栈回溯

接上一篇&#xff1a; 函数调用 由上一篇大概了解了函数是如何被调用&#xff0c;中断或者说异常又是如何被调用&#xff0c;而这一篇相当于上一篇知识的一个应用&#xff0c;也是上一篇遗留的思考&#xff0c;即在hardfault中如何判断是从何处触发这个异常的。本来打算自己写…

GO09:整型、浮点、字符类型的介绍和使用细节

基本类型的使用 基本介绍 3.8整数的各个类型 func main(){var i int 1 fmt.Println("i", i) var j int8 127 fmt.Println("j", j) }int的无符号的类型&#xff1a; 整型的使用细节 一、Golang各整数部分&#xff1a;有符号和无符号&#xff0c;int u…

信而泰RENIX 802.1ag功能介绍-网络测试仪实操

一、EOAM概述​ 1.以太网​ 1.1以太网优点​ 简单易用​ 价格低廉​ 高拓展性​ 大势所趋&#xff0c;一统天下​ 1.2以太网缺点​ 可管理性差​ 定位故障手段少​ 定位故障速度慢​ 维护成本高​ 2.以太网OAM​ ■EOAM​ 为运营商服务​ 提高以太网可靠性、可维…

非零基础自学Golang 第15章 Go命令行工具 15.6 性能分析 15.6.2 通过文件方式 15.6.3 通过HTTP方式 15.7 小结

非零基础自学Golang 文章目录非零基础自学Golang第15章 Go命令行工具15.6 性能分析15.6.2 通过文件方式15.6.3 通过HTTP方式15.7 小结第15章 Go命令行工具 15.6 性能分析 15.6.2 通过文件方式 为了能分析Go程序的性能&#xff0c;我们需要在程序中导入runtime/pprof来生成性…

飞鹤揭榜“十四五”项目,牵头研制新一代婴配粉

12月22日&#xff0c;在“鲜萃活性营养&#xff0c;更适合中国宝宝体质”中国飞鹤60周年战略升级发布会上&#xff0c;飞鹤对外公布&#xff0c;其牵头申报的——“基于中国母乳研究的新一代婴配乳粉制造技术研究与示范”项目成功获批。 这是继去年飞鹤与江南大学、大连工业大…