测试C#使用PuppeteerSharp将网页生成PDF文件

  微信公众号“DotNet开发跳槽”、“dotNET跨平台”、“DotNet”发布了几篇将网页生成图片或pdf文件的文章(参考文献2-5),其中介绍了使用puppeteer-sharp、Select.HtmlToPdf、iTextSharp等多种方式实现html转图片或pdf,正好最近有类似的需要(网上的文档没有找到离线版,手动一页页保存成pdf又太费劲),看完上述文章后,个人感觉PuppeteerSharp使用最简单、没什么限制,同时PuppeteerSharp官网的示例和文档也较全,本文学习PuppeteerSharp生成PDF文件的基本用法。
  VS2022新建Winform程序,在Nuget包管理器中搜索并安装PuppeteerSharp包:
在这里插入图片描述
  采用参考文献8中的示例代码进行测试,主要代码及说明如下所示,可以看出最简单的情况下不到10行代码即可导出pdf文件。

// 设置并下载浏览器相关组件,第一次下载可能耗时较长,后续再运行则速度很快
var options = new LaunchOptions { Headless = true };
using var browserFetcher = new BrowserFetcher();
await browserFetcher.DownloadAsync();//加载指定网址的页面
await using var browser = await Puppeteer.LaunchAsync(options);
await using var page = await browser.NewPageAsync();
await page.GoToAsync(txtUrl.Text);//将网页输出位指定名称的pdf文件
await page.PdfAsync(Path.Combine(Directory.GetCurrentDirectory(), $"{txtName.Text}.pdf"));

  如果想直接采用网页中的内容设置输出文件名,PuppeteerSharp提供了QuerySelector、GetProperty等函数查找并获取页面元素内容,下列示例查找并获取页面标题元素的内容:

var titleHtml = await page.QuerySelectorAsync("title");
var innerTextHandle = await titleHtml.GetPropertyAsync("innerText");
var innerText = await innerTextHandle.JsonValueAsync();

  调用PdfAsync输出pdf文件时,支持创建PdfOptions示例设置输出选项,主要属性如下图所示,如Format设置页面尺寸、Landscape设置纸张方向、PageRanges设置输出的页码范围、MarginOptions设置页边距等。
在这里插入图片描述
  单个网页生成pdf文件的路线算是通了,后续会再学习基于C#爬取网页链接的文章及代码,目标是能做到自动把网页中链接的页面都能自动生成PDF文件。

参考文献:
[1]https://github.com/hardkoded/puppeteer-sharp
[2]https://www.cnblogs.com/wuyongfu/p/17243490.html
[3]https://blog.csdn.net/sD7O95O/article/details/111771428
[4]https://www.cnblogs.com/hohoa/p/11087198.html
[5]https://blog.csdn.net/sD7O95O/article/details/115300554
[6]https://www.puppeteersharp.com/
[7]https://www.puppeteersharp.com/api/index.html
[8]https://github.com/hardkoded/puppeteer-sharp/blob/master/demos/PuppeteerSharpPdfDemo/Program.cs

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ABAP - Function ALV 06 红绿黄灯

实际开发中会有一些需求要求添加红绿黄灯列,例如ALVZ中交货单是否已完成拣配、未拣配、未完成拣配等状态进行红绿灯的显示,以求达到ALV简洁明了的目的,显示效果如下图所示。 完成这一功能只需要在结构定义时添加一个字段然后赋值即可。字段类…

STM32 系统滴答时钟启动过程 SysTick_Config

STM32 系统滴答时钟启动过程 SysTick_Config 1. 系统滴答时钟1.1 简介1.2 配置1.3 启动和更新 1. 系统滴答时钟 1.1 简介 SysTick:系统滴答时钟,属于Cortex-M4内核中的一个外设,24bit向下递减计数。 Systick定时器常用来做延时,…

排列组合简单详解(附10题)(会员版)

非会员,不用注册会员也能看! https://blog.csdn.net/Runcode8/article/details/136274861https://blog.csdn.net/Runcode8/article/details/136274861 一、认识C,P,A: A.排列 A(x,y)=(x!)/[(x-y)!]=x(x-1)...(x-y+1) P.排列 P(x,y)=A(x,y) C.组合 C(x,…

NXP实战笔记(九):S32K3xx基于RTD-SDK在S32DS上配置 CRCIRQPower

目录 1、CRC概述 1.1、CRC配置 1.2、代码示例 2、INTCTRL 3、Power 1、CRC概述 硬件CRC产生16或者32bit的,S32K3提供了可编程多项式与其他参数需求。 CRC图示如下 1.1、CRC配置 暂时DMA不怎么会用,所以没有启用DMA CRC的选择 这点需要十分注意&…

Vue | (六)使用Vue脚手架(下)| 尚硅谷Vue2.0+Vue3.0全套教程

文章目录 📚Vue 中的自定义事件🐇使用方法🐇案例练习🐇TodoList案例优化 📚全局事件总线🐇使用方法🐇案例练习🐇TodoList案例优化 📚消息订阅与发布🐇使用方法…

RK3568平台开发系列讲解(Linux系统篇)字符设备驱动:主设备和次设备

🚀返回专栏总目录 文章目录 一、主设备和次设备的概念二、设备号的分配和释放沉淀、分享、成长,让自己和他人都能有所收获!😄 字符设备通过字符(一个接一个的字符)以流方式向用户程序传递数据,就像串行端口那样。字符设备驱动通过/dev目录下的特殊文件公开设备的属性和…

知乎万赞:为什么我不建议你转行学python?_为什么不建议学python

写在前面 本文的目的很简单,一句话: 用最少的时间,最高效率,让你清楚:想要拿到python offer,你需要做什么?你该怎么做?如果你不具备这些条件,我不建议你转行学python&a…

linux系统git常规操作

Git命令常规操作 常用命令说明常用操作示意图文件的状态变化周期 添加文件跟踪文件会添加到.git的隐藏目录由工作区提交到本地仓库查看git的状态提交后的git目录状态 删除文件重命名暂存区数据查看历史记录还原历史数据还原未来数据标签使用对比数据 常用命令说明 命令命令说明…

C++ //练习 8.9 使用你为8.1.2节(第281页)第一个练习所编写的函数打印一个istringstream对象的内容。

C Primer(第5版) 练习 8.9 练习 8.9 使用你为8.1.2节(第281页)第一个练习所编写的函数打印一个istringstream对象的内容。 环境:Linux Ubuntu(云服务器) 工具:vim 代码块 /*****…

8.网络游戏逆向分析与漏洞攻防-游戏网络架构逆向分析-游戏底层功能对接类GameProc的实现

内容参考于:易道云信息技术研究院VIP课 上一个内容:通过逆向分析确定游戏明文接收数据过程 码云地址(master 分支):https://gitee.com/dye_your_fingers/titan 码云版本号:bcf7559184863febdcad819e48aaa…

C语言中的函数设计与调用优化

大家好,今天给大家介绍C语言中的函数设计与调用优化,文章末尾附有分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!可进群免费领取。 一、引言 在C语言中,函数是代码组织的基本单元&…

面向企业 SaaS 应用程序的应用程序性能管理

企业应用程序需要高度的可扩展性来满足庞大的最终用户群,这些组织中的 IT 团队面临的首要问题是监控正常运行时间并确保其业务应用程序的良好性能,为了解决这些问题,企业需要对端到端应用程序性能管理工具进行战略投资,使 IT 运营…