C# PuppeteerSharp html转pdf

news/2025/11/14 10:05:50/文章来源:https://www.cnblogs.com/mojiejushi/p/19220659
using PuppeteerSharp.Media;
using PuppeteerSharp;namespace Html2pdf
{class Program{static async Task Main(string[] args){try{Console.WriteLine("HTML转PDF演示程序");Console.WriteLine("=================");//@page {//size: A5 landscape; /* A5横向 *///margin: 5mm;//}// 1. 准备HTML内容(模拟您的打印模板)string htmlContent1 = @"
<!DOCTYPE html>
<html>
<head><meta charset='UTF-8'><title>中药饮片库存明细表</title><style>@page {size: 241mm 105mm landscape; /* Com10横向 */margin: 3mm;}body { font-family: 'Microsoft YaHei', SimSun, sans-serif; margin: 20px; font-size: 14px;}.header { text-align: center; margin-bottom: 30px;}.title {font-size: 18px;font-weight: bold;margin-bottom: 10px;}table {width: 100%;border-collapse: collapse;margin-top: 20px;}th, td {border: 1px solid #000;padding: 8px;text-align: center;}th {background-color: #f2f2f2;font-weight: bold;}.footer {margin-top: 30px;text-align: center;font-size: 12px;}.signature-area {margin-top: 40px;display: flex;justify-content: space-between;}.signature {width: 18%;text-align: center;}</style>
</head>
<body><div class='header'><div class='title'>在库中药饮片明细</div><div>单据编号: ZY-20230001</div><div>打印日期: 2023-11-16 14:30:25</div></div><div><div>仓库信息: 中药仓库-001</div><div>温控要求: 常温10-30摄氏度  相对湿度:35%-75%</div><div>仓库地址: 四川省成都市某某某某某公司</div></div><table><thead><tr><th>序号</th><th>品名</th><th>规格</th><th>生产厂家</th><th>批号</th><th>数量</th><th>单价</th><th>金额</th></tr></thead><tbody><tr><td>1</td><td>当归片(酒炙)</td><td>10g/袋</td><td>安徽某某某某某某某公司</td><td>DG-202309</td><td>120袋</td><td>¥15.80</td><td>¥1896.00</td></tr><tr><td>2</td><td>黄芪</td><td>500g/包</td><td>甘肃某某某某某某某基地</td><td>HQ-202308</td><td>30包</td><td>¥86.50</td><td>¥2595.00</td></tr><tr><td>3</td><td>金银花</td><td>250g/罐</td><td>山东某某某某某合作社</td><td>JYH-202307</td><td>45罐</td><td>¥58.20</td><td>¥2619.00</td></tr></tbody></table><div style='margin-top: 20px;'><div>合计金额(大写): 贰万捌仟叁佰捌拾壹元陆角整</div><div>合计金额(小写): ¥28381.60</div></div><div class='signature-area'><div class='signature'>开票人: 刘开票</div><div class='signature'>备货人: 李备货</div><div class='signature'>复核人: 王复核</div><div class='signature'>发货人: 张发货</div><div class='signature'>收货人: __________</div></div><div class='footer'><div>客服电话: 888-888-8888</div><div>© 2023 中药管理系统</div></div>
</body>
</html>";// 1. 定义文件路径string filePath = @"D:\test3.html";// 2. 检查文件是否存在if (!File.Exists(filePath)){Console.WriteLine("错误: 文件不存在!");return;}// 3. 读取文件内容string htmlContent = File.ReadAllText(filePath);// 4. 输出内容长度验证Console.WriteLine($"成功读取文件,内容长度: {htmlContent.Length}字符");// 5. 这里可以继续处理htmlContent,比如传递给PuppeteerSharp生成PDF// GeneratePdf(htmlContent);// 2. 获取输出PDF路径//Console.Write("请输入输出PDF路径(默认: output.pdf): ");string pdfOutputPath = "D:\\output1.pdf";if (string.IsNullOrWhiteSpace(pdfOutputPath)){pdfOutputPath = "output.pdf";}Console.WriteLine("正在转换HTML为PDF...");// 3. 初始化浏览器实例var browser = await InitializeBrowser();// 4. 生成PDFvar pdfBytes = await GeneratePdf(browser, htmlContent);// 5. 保存PDF文件await File.WriteAllBytesAsync(pdfOutputPath, pdfBytes);Console.WriteLine($"转换完成! PDF已保存到: {Path.GetFullPath(pdfOutputPath)}");}catch (Exception ex){Console.WriteLine($"发生错误: {ex.Message}");}Console.WriteLine("按任意键退出...");Console.ReadKey();}static async Task<IBrowser> InitializeBrowser(){Console.WriteLine("您可以手动下载Chromium并指定路径");//Console.Write("请输入本地Chrome/Chromium路径: ");var path = "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe";return await Puppeteer.LaunchAsync(new LaunchOptions{ExecutablePath = path,Headless = true});}static async Task<byte[]> GeneratePdf(IBrowser browser, string htmlContent){using var page = await browser.NewPageAsync();// 设置HTML内容await page.SetContentAsync(htmlContent, new NavigationOptions{WaitUntil = new[] { WaitUntilNavigation.Networkidle0 },Timeout = 30000});// 生成PDF选项var pdfOptions = new PdfOptions{Format = PaperFormat.A4,PrintBackground = true,MarginOptions = new MarginOptions{Top = "20mm",Right = "20mm",Bottom = "20mm",Left = "20mm"},Scale = 0.7m};//var pdfOptions = new PdfOptions//{//    Width = "148mm",  // A5宽度//    Height = "210mm", // A5高度//    Landscape = true, // 设置为横向//    PrintBackground = true,//    MarginOptions = new MarginOptions//    {//        Top = "10mm",//        Right = "10mm",//        Bottom = "10mm",//        Left = "10mm"//    }//};//var pdfOptions = new PdfOptions//{//    // 设置A5横向尺寸(148mm × 210mm)//    Width = "210mm",  // 横向时宽度为210mm//    Height = "148mm", // 横向时高度为148mm//    Landscape = true, // 横向模式//    PrintBackground = true,//    MarginOptions = new MarginOptions//    {//        Top = "5mm",//        Right = "5mm",//        Bottom = "5mm",//        Left = "5mm"//    },//    Scale = 0.8m, // 确保不缩放//    PreferCSSPageSize = true // 使用CSS中定义的页面尺寸//};//var pdfOptions = new PdfOptions//{//    // 设置Com10横向尺寸(241mm × 105mm)//    Width = "241mm",  // 横向时宽度为241mm//    Height = "105mm", // 横向时高度为105mm//    Landscape = false, // 横向模式//    PrintBackground = true,//    MarginOptions = new MarginOptions//    {//        Top = "3mm",//        Right = "3mm",//        Bottom = "3mm",//        Left = "3mm"//    },//    Scale = 0.7m, // 建议保持1.0不缩放//    PreferCSSPageSize = false // 使用代码中定义的尺寸//};return await page.PdfDataAsync(pdfOptions);}}
}

 

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

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

相关文章

大气环流模式

大气环流模式大气环流模式(简称GCM或AGCM)是基于牛顿运动定律、质量守恒定律和热力学定律建立的偏微分方程组,通过数值方法求解水平风场、温度场、湿度场等核心变量,用于模拟大气环流演变及预测气候状态。其基本方…

2025年隔音净化板制造厂权威推荐榜单:电子厂净化板/保温净化板/抗静电净化板源头厂家精选

隔音净化板作为现代建筑中不可或缺的功能性材料,其市场需求正随着人们对环境舒适度和健康要求的提升而持续增长。本文将为您推荐2025年度在隔音净化板领域表现卓越的Top 3制造厂,通过详实的数据和客观分析,为行业选…

2025年阻燃泡沫批发厂家权威推荐榜单:防水泡沫/密封海绵/阻燃棉源头厂家精选

在建筑安全与工业防火标准日益严格的今天,阻燃泡沫以其优异的防火安全性能和多功能应用特性,已成为建筑、交通、电子等多个行业不可或缺的关键材料。据行业报告显示,全球阻燃泡沫市场预计将保持稳定增长态势。为帮助…

2025年青年旅舍太空舱源头厂家综合推荐:太空舱民宿/旅游太空舱民宿/景观移动太空舱酒店设备精选指南

随着共享住宿与文旅产业的深度融合,青年旅舍太空舱作为一种创新的住宿形态,正以其智能化、高空间利用率和模块化特性赢得市场青睐。行业数据显示,2024年智能太空舱床位在国内青年旅舍市场的渗透率已接近18%,年采购…

动态主机配置协议(DHCP)中的中继机制及其配置方法

动态主机配置协议(Dynamic Host Configuration Protocol, DHCP)是一种网络协议,用于自动分配IP地址和其他网络配置信息给网络设备。在一个复杂的网络环境中,尤其是在不同子网之间,一台DHCP服务器可能无法直接为所…

使用神经网络处理逻辑异或门问题

异或门问题的难点在于其非线性可分性。1. 为什么单层感知机无法处理 XOR? 如果我们尝试用一个只有输入层和输出层的单层感知机来解决 XOR 问题,会遇到困难。 单层感知机只能学习线性可分的决策边界。这意味着它只能用…

MATLAB实现光谱特征波长提取

MATLAB实现光谱特征波长提取的几种方法 光谱特征波长提取是从复杂的光谱数据中识别和选择具有代表性波长点的过程,对于定量分析、分类识别和模型简化至关重要。1. 光谱特征波长提取的重要性 主要目的:数据降维:减少…

支持服务器的文件同步软件提升数据管理效率

在数字化时代,支持服务器的文件同步软件不仅是数据管理的工具,更是企业提升效率的关键。在多个服务器之间快速、准确地传输文件,确保每个环节的信息一致性,进而支持关键业务流程的顺利进行。尤其是在金融和在线支付…

2025年重庆吊装搬运公司权威推荐榜单:起重设备/专业吊装/起重机源头公司精选

在重庆这座山城,专业的吊装搬运公司正用坚实的技术实力托举着城市的现代化进程。据行业数据显示,2025年重庆地区吊装搬运市场规模预计将达到15亿元,年复合增长率稳定在12% 左右。专业的吊装搬运服务已成为确保重庆各…

2025年快装集成墙板厂家权威推荐榜单:集成墙板整装/碳晶板整装/A级防火板整装源头厂家精选

在建筑装饰行业快速发展的背景下,快装集成墙板以其环保安全、安装便捷、风格多样的特点,已成为现代装修的重要选择。据行业数据显示,2025年中国集成墙板市场规模预计突破600亿元,年均增长率保持在15%以上。为帮助您…

JAVA根据对象属性名和对象实体获取对象中该属性名的某个注解

以下示例/*** 根据属性名和类获取该属性上@ApiModelProperty注解的value值** @param fieldName 属性名* @param clazz 类对象* @return 注解中的value值,如果不存在则返回null*/public static String getApiModel…

2025年11月权威信息公布:轴连/水泵/转向/圆锥滚子/汽车水泵轴承源头厂家综合排名:徐州优力同创科技股份有限公司

文章摘要 随着汽车工业的快速发展,轴连轴承作为关键零部件市场需求持续增长。2025年轴连轴承行业呈现技术升级、产能优化的发展趋势,优质厂家凭借技术积累和供应链优势获得更多市场份额。本文基于产品质量、技术实力…

谱模式(Spectral model)

谱模式(Spectral model)谱模式是基于正交谱函数展开方式求解模式方程的数值计算方法,其核心采用球谐函数等非局地基函数展开技术处理流体运动偏微分方程组。该方法被应用于大气科学的多圈层耦合数值模式构建,构成数值…

2025年11月冷再生机/水泥板破碎机生产厂家推荐榜单:环硕建设领跑行业

摘要 随着我国基础设施建设的快速发展,冷再生技术作为环保、经济的道路维修工艺,在2025年迎来新的发展机遇。本文基于市场调研和行业数据,为您推荐当前市场上最具实力的冷再生机生产厂家,其中江苏环硕建设有限公司…

数据跨境传输如何提升速度的有效策略与实践

在当前的数据驱动时代,数据跨境传输的速度直接影响着企业的运营效率和市场竞争力。为了提升这方面的表现,企业面临着诸多挑战,如网络延迟、数据丢包和安全隐患等。因此,有必要探讨一些有效的策略与实践。通过应用新…

2025年11月储能/新能源汽车/机器人/低空飞行器/工业线束生产厂家排行榜:技术实力与品质保障的全面解析

摘要 随着新能源产业的快速发展,储能线束作为关键连接组件在2025年市场需求持续增长。本文基于技术实力、产能规模、品质管控等维度,对国内主流储能线束生产厂家进行综合评估,为行业用户提供权威参考。榜单数据来源…

dspy

dspy https://github.com/stanfordnlp/dspy DSPy is the framework for programming—rather than prompting—language models. It allows you to iterate fast on building modular AI systems and offers algorithm…

知名内外网文件交换系统是什么?主要有哪几个特点?

知名内外网文件交换系统的内容概要包括其在保障企业数据安全传输过程中的关键作用。这类系统采用先进的加密技术,有效保护数据,从而防止未经授权访问。除了确保数据的安全性,内外网文件交换系统还具有合规性保障,尤…

MySQL DATETIME类型存储空间详解:从8字节到5字节的演变

在MySQL数据库设计中,DATETIME类型用于存储日期和时间信息,但其存储空间大小并非固定不变,而是随MySQL版本迭代和精度定义动态变化。MySQL系列文章 在MySQL数据库设计中,DATETIME类型用于存储日期和时间信息,但其…

2025年11月水泥板破碎机和冷再生机供货源头厂家推荐排行榜前十名:行业权威解析江苏环硕建设有限公司

摘要 水泥板破碎机作为建筑垃圾处理和资源再利用的核心设备,在2025年基础设施建设中扮演着关键角色。随着环保政策加强和城市化进程加速,行业内对高效、可靠的水泥板破碎机需求持续增长。本排行基于市场调研、用户口…