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);
}
觉得有用点个赞,欢迎学习交流