项目中用到了将邮件内容转换为Pdf、Word、Excel格式,做为邮件附件发送。

查了一些解决方案,走了一些弯路。以此代码记录下。

转换PDF需要下载NReco.PdfGenerator.dll

以下是相关代码。

 /// <summary>
/// 格式转换
/// </summary>
/// <param name="content">邮件内容</param>
/// <param name="fileType">转换类型</param>
/// <returns></returns>
private static Byte[] ChangeContent(string content, string fileType)
{ Byte[] fileSteream = null;
try
{ // 定义正则表达式用来匹配 img 标签
Regex regImg = new Regex(@"<img\b[^<>]*?\bmarktype=[""'][^<>]*>", RegexOptions.IgnoreCase);
Regex regImgMarktype = new Regex(@"\bsrc=[""'](?<src>[^\s\t\r\n""'<>]*)[^<>]*", RegexOptions.IgnoreCase);
MatchCollection matches = regImg.Matches(content); // 取得匹配项列表
foreach (Match match in matches)
{
string srcUrl = "";
if (match.Value != null)
{
MatchCollection matchesMarktype = regImgMarktype.Matches(match.Value);
foreach (Match mat in matchesMarktype)
{
var src = mat.Groups["src"].Value;
if (!string.IsNullOrEmpty(src))
{
srcUrl = ServerCommon.SharedDirc + src; //替换图片路径
content = content.Replace(src, srcUrl);
}
}
}
} switch (fileType.ToUpper())
{
case "PDF":
fileSteream = ConversionFormat.HtmlToPDF(content);
break;
case "WORD":
fileSteream = ConversionFormat.HtmlToWrod(content);
break;
case "EXCEL":
fileSteream = ConversionFormat.HtmlToExcel(content);
break;
default:
break;
}
}
catch (Exception ex)
{
//log
} return fileSteream;
} /// <summary>
/// 输出内容格式转换
/// </summary>
public class ConversionFormat
{
public static byte[] HtmlToPDF(string content)
{
var meat = "<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>";//解决PDF乱码问题
var htmlContent = meat + content;
var htmlToPdf = new NReco.PdfGenerator.HtmlToPdfConverter();
var pdfBytes = htmlToPdf.GeneratePdf(htmlContent); return pdfBytes;
} public static byte[] HtmlToWrod(string content)
{
//获得字节数组
byte[] data = new UTF8Encoding().GetBytes(content); return data;
} public static byte[] HtmlToExcel(string content)
{
//获得字节数组
byte[] data = new UTF8Encoding().GetBytes(content); return data;
}
}

简单测试下,添加一个保存文件的方法,就能看到效果了。

 public void SaveFile(string fileName, byte[] Bytes)
{
string filePath = @"D:\temp\" + fileName;
if (!(Directory.Exists(@"D:\temp")))
{
Directory.CreateDirectory(@"D:\temp");
}
if (File.Exists(filePath))
{
return;
} FileStream fs = new FileStream(filePath, FileMode.Create);
//获得字节数组
//byte[] data = new UTF8Encoding().GetBytes(pdfBytes);
//开始写入
fs.Write(Bytes, , Bytes.Length);
//清空缓冲区、关闭流
fs.Flush();
fs.Close();
}

将页面内容转换Pdf\Word\Excel格式的更多相关文章

  1. PDF/WORD/EXCEL 图片预览

    一.PDF/WORD/EXCEL 转 XPS 转 第一页内容 转 图片 WORD.EXCEL转XPS (Office2010) public bool WordToXPS(string sourceP ...

  2. 在线文档转换API word,excel,ppt等在线文件转pdf、png

    在线文档转换API提供word,excel,ppt等在线文件转pdf.png等,文档:https://www.juhe.cn/docs/api/id/259 接口地址:http://v.juhe.cn ...

  3. asp.net将页面内容按需导入Excel,并设置excel样式,下载文件(解决打开格式与扩展名指定的格式不统一的问题)

    //请求一个excel类 Microsoft.Office.Interop.Excel.ApplicationClass excel = null; //创建 Workbook对象 Microsoft ...

  4. PDF/WORD/EXCEL/PPT 文档在线阅读

    查资料看了2种解决方法: 1.通过办公软件dll转换,用flans去看 2.通过Aspose转换成pdf格式,在用js前台读pdf(我用的pdf.js) 今天我解决的就是WORD/EXCEL/PPT ...

  5. Ireport 报表导出 Poi + ireport 导出pdf, word ,excel ,htm

    Ireport 报表导出 Poi + ireport 导出pdf, doc ,excel ,html 格式 下面是报表导出工具类reportExportUtils 需要导出以上格式的报表 只需要调用本 ...

  6. php pdf word excel 操作方法

    很早的时候,用php生成execl都是件麻烦的事,我一般都会用csv来替代,现在这类工具就很多了,并且比较成熟了.不光有excel的,word,pdf. 1,php excelreader操作exce ...

  7. 将页面中表格数据导出excel格式的文件(vue)

    近期由于项目需要,需要将页面中的表格数据导出excel格式的文件,折腾了许久,在网上各种百度,虽然资料不少,但是大都不全,踩了许多坑,总算是皇天不负有心人,最后圆满解决了. 1.安装相关依赖(npm安 ...

  8. solr建立pdf/word/excel索引的方法

    PS: 本文假设你已经成功的搭建了一个Solr服务器步骤如下:(1)准备好一份Solr的源码,假设现在保存在c:\apache-solr-1.4.1\目录下(2)从https://issues.apa ...

  9. pdf word excel ppt 在线预览方案收集

    https://www.idocv.com/docs.html http://www.cnblogs.com/wolf-sun/p/3569960.html http://coolwanglu.git ...

随机推荐

  1. Swift、Objective-C 单例模式 (Singleton)

    Swift.Objective-C 单例模式 (Singleton) 本文的单例模式分为严格单例模式和不严格单例模式.单例模式要求一个类有一个实例,有公开接口可以访问这个实例.严格单例模式,要求一个类 ...

  2. DOS(Disk Operation System:磁盘操作系统)常见命令

    学习Java语言的第一节课总是练习DOS命令,用记事本敲出自己的第一个Java语言的HelloWorld程序案例,在此特意总结一下基本的DOS命令以作记录和分享. Windows+R快捷键---> ...

  3. Linux下Tomcat进行远程调试

    1.更改tomcat远程调试端口(可以使用默认端口不更改) 打开目录下的catalina.sh文件,找到JPDA_ADDRESS=”8000”,8000代表远程调试端口,可以更改成其他没有被占用的端口 ...

  4. Vue H5 History 部署IIS上404问题

    背景简介 vue使用vue-router时,默认的地址并不美观,以#进行分割,例如:http://www.xxx.com/#/main. 为了访问地址能像正常的url一样,例如:http://www. ...

  5. CSS清除浮动各种方法

    当容器的高度为auto,且容器的内容中有浮动(float为left或right)的元素,在这种情况下,容器的高度不能自动伸长以适应内容的高度,使得内容溢出到容器外面而影响(甚至破坏)布局的现象.这个现 ...

  6. C#集合之列表

    .NET Framework为动态列表List提供泛型类List<T>.这个类实现了IList,ICollection,IEnumerable,IList<T>,ICollec ...

  7. Vue2.0的变化 ,组件模板,生命周期,循环,自定义键盘指令,过滤器

    组件模板: 之前: <template> <h3>我是组件</h3><strong>我是加粗标签</strong> </templat ...

  8. PHP获得上(两)周时间

    就不手写了

  9. 路由-when-resolve

    文件列表:luyou.html,app.js,home.html,user.html,wy.json luyou.html <!DOCTYPE html> <html ng-app= ...

  10. 详解JS对象

                                          [自定义对象] 1.基本概念 ①对象是包含一系列无序属性和方法的集合: ②键值对:对象中的数据是以键值对的形式存在的,以键取 ...