pdf生成:puppeteer
一、Puppeteer
二、安装
2.1、npm安装
apt install -y libglib2.0-dev libnss3 libatk1.0-0 libatk-bridge2.0-0 libcups2 libdrm2 libxcomposite1 libxdamage1 libxfixes3 libxrandr2 libgbm-dev libpango1.0-0 libasound2 libxshmfence1 libxkbcommon0 libcairo2
apt-get install nodejs npm
但这种方法安装的版本可能偏低,影响后续的包安装。按照下面的链接里的步骤安装https://linuxize.com/post/how-to-install-node-js-on-ubuntu-18.04/#1-installing-nvm-node-version-manager-script
1、curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash - # -s参数将不输出错误和进度信息;-L参数会让 HTTP 请求跟随服务器的重定向。curl 默认不跟随重定向。
2、sudo apt-get install -y nodejs
3、node --version # v14.21.1
4、npm --version # 6.14.17
2.2、docker安装 Docker | Puppeteer
docker pull ghcr.io/puppeteer/puppeteer:latest # pulls the latest
docker pull ghcr.io/puppeteer/puppeteer:16.1.0 # pulls the image that contains Puppeteer v16.1.0
该映像用于在sandbox模式下运行浏览器,因此,运行该映像需要SYS_ADMIN功能。
docker run -i --init --cap-add=SYS_ADMIN --rm ghcr.io/puppeteer/puppeteer:latest node -e "$(cat path/to/script.js)" #path/to/script.js是相对于工作目录的路径
三、使用Puppeteer Request Interception | Puppeteer
3.1、示例 - 跳转到https://www.baidu.com/,保存截图至 example.png,同时保存为pdf
const puppeteer = require('/usr/lib/node_modules/puppeteer');
(async() => {const browser = await puppeteer.launch({headless: true,args: ['--no-sandbox', // 沙盒模式'--disable-dev-shm-usage', // 创建临时文件共享内存'--disable-setuid-sandbox', // uid沙盒'--disable-gpu', // GPU硬件加速'--disable-web-security', // 关闭chrome的同源策略'--no-first-run', // 没有设置首页。在启动的时候,就会打开一个空白页面'--single-process' // 单进程运行]});const page = await browser.newPage();await page.goto('百度一下,你就知道', { waitUntil: 'networkidle0'}); //设置 waitUntil: 'networkidle0'选项表示Puppeteer已经导航到页面并结束await page.screenshot({path: 'example.png'});await page.pdf({path: 'example.pdf',format: 'A4',});await browser.close();
})().catch(error => {console.error(error);process.exit(1);
});
执行命令node example.js:
3.2、示例 - 通过html字符串生成pdf
const html = `<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" />·<title>Document</title><style>html {line-height: 1.15;-webkit-print-color-adjust: exact;}body {margin: 0;font-family: "Times New Roman",'宋体';font-weight: 400;}</style></head><body><div>页面Dom</div></body>
</html>`
const puppeteer = require('/usr/lib/node_modules/puppeteer')
async function printPDF() {const browser = await puppeteer.launch({headless: true,args: ['--no-sandbox', // 沙盒模式'--disable-dev-shm-usage', // 创建临时文件共享内存'--disable-setuid-sandbox', // uid沙盒'--disable-gpu', // GPU硬件加速'--disable-web-security', // 关闭chrome的同源策略'--no-first-run', // 没有设置首页。在启动的时候,就会打开一个空白页面'--single-process' // 单进程运行]});const page = await browser.newPage()await page.setContent(html, {waitUntil: 'networkidle0'})await page.pdf({ path: 'test.pdf', format: 'A4'})await browser.close()
}printPDF()
3.3、示例 - html动态加载json文件,生成pdf
const puppeteer = require('/usr/lib/node_modules/puppeteer');
(async() => {const browser = await puppeteer.launch({headless: true,args: ['--no-sandbox', '--disable-dev-shm-usage', '--disable-gpu', ' --test-type', '--disable-web-security']});const page = await browser.newPage();await page.goto('file:///home/zhang/Desktop/puppeteer_zq/firmware/html/content.html', { waitUntil: 'networkidle0'}); //设置 waitUntil: 'networkidle0'选项表示Puppeteer已经导航到页面并结束await page.pdf({path: 'firmware.pdf',format: 'A4',printBackground: true // 加这行pdf文件的背景才会显示});await browser.close();
})().catch(error => {console.error(error);process.exit(1);
});
const puppeteer = require('/usr/lib/node_modules/puppeteer');
(async() => {const browser = await puppeteer.launch({headless: true,args: ['--no-sandbox', // 沙盒模式'--disable-dev-shm-usage', // 创建临时文件共享内存'--disable-gpu', // GPU硬件加速'--test-type', '--disable-web-security' // 关闭chrome的同源策略]});const page = await browser.newPage();await page.goto('file:///home/zhang/Desktop/puppeteer_zq/firmware/html/content.html', { waitUntil: 'networkidle0'}); //设置 waitUntil: 'networkidle0'选项表示Puppeteer已经导航到页面并结束await page.pdf({path: 'firmware.pdf',format: 'A4',printBackground: true, // 加这行pdf文件的背景才会显示displayHeaderFooter: false, // 显示页眉和页脚。默认为Falsetimeout: 0, // 无穷大,不超时});await browser.close();
})().catch(error => {console.error(error);process.exit(1);
});
执行node json_html_2_pdf.js生成pdf文件。ok
四、参考
pdf生成:puppeteer相关推荐
- java使用freemark实现word(.doc/.docx)/pdf生成和导出(附源码和模板文件)
freemark生成word/pdf 一. 背景 二.实现的技术选型以及遇到的坑 三.最终的效果 2.1 `.doc` word效果展示 2.1 `.docx` word效果展示 2.2 docx w ...
- 一个能够自动给pdf生成目录的东西
我需要一个能够给pdf生成目录的工具.就类似iReader做到的那样. 首先:pdf是非扫描版的->扫描的页面范围,标记. pdf 是扫描版的-->如何识别出扫描的字体.
- reportlab教程1--第一个pdf生成
实际生活工作中,我们会希望有些报告.图表可以自动生成,然后变成pdf,甚至直接发邮件到某个制定邮箱lib.这个时候有几种方式可以来实现,譬如用latex,但是这个似乎还要在电脑上装很多东西.还有一个p ...
- # Itext Pdf 生成、相关API
Itext Pdf 生成.相关API 需求 需求java代码生成PDF效果如下:后端生成 Pdf文件,内容包含基本信息表格,图片.pdf需要有页眉,pdf每页含有页码,pdf含有多页. 上图看看最后生 ...
- 干撸一个Node环境的PDF生成服务
干撸一个Node环境的PDF生成服务 用到的库 介绍 代码片段 Http请求处理 生成PDF 样式展示 签名图片处理 PDF排版 结语 用到的库 express:Express 是一个保持最小规模的灵 ...
- java实现pdf生成,包括合并图片
参考帖子: 这位大佬的帖子必读,因为涉及到pdf创建表单的教程: java使用itext填充pdf模板,超简单教学,有手就行 以下是学习当中参考的帖子: java pdf域插入img_java实现在p ...
- 使用 Spire.Pdf 生成书签但是有 Evaluation Warning : The document was created with Spire.PDF for .NET.
使用 Spire.Pdf 生成书签但是有 Evaluation Warning : The document was created with Spire.PDF for .NET.字样 这里用到了两 ...
- PDF 书签制作和 Word 文档转 PDF 生成书签保留目录超链接的方法
根据 PDF 文档创建性质来制作书签 主要有两类 由可编辑文档创建 由不可编辑的图片创建 第一部分 由可编辑文档创建的 PDF 书签制作方法 1.Word 文档目录转 PDF 生成书签 Word自带转 ...
- PHP Tcpdf 生成 pdf 并将 (Imagick) pdf 生成 图片
利用Tcpdf生成pdf,使用 html标签,生成 pdf 一. 拉取扩展代码 使用 composer 拉取 composer require tecnickcom/tcpdf https://git ...
最新文章
- 脚本运行java_shell脚本运行java程序jar
- css 找到隐藏元素个数
- MemoryMappingFile泄漏分析过程
- IntelliJ IDEA 15发布
- 什么是SAP Intelligent Robitic Process Automation - iRPA
- mysql 5.6 使用ssl_MySQL 5.6--------SSL连接最佳实战
- IDEA UML图 实战
- 一种人是成功为了赚钱,一种人是赚钱为了成功
- Python中文编码过程中遇到的一些问题
- Linux安装nextcloud教程,WSL下安装nextcloud
- 工程选择LibGdx--开发环境搭建Strut2教程-java教程
- Citrix XenAPP域迁移操作步骤
- python pip 删除所有包
- Java周记(第五周)
- 北大光华管理学院教授:互联网未来会如何影响经济社会的发展?
- 【macOS】Macbook修改键盘映射
- Android聊天软件开发(基于网易云IM即时通讯)——添加好友(三)
- CSS图片链接、映射
- 向量索引算法HNSW和NSG的比较
- linux 上 gcc -m32 编译报错解决方案