当前位置: 首页 > news >正文

python html(文件/url/html字符串)转pdf

安装库

pip install pdfkit

第二步
下载程序wkhtmltopdf
https://wkhtmltopdf.org/downloads.html

下载7z压缩包 解压即可, 无需安装
在这里插入图片描述
解压后结构应该是这样, 我喜欢放在项目里, 相对路径引用(也可以使用绝对路径, 放其他地方)
在这里插入图片描述


import pdfkit# 将 wkhtmltopdf.exe程序 路径
path_wkthmltopdf = './wkhtmltox/bin/wkhtmltopdf.exe'
config = pdfkit.configuration(wkhtmltopdf=path_wkthmltopdf)def url_to_pdf(url, to_file):# 生成pdf文件,to_file为文件路径pdfkit.from_url(url, to_file, configuration=config, options={'encoding': 'utf-8'})print('完成')# 这里传入我知乎专栏文章url,转换为pdf
# url_to_pdf(r'https://m.zhijiao.cn/newsmini/detail/102201', './招生简章/102201.pdf')# html文件转pdf
def file_to_pdf(path, to_file):# 生成pdf文件,to_file为文件路径pdfkit.from_file(path, to_file, configuration=config, options={'encoding': 'utf-8'})print('完成')# file_to_pdf('./123.html', './xxx/123.pdf')
pdf_err_counts = 0
# html字符串转pdf
def string_to_pdf(string, to_file):global pdf_err_counts# 生成pdf文件,to_file为文件路径try:pdfkit.from_string(string, to_file, configuration=config, options={'encoding': 'utf-8'})except Exception as e:pdf_err_counts += 1print('生成pdf失败', pdf_err_counts, e)

最好每个都像string_to_pdf函数一样, 捕获一下错误, 可以使程序更健壮, 避免转换失败导致程序停止(其他没写因为我没用, 懒得写)

参考: https://www.zhihu.com/tardis/zm/art/94608155?source_id=1005
转换效果参考文章中有, 我觉得还不错, 就是有点慢。

相关文章:

python html(文件/url/html字符串)转pdf

安装库 pip install pdfkit第二步 下载程序wkhtmltopdf https://wkhtmltopdf.org/downloads.html 下载7z压缩包 解压即可, 无需安装 解压后结构应该是这样, 我喜欢放在项目里, 相对路径引用(也可以使用绝对路径, 放其他地方) import pdfkit# 将 wkhtmltopdf.exe程序 路径 p…...

Spring概述

Spring概述 Spring 是最受欢迎的企业级 Java 应用程序开发框架,数以百万的来自世界各地的开发人员使用 Spring 框架来创建性能好、易于测试、可重用的代码。 Spring 框架是一个开源的 Java 平台,它最初是由 Rod Johnson 编写的,并且于 2003 …...

Linux网卡

网卡 网卡(Network Interface Card,NIC)是一种计算机硬件设备,也称为网络适配器或网络接口控制器。一个网卡就是一个接口 网卡组成和工作原理参考https://blog.csdn.net/tao546377318/article/details/51602298 每个网卡都拥有唯…...

【Python机器学习】零基础掌握ElasticNet变量选择回归器

如何优雅地解决房价预测问题? 房价预测一直是一个热门而复杂的话题。假设一个地产商希望准确地预测不同城市区域的房价,以便更有效地进行房地产投资。问题在于,房价是由多种因素共同决定的,例如地段、房屋面积、交通便利程度等。 为了解决这个问题,一个可行的思路是使用…...

【数据结构】模拟实现Vecotr

