YiShaAdmin 将富文本中的图片转成PDF文件下载 (c#)

1、需求是业务人员会在系统上传有些客户的发来的照片或者聊天截图,财务人员想下载会形成一个PDF文档做存档

2、开发框架是YiShaAdmin 包含前后端

3、具体实现代码。富文本编辑器的内容是 ent.Data.Remarks

4、文件下载和保存框架自带的

public async Task<TData<FileContentResult>> UploadDetialRemark(long id)
        {
            //获取认款凭证信息
            TData<ARMEntity> ent =  await aRMBLL.GetEntity(id);
            //定义正则表达式用来匹配 img 标签 
            Regex regImg = new Regex(@"<img\b[^<>]*?\bsrc[\s\t\r\n]*=[\s\t\r\n]*[""']?[\s\t\r\n]*(?<imgUrl>[^\s\t\r\n""'<>]*)[^<>]*?/?[\s\t\r\n]*>", RegexOptions.IgnoreCase);
            //搜索匹配的字符串 
            MatchCollection matches = regImg.Matches(ent.Data.Remarks);
            int i = 0;
            string[] sUrlList = new string[matches.Count];
            //取得匹配项列表 
            foreach (Match match in matches)
            {
                sUrlList[i++] = match.Groups["imgUrl"].Value;
            }
            //创建一个PdfDocument对象
            PdfDocument doc = new PdfDocument();
            foreach (string s in sUrlList)
            {
                //将base64头部信息替换
                string base64String = s.Replace("data:image/png;base64,", "").Replace("data:image/jgp;base64,", "")
                .Replace("data:image/jpg;base64,", "").Replace("data:image/jpeg;base64,", "");
                byte[] arr = Convert.FromBase64String(base64String);
                using (MemoryStream ms = new MemoryStream(arr))
                {
                    Image mImage = Image.FromStream(ms);
                    //设置页边距为0
                    doc.PageSettings.SetMargins(0);
                    //获取图片高度和宽度
                    float width = mImage.PhysicalDimension.Width;
                    float height = mImage.PhysicalDimension.Height;
                    //添加与图片大小相同的页面
                    PdfPageBase page = doc.Pages.Add(new SizeF(width, height));
                    //根据图片创建 PdfImage 对象
                    PdfImage pdfImage = PdfImage.FromImage(mImage);
                    //在页面的 (0, 0) 处绘制图片
                    page.Canvas.DrawImage(pdfImage, 0, 0, pdfImage.Width, pdfImage.Height);
                }
            }
            //获取服务的文件路径
            string dir = "Resource" + Path.DirectorySeparatorChar + "pdf" + Path.DirectorySeparatorChar + DateTime.Now.ToString("yyyy-MM-dd").Replace('-', Path.DirectorySeparatorChar) + Path.DirectorySeparatorChar;
            string absoluteDir = Path.Combine(GlobalContext.HostingEnvironment.ContentRootPath, dir);
            if (!Directory.Exists(absoluteDir))
            {
                Directory.CreateDirectory(absoluteDir);
            }
            //获取随机的文件名
            string newFileName = SecurityHelper.GetGuid() + ".pdf";
            string absoluteFileName = absoluteDir + newFileName;
            //保存文档
            doc.SaveToFile(absoluteFileName);
            return FileHelper.DownloadFile(dir + newFileName, 1);
        }

觉得有用点个赞,欢迎学习交流

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宋亦琛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值