c#、.net 生成PDF,PDF内嵌二维码

第一步:需要引用的包  itext7.pdfhtml、QRCoder-ImageSharp、RazorEngine.NetCore 

第二步:生成一个二维码的方法

复制代码
 1 public string RenderQrCode()
 2         {
 3             var qrGenerator = new QRCodeGenerator();
 4             var qrCodeData = qrGenerator.CreateQrCode("Hello world", QRCodeGenerator.ECCLevel.Q);
 5             var qrCode = new QRCode(qrCodeData);
 6             var qrCodeImage = qrCode.GetGraphic(20);
 7 
 8             using var ms = new MemoryStream();
 9             // 二维码储存一个位置
10             // using var stream = new FileStream(@"D:\Email\qrcode.png", FileMode.Create);
11             qrCodeImage.Save(ms, new JpegEncoder());
12             
13             return Convert.ToBase64String(ms.ToArray());
14 
15         }
RenderQrCode
复制代码

第三步:新建一个实体类,用于传入值

复制代码
1 public class MyModel
2 {
3     public string Property1 { get; set; }
4     public string Property2 { get; set; }
5 }
MyModel
复制代码

第四步:新建一个.cshtml的PDF模板

复制代码
1 <!DOCTYPE html>
2 <html>
3 <head>
4     <title>My Template</title>
5 </head>
6 <body>
7     <h1>Hello @Model.Property1 and @Model.Property2!</h1>
8 </body>
9 </html>
View Code
复制代码

第五步:主方法(你需要实现的地方)代码

复制代码
 1         //关于二维码,我们可以自定义一个参数用来接受base64的二维码图片值,也可以储存他的地址
 2         //在html页面中设置<img>的值 例如<img src="data:image/png;base64,你的64位值"/>   也可以设置src的值为你的二维码地址<img src="你的图片地址"/>
 3         //本文是没有设置img的接受参数的
 4 
 5         // 创建 ViewModel 实例
 6         var viewModel = new MyModel { Property1 = "wanglei", Property2 = "shinibaba" };
 7 
 8         // 读取 Razor 模板文件
 9         var templateFilePath = "receipt.cshtml";
10         var templateString = File.ReadAllText(templateFilePath);
11 
12         // 使用 Razor 转换引擎生成 HTML 字符串
13         var htmlString = Engine.Razor.RunCompile(templateString, "templateKey", typeof(MyModel), viewModel);
14 
15         string basePath = AppDomain.CurrentDomain.BaseDirectory;
16         // 设置PDF文件路径
17         string pdfFilePath = Path.Combine(basePath, "test.PDF");
18 
19         using var htmlMemoryStream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(htmlString));
20         //设置PDF大小
21         iText.Kernel.Geom.PageSize pageSize = new iText.Kernel.Geom.PageSize(300, 300);
22         // 生成PDF
23         using (var pdfDoc = new PdfDocument(new PdfWriter(pdfFilePath)))
24         {
25             pdfDoc.SetDefaultPageSize(pageSize);
26             HtmlConverter.ConvertToPdf(htmlMemoryStream, pdfDoc);
27         }
View Code
复制代码

第六步:检验成果

图中的@model的值会替换为你传入的值,你可以根据Html样式去设计的你PDF很方便。

 

posted @   王小胖6688  阅读(203)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· Open-Sora 2.0 重磅开源!
点击右上角即可分享
微信分享提示