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

如何将html转化为pdf

html转换为pdf

  1. html2pdf.js库,
    基于html2canvas和jspdf,只能打印2-3页pdf,比较慢,分页会截断
  2. html2canvas
    只能打印2-3页pdf,比较慢,分页会截断 // canvas
  3. Dom-to-image
    不支持某些css属性
  4. Pdfmake html-to-pdfmake配合使用
    比较不错的库,有一些兼容性问题
  5. wkhtmltopdf
    比较不错的库,基于webkit,支持性好,分页需要特殊处理,服务器需要安装wkhtmltopdf环境,但是转换之后会存在图表加载偏离,分页不均匀的问题
  6. node+puppeteer(无头浏览器) // 直接打印
    比较不错的解决方案,是和直接鼠标右键打印另存为pdf是一个效果,但是会出现排版问题
    目前还没有找到好的解决方案

示例代码

wkhtmltopdf

首先在这里下载wkhtmltopdf,并且要记住文件的下载位置,下面时python的代码示例:

import pdfkit
import osdef html2pdf():folder_path = "report_output"# 获取文件夹中的文件名file_names = os.listdir(folder_path)# 存储文件名的列表file_list = []# 遍历文件名for file_name in file_names:# 检查文件名是否以 .html 结尾if file_name.endswith(".html"):# 将 .html 后缀替换为 .pdfpdf_file_name = file_name[:-5] + ".pdf"path_wkthmltopdf = r'C:\\Program Files\\wkhtmltopdf\\bin\\wkhtmltopdf.exe'config = pdfkit.configuration(wkhtmltopdf=path_wkthmltopdf)input_html = f"./report_output/{file_name}"  # 替换为你的 HTML 文件路径# 替换为你要保存的 PDF 文件路径output_pdf = f"./report_output_pdf/{pdf_file_name}"# 将 HTML 打印为 PDFpdfkit.from_file(input_html, output_pdf, configuration=config)file_list.append(pdf_file_name)print(f"{pdf_file_name}!", f" 这是第{len(file_list)}个报告")if __name__ == "__main__":# 运行将本地 HTML 文件转换为 PDF 的函数html2pdf()

使用 puppeteer 进行html到pdf的转换

因为puppeteer是nodejs的一个库
要使用 Puppeteer 将当前页面转换为 PDF 文件,你可以按照以下步骤进行操作:

首先,确保你已经安装了 Puppeteer。你可以使用 npm 进行安装:

npm install puppeteer

在 JavaScript 文件中,引入 Puppeteer 并创建一个异步函数来处理 PDF 转换逻辑。以下是一个示例代码:

const puppeteer = require('puppeteer');async function convertPageToPDF() {// 启动 Puppeteerconst browser = await puppeteer.launch();// 创建一个新的页面const page = await browser.newPage();// 导航到指定的页面await page.goto('https://example.com');// 等待页面加载完成await page.waitForLoadState('networkidle0');// 将页面保存为 PDF 文件await page.pdf({ path: 'page.pdf', format: 'A4' });// 关闭浏览器await browser.close();console.log('PDF 文件已生成');
}

// 调用函数进行 PDF 转换

convertPageToPDF();

在上面的示例中,我们使用 puppeteer.launch() 启动了一个 Puppeteer 浏览器实例,然后通过 browser.newPage() 创建了一个新的页面。接下来,使用 page.goto() 导航到指定的页面,并使用 page.waitForLoadState() 等待页面加载完成。

一旦页面加载完成,我们使用 page.pdf() 将页面保存为 PDF 文件。在这个方法中,你可以指定保存的文件路径(path)和 PDF 的格式(format)。在示例中,我们将 PDF 格式设置为 A4。

相关文章:

如何将html转化为pdf

html转换为pdf html2pdf.js库, 基于html2canvas和jspdf,只能打印2-3页pdf,比较慢,分页会截断html2canvas 只能打印2-3页pdf,比较慢,分页会截断 // canvasDom-to-image 不支持某些css属性Pdfmake html-to-p…...

ES6初步了解生成器

生成器函数是ES6提供的一种异步编程解决方案,语法行为与传统函数完全不同 语法: function * fun(){ } function * gen(){console.log("hello generator");}let iterator gen()console.log(iterator)打印: 我们发现没有打印”hello…...

飞桨大模型套件:一站式体验,性能极致,生态兼容

在Wave Summit 2023深度学习开发者大会上,来自百度的资深研发工程师贺思俊和王冠中带来的分享主题是:飞桨大模型套件,一站式体验,性能极致,生态兼容。 大语言模型套件PaddleNLP 众所周知PaddleNLP并不是一个全新的模型…...

【C++入门到精通】哈希 (STL) _ unordered_map _ unordered_set [ C++入门 ]