namespace my_vector {template <class T>class vector{public:typedef T* iterator;typedef const T* const_iterator;//常量指针&#xff0c;指针指向的值不可以变&#xff1b;//构造函数vector():start(nullptr),finish(nullptr),end_of_storage(nullptr){}//析构函数…...

Qt开发: 利用Qt的charts模块绘制曲线、饼图、柱状图、折线图等各种图表

一、前言 Qt Charts模块是Qt提供的一个用于创建各种类型图表的功能模块。为开发人员提供了一种简单而强大的方式来可视化数据。Qt Charts模块基于Qt GUI框架构建,可以与其他Qt模块无缝集成,例如Qt Widgets、Qt Quick和Qt OpenGL。 Qt Charts模块包含了几个核心类: (1)Q…...

Redis:加速你的应用响应时间,提升用户体验

绝大部分写业务的程序员&#xff0c;在实际开发中使用 Redis 的时候&#xff0c;只会 Set Value 和 Get Value 两个操作&#xff0c;对 Redis 整体缺乏一个认知。这里对 Redis 常见问题做一个总结&#xff0c;解决大家的知识盲点。 1、为什么使用 Redis 在项目中使用 Redis&am…...

乐鑫 SoC 内存映射入门

微控制器 (MCU) 的性能和内存能力逐步提升&#xff0c;其复杂度也随之加大。特别是当用户需要配置内存管理单元来映射外部存储器芯片 (Flash/SPIRAM) 时&#xff0c;这种现象尤其明显。 开始在乐鑫 SoC 上运行 Zephyr RTOS 时&#xff0c;会发现这些 SoC 与 ARM 架构的 MCU 相…...

蓝凌EIS智慧协同平台saveImg接口存在任意文件上传漏洞

蓝凌EIS智慧协同平台saveImg接口存在任意文件上传漏洞 一、蓝凌EIS简介二、漏洞描述三、影响版本四、fofa查询语句五、漏洞复现六、深度复现1、发送如花2、哥斯拉直连 免责声明&#xff1a;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者…...

【SEC 学习】美化 Linux 终端

一、步骤 1. 进入 /etc/bash.bashrc vim /etc/bash.bashrc2. 重新加载 bash.bashrc source /etc/bash.bashrc二、各参数指标 符号含义\u当前用户的账号名称\h仅取主机的第一个名字&#xff0c;如上例&#xff0c;则为fc4&#xff0c;.linux则被省略\H完整的主机名称。例如&…...

【Unity小技巧】可靠的相机抖动及如何同时处理多个震动(附项目源码)

文章目录 每篇一句前言安装虚拟相机虚拟相机震动测试代码控制震动清除震动控制震动的幅度和时间 两个不同的强弱震动同时发生源码完结 每篇一句 围在城里的人想逃出来&#xff0c;站在城外的人想冲进去&#xff0c;婚姻也罢&#xff0c;事业也罢&#xff0c;人生的欲望大都如此…...

【51单片机】51单片机概述(学习笔记)

一、课程简介 1、硬件设备 51单片机开发板 Win电脑 2、软件设备 Keil5&#xff1a;编写程序代码 STC-ISP&#xff1a;下载程序 有道词典 福昕阅读器 二、开发工具介绍 1、Keil5 keil.com > 下载C51版本 > 使用破解程序 2、STC-ISP 绿色版&#xff1a;直接运…...

make和new的区别

make和new都是golang用来分配内存&#xff08;理论上都是在堆上分配&#xff09;&#xff0c;不同的是 new分配空间只是将内存清零&#xff0c;并没有初始化&#xff1b;而make分配之后只初始化内存new为每个类型都分配&#xff0c;而make专用于slice、map、channew返回类型指…...

vue3获取页面路径

import { useRouter, useRoute } from vue-routerconst router useRouter()router.currentRoute.value.path // 页面路径...

基于STM32闭环步进电机控制系统设计

**单片机设计介绍&#xff0c;1654基于STM32闭环步进电机控制系统设计&#xff08;仿真&#xff0c;程序&#xff0c;说明&#xff09; 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序文档 六、 文章目录 一 概要 基于STM32的闭环步进电机控制系统设计是…...

Java中的队列:各种类型及使用场景

在Java中&#xff0c;队列是一种重要的数据结构&#xff0c;用于存储按特定顺序排列的元素。队列在多线程环境中特别有用&#xff0c;因为它们可以用来解决并发问题。在Java中&#xff0c;队列主要分为以下几种类型&#xff1a; 接口&#xff1a; Queue: 这是Java Queue接口&…...

MappingMongoConverter原生mongo 枚举类ENUM映射使用的是name

j.l.IllegalArgumentException: No enum constant com.xxx.valobj.TypeEnum.stringat java.lang.Enum.valueOf...

Java中的锁:类型,比较,升级与降级

在Java中&#xff0c;锁是一种用于实现并发控制的重要工具。在多线程环境中&#xff0c;锁可以确保数据的一致性和完整性。Java提供了多种类型的锁&#xff0c;包括内置的synchronized关键字&#xff0c;ReentrantLock类以及更高级的并发工具&#xff0c;如StampedLock和ReadWr…...

STM32:串口轮询模式、中断模式、DMA模式和接收不定长数据

一.串口轮询模式底层机制&#xff1a; 在STM32每个串口的内部都有两个寄存器&#xff1a;发送数据寄存器(TDR)/发送移位寄存器,当我们调用HAL_UART_Transmit 把数据发送出去时&#xff0c;CPU会将数据依次将数据发送到数据寄存器中&#xff0c;移位寄存器中的数据会根据我们设置…...

【OJ for Divide and Conquer】OJ题解

文章目录 A - Ultra-QuickSortB - Hanoi Tower Troubles Again! [找规律递归]C - Fibonacci Again[找规律]E - [Fire Net](https://programmerall.com/article/7276104269/)[DFS 搜索 ⭐⭐]F - Gridland[找规律]G - Maximum Subarray Sum[动态规划/分治..经典⭐]I - Quoit Desi…...

基于插件化架构的OBS实时音乐信息集成系统技术解析

基于插件化架构的OBS实时音乐信息集成系统技术解析 【免费下载链接】tuna Song information plugin for obs-studio 项目地址: https://gitcode.com/gh_mirrors/tuna1/tuna Tuna是一款面向OBS Studio的高性能插件化实时音乐信息集成系统&#xff0c;采用模块化架构设计&…...

5分钟免费解锁Cursor Pro:终极AI编程助手无限使用方案

5分钟免费解锁Cursor Pro&#xff1a;终极AI编程助手无限使用方案 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve reached your tri…...

汉字信息聚合工具开发:从数据可视化到工程实践

1. 项目概述&#xff1a;一个汉字学习者的“浏览器” 如果你是一个对汉字结构、字源、演变历史有浓厚兴趣的学习者&#xff0c;或者是一位从事中文教学、字体设计、文化研究的专业人士&#xff0c;你肯定有过这样的经历&#xff1a;为了查清一个汉字的来龙去脉&#xff0c;你需…...

终极KMS激活指南:如何永久免费激活Windows和Office系统

终极KMS激活指南&#xff1a;如何永久免费激活Windows和Office系统 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows激活弹窗而烦恼吗&#xff1f;是否遇到过Office突然变成只读模式…...

DroidCam OBS插件终极指南:零成本将手机变身高清直播摄像头

DroidCam OBS插件终极指南&#xff1a;零成本将手机变身高清直播摄像头 【免费下载链接】droidcam-obs-plugin DroidCam OBS Source 项目地址: https://gitcode.com/gh_mirrors/dr/droidcam-obs-plugin 还在为专业直播设备价格昂贵而烦恼&#xff1f;想用手机摄像头获得…...

模拟ASIC设计:核心技术与工程实践解析

1. 模拟ASIC设计概述模拟ASIC&#xff08;专用集成电路&#xff09;作为电子系统的重要组成部分&#xff0c;与数字ASIC相比有着独特的设计挑战和技术特点。在过去的45年里&#xff0c;从Hans Camenzind发明的NE555定时器开始&#xff0c;模拟ASIC已经发展成为现代电子设备不可…...

XSP25全协议 100W PD快充诱骗芯片_串口读电压电流信息

在Type-C快充技术普及的今天&#xff0c;快充诱骗协议芯片成为小家电、智能硬件、锂电设备等产品实现高效取电的核心器件。XSP25作为汇铭达推出的Type‑C受电端&#xff08;Sink&#xff09;多功能快充取电芯片&#xff0c;以全协议兼容、100W大功率输出、串口智能通信、极简外…...

WordPress AI内容创作栈:基于Claude API的自动化写作与运维实践

1. 项目概述&#xff1a;一个为WordPress量身定制的AI内容创作栈最近在折腾一个内容站&#xff0c;发现内容创作和日常运维的重复性工作实在太多了。从构思文章大纲、撰写初稿&#xff0c;到批量处理图片、优化SEO元数据&#xff0c;再到回复评论、生成周报&#xff0c;这些工作…...

不止于水:用MS动力学模拟和RDF分析,探究任意离子/分子在溶液中的溶剂化结构

从水到多元溶液&#xff1a;MS动力学模拟与RDF分析的高级应用指南 当我们需要理解溶液中离子或分子的行为时&#xff0c;径向分布函数(RDF)分析提供了一个强有力的工具。传统的纯水体系研究固然重要&#xff0c;但现实中的溶液系统往往更为复杂——电解液中的锂离子、蛋白质溶液…...

AI智能体编排框架:一人公司如何用OPC协议构建虚拟团队

1. 项目概述&#xff1a;从单兵作战到AI军团指挥官的蜕变如果你和我一样&#xff0c;是一个独立开发者或者小型创业者&#xff0c;肯定经历过这样的困境&#xff1a;脑子里有一个绝佳的产品创意&#xff0c;但面对从产品设计、前端开发、后端架构、UI/UX、市场增长到法律合规这…...