如何将HTML字符串转换为HtmlUri用于Haukcode.WkHtmlToPdfDotNet页脚?
解决方案:直接内嵌HTML字符串作为页脚(无需额外接口)
针对使用Haukcode.WkHtmlToPdfDotNet时,无法直接用HTML字符串设置页脚的问题,有两种比搭建控制器更简便的实现方式:
1. 使用Data URI(推荐)
把HTML字符串编码为Base64,拼接成Data URI格式直接赋值给HtmlUrl,无需额外服务或文件:
var converter = new SynchronizedConverter(new PdfTools()); // 你的页脚HTML字符串 var footerHtml = @"<div> <table border=""1"" width=""100%"" style="" border: 5px solid royalblue; border-spacing: 0; border-collapse: collapse; text-align: center; ""> <tr> <td> <p style=""font-size: 14px; font-weight: normal; margin: 0; line-height: 1.1em; color: royalblue;""> Organization: ""INFORMATICA"" LLC.<br/> Date of signing: 05.03.2023 15:49:32<br/> Name: Daria Valeryevna Ivanova<br/> Position: Leading Specialist<br/> Certificate ID: 2DCEFE0001AD0CAA411A1D6CB228DCD6<br/> Signature validity date: 17.02.2025 10:13:52<br/> </p> </td> </tr> </table> </div>"; // 编码为Data URI var footerDataUri = $"data:text/html;base64,{Convert.ToBase64String(Encoding.UTF8.GetBytes(footerHtml))}"; FooterSettings footer = new FooterSettings() { HtmlUrl = footerDataUri }; var doc = new HtmlToPdfDocument() { GlobalSettings = { ColorMode = ColorMode.Color, Orientation = Orientation.Landscape, PaperSize = PaperKind.A4 }, Objects = { new ObjectSettings() { PagesCount = true, HtmlContent = transformedContent, WebSettings = { DefaultEncoding = Encoding.UTF8.HeaderName }, HeaderSettings = { FontSize = 9, Right = "", Line = false, Spacing = 2.812 }, FooterSettings = footer } } }; try { byte[] pdf = converter.Convert(doc); Helpers.FileHelper.SaveData(documentInfo.FileName, pdf); } catch (Exception ex) { Console.WriteLine(ex); throw; }
2. 使用临时本地文件
如果HTML内容较大或包含复杂资源,可将字符串写入临时文件,通过file://协议引用,转换完成后删除文件:
var converter = new SynchronizedConverter(new PdfTools()); var footerHtml = @"<div> <!-- 你的页脚HTML内容 --> </div>"; // 创建临时文件 var tempFilePath = Path.Combine(Path.GetTempPath(), $"footer_{Guid.NewGuid()}.html"); File.WriteAllText(tempFilePath, footerHtml, Encoding.UTF8); // 转换为file:// URI var footerFileUri = new Uri(tempFilePath).AbsoluteUri; FooterSettings footer = new FooterSettings() { HtmlUrl = footerFileUri }; // 后续文档配置和转换逻辑和之前一致... try { byte[] pdf = converter.Convert(doc); Helpers.FileHelper.SaveData(documentInfo.FileName, pdf); } catch (Exception ex) { Console.WriteLine(ex); throw; } finally { // 清理临时文件 if (File.Exists(tempFilePath)) { File.Delete(tempFilePath); } }
两种方案都无需搭建额外的控制器接口,Data URI是最轻量化的选择,适合大多数场景。
内容的提问来源于stack exchange,提问作者Евгений
相关产品推荐
相关产品推荐