阅读导航 前言一、unordered系列容器二、unordered_map1. unordered_map简介⭕函数特点 2. unordered_map接口- 构造函数- unordered_map的容量- unordered_map的迭代器- unordered_map的元素访问- unordered_map的修改操作- unordered_map的桶操作 三、unordered_set1. unorde…...

创建 Edge 浏览器扩展教程(上)

创建 Edge 浏览器扩展教程(上) 介绍开始之前后续步骤开始之前1:创建清单 .json 文件2 :添加图标3:打开默认弹出对话框 介绍 在如今日益数字化的时代,浏览器插件在提升用户体验、增加功能以及改善工作流程方…...

container_of解析及应用

container_of是一个C语言中比较少见,但实际经常用到的宏,在Linux kernel中也有大范围的应用。...

搜维尔科技:Varjo-最自然和最直观的互动

创建真实生活虚拟设计 Varjo让你沉浸在最自然的混合和虚拟现实环境中。 世界各地的设计团队可以聚集在一个摄影现实的虚拟空间中,以真实的准确性展示新的概念-实时的讨论和迭代。这是一个充满无限创造潜力的新时代,加速了人类前所未有的想象力。 虚拟现实、自动反应和XR设计的…...

Postman环境配置

Postman环境配置 安装Postman安装node.js安装newman安装htmlextra安装git注册163邮箱用163邮箱注册gitee在pycharm中安装gitee详细文档 安装Postman 网址:https://www.postman.com/downloads/ 注册一个账号即可 安装node.js 安装newman npm install -g newman …...

Windows下Eclipse C/C++开发环境配置教程

1.下载安装Eclipse 官网下载eclipse-installer(eclipse下载器),或者官方下载对应版本zip。 本文示例: Eclipse IDE for C/C Developers Eclipse Packages | The Eclipse Foundation - home to a global community, the Eclipse ID…...

深入 Maven:构建杰出的软件项目的完美工具

掌握 Meven:构建更强大、更智能的应用程序的秘诀 Maven1.1 初识Maven1.1.1 什么是Maven1.1.2 Maven的作用 02. Maven概述2.1 Maven介绍2.2 Maven模型2.3 Maven仓库2.4 Maven安装2.4.1 下载2.4.2 安装步骤 03. IDEA集成Maven3.1 配置Maven环境3.1.1 当前工程设置3.1.…...

一文了解企业云盘和大文件传输哪个更适合企业传输

文件传输是企业工作中必不可少的环节,无论是内部协作还是外部沟通,都需要高效、安全、稳定地传输各种类型和大小的文件。然而,市面上的文件传输工具众多,如何选择合适的工具呢?本文将从两种常见的文件传输工具——企业…...

在 history 模式下,为什么刷新页面会出现404?

1、原因 因为浏览器在刷新页面时,它会向服务器发送 GET 请求,但此时服务器并没有配置相应的资源来匹配这个请求,因此返回 404 错误。 2、解决方案 为了解决这个问题,我们需要在服务器端进行相关配置,让所有的路由都指…...

第二证券:“华为概念股”,怒刷13连板

大盘颤动时,“妖股”出生日。 到10月24日收盘,圣龙股份连续第13个生意日以涨停报收,区间涨幅抵达245.62%,总市值89亿元;公司13个生意日成交额抵达90亿元,总换手率达159%。 此外,圣龙股份还在暴…...

黑豹程序员-架构师学习路线图-百科:API接口测试工具Postman

文章目录 1、为什么要使用Postman?2、什么是Postman? 1、为什么要使用Postman? 目前我们开发项目大都是前后端分离项目,前端采用h5cssjsvue基于nodejs,后端采用java、SpringBoot、SSM,大型项目采用SpringC…...

开源博客项目Blog .NET Core源码学习(5:mapster使用浅析)

开源博客项目Blog使用mapster框架映射对象,主要是在数据库表对象及前端数据对象之间进行映射,本文学习并记录项目中mapster的使用方式。   App.Hosting项目的program文件中调用builder.Services.AddMapper函数进行对象模型自动映射,而该函数…...

Appium移动端自动测试框架,如何入门?

Appium是一个开源跨平台移动应用自动化测试框架。 既然只是想学习下Appium如何入门,那么我们就直奔主题。文章结构如下: 1、为什么要使用Appium? 2、如何搭建Appium工具环境?(超详细) 3、通过demo演示Appium的使用 4、Appium如何…...

外汇天眼:喜大普奔!困扰投资者的交易问题解决了!

在外汇交易中,即使摒弃了“三无”的黑平台,使用的是正规安全的外汇交易平台,但是面对一些突发状况,依然会出现出金堵塞被拖延、入金不到账等交易突发情况,因为许多外汇平台处于国外,沟通困难、网络繁忙、平…...

UUID转16字节数组(Java)

最近在写协议的时候,遇到需要将一个36字符长度的UUID转为长度为16的字节数组; 这样处理的话那我们就需要保证唯一性和可还原; 于是我使用了下面的方式: /*** uuid转16字节数组** param uuidStr* return*/private static byte[] …...

使用vue3 搭建一个H5手机端访问的项目

首先说明,我本地之前运行过vue的项目,所以具有一些基础的运行环境,这里直接按步骤讲我项目框架搭建的过程。 这个不建议使用驼峰,按规范单词中间加横杠就可以。一般会出现选择项,按方向键选择,我这边选择了…...

【网络安全 --- 任意文件下载漏洞(1)】任意文件下载漏洞

一,环境,工具准备 1-1 VMVare 16 虚拟机及下载安装(资源) 请参考以下博客安装(特详细):【网络安全 --- 工具安装】VMware 16.0 详细安装过程(提供资源)-CSDN博客【网络安…...

2026 年软硬两用床垫,为何能做到不塌陷?

引言随着科技的不断进步和消费者需求的多样化,床垫市场也在不断创新。特别是软硬两用床垫,因其能够满足不同人群的需求而备受青睐。然而,如何确保床垫在长时间使用后不塌陷,仍然是一个技术难题。本文将探讨2026年软硬两用床垫如何…...

【免费下载】 Gmsh 4.11.1 资源包

Gmsh 4.11.1 资源包 【下载地址】Gmsh4.11.1资源包 Gmsh 4.11.1 资源包本仓库提供了一个包含 Gmsh 4.11.1 版本及相关资源的下载包 项目地址: https://gitcode.com/open-source-toolkit/804a2 本仓库提供了一个包含 Gmsh 4.11.1 版本及相关资源的下载包。Gmsh 是一款开源…...

基于Adafruit与CircuitPython的交互式光剑:从硬件选型到3D打印全流程解析

1. 项目概述:打造一把会“呼吸”的交互式光剑几年前,当我第一次在游戏里挥动《塞尔达传说》中的大师之剑时,就被那种兼具力量感与神圣感的视觉效果深深吸引。作为一个硬件创客,我一直在想,能不能把这种虚拟的体验带到现…...

谷歌 5 月算法大更新|独立站必看

2026年5月11日至15日,Google完成了本月核心算法的全面推送。这场覆盖全球搜索生态的更新,没有冗长的预热,却在上线后迅速引发跨境SEO、独立站运营、内容创作者群体的剧烈震动。本次更新是Google继3月核心算法后,对搜索质量体系的又…...

别再乱画了!GD32/STM32复位与唤醒按键电路设计,90%新手会踩的坑

GD32/STM32复位与唤醒按键电路设计避坑指南 1. 复位电路设计的核心误区与解决方案 许多工程师在设计GD32/STM32复位电路时,往往低估了RC时间常数的重要性。我曾亲眼见过一个团队花费两周时间排查系统随机重启问题,最终发现竟是复位电路中一个10kΩ电阻被…...

【免费下载】 慧荣SM2258XT开卡工具集合

慧荣SM2258XT开卡工具集合 【下载地址】慧荣SM2258XT开卡工具集合 本仓库提供了一套专门针对慧荣SM2258XT主控的固态硬盘、移动硬盘及SSDM.2硬盘的开卡工具集合。该工具集合旨在解决因主控问题导致的设备无法识别、不识别或容量显示错误等问题。通过使用本工具包,您…...

零基础玩转Linux:CentOS安装、Xshell连接与文件权限全攻略

零基础玩转Linux:CentOS安装、Xshell连接与文件权限全攻略 目录 1、Linux系统简介 2、安装Linux 3、Linux相关配制 3.1 配制静态IP 3.2 安装Linux终端 3.3 安装ftp 3.4、Linux目录结构 4、Linux基本命令 4.1、关机与重启 4.2、文件与目录 4.3、日期与日历 4.4、帮助指令 4.5、…...

2026年AI工程化的5大发展趋势:从模型到产品的必经之路

2026年AI工程化的5大发展趋势:从模型到产品的必经之路 导读: AI模型越来越强大,但如何将其稳定、高效地部署到生产环境?本文结合我过去3年的MLOps实战经验,深度剖析2026年AI工程化的核心趋势,助你从“会调参…...

5 分钟快速上手 hoist-non-react-statics:提升组件静态属性的完整教程

5 分钟快速上手 hoist-non-react-statics:提升组件静态属性的完整教程 【免费下载链接】hoist-non-react-statics Copies non-react specific statics from a child component to a parent component 项目地址: https://gitcode.com/gh_mirrors/ho/hoist-non-reac…...

ESP32项目编译后,如何看懂Output里的内存占用(DRAM/IRAM/Flash详解)

ESP32项目编译后内存占用分析:从DRAM到Flash的深度解读 当你在VSCode中按下编译按钮,看到终端输出那一连串内存占用数据时,是否曾感到困惑?这些数字背后隐藏着ESP32内存架构的秘密,也直接关系到你的项目性能和稳定性。…...