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);}} }