项目中用到了将邮件内容转换为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. 频繁模式挖掘中Apriori、FP-Growth和Eclat算法的实现和对比

    最近上数据挖掘的课程,其中学习到了频繁模式挖掘这一章,这章介绍了三种算法,Apriori.FP-Growth和Eclat算法:由于对于不同的数据来说,这三种算法的表现不同,所以我们本次就对这三种算法在 ...

  2. 【正常向】CODEVS上分黄金

    白银上分黄金失败=.= 在之前有很认真的写了一波排序,所以排序并不是很怂,还是那个理,现阶段学习的都是比较简单的排序,都是所谓的冒泡排序啊,桶排序这类,至于插排和选择排序,再往后又是什么快拍就很尬了. ...

  3. 【算法系列学习】HDU 5527 Too Rich贪心

    http://www.cnblogs.com/AOQNRMGYXLMV/p/4934747.html #include<iostream> #include<cstdio> # ...

  4. unity collider 和 trigger 触发条件

    物体A,物体B(都含有collider组件) collider触发条件:A和B至少一方是  未勾选is Kinematic的rigidbody,且都未勾选 is trigger.当只有一方是rigid ...

  5. ACE框架 同步原语设计

    ACE框架常用的同步机制设计成统一的原语接口.同步原语使用系统平台(操作系统,多线程库)提供的同步原语,并为系统平台不提供的同步原语提供模拟实现.ACE框架使用了外观模式和适配器分两层,将同步原语统一 ...

  6. 思考题:用Use Case获取需求的方法是否有什么缺陷,还有什么地方需要改进?(提示:是否对所有的应用领域都适用?使用的方便性?.......)

    思考题: 用Use Case获取需求的方法是否有什么缺陷,还有什么地方需要改进?(提示:是否对所有的应用领域都适用?使用的方便性?.......) 简答: 一.用例解释: 在软件工程中,用例是一种在开 ...

  7. JavaEE开发之记事本完整案例(SpringBoot + iOS端)

    上篇博客我们聊了<JavaEE开发之SpringBoot整合MyBatis以及Thymeleaf模板引擎>,并且在之前我们也聊了<Swift3.0服务端开发(五) 记事本的开发(iO ...

  8. git pull冲突:commit your changes or stash them before you can merge.

    今天用git pull来更新代码,遇到了下面的问题: error: Your local changes to the following files would be overwritten by ...

  9. 添加本地jar包到本地的Maven仓库以及在Maven仓库中搜索想要添加的jar包

    今天在学习Memacached的时候,将java_memcached-release下载下来,要使用maven来集成相关的jar包,Memcached的jar包如下: java_memcached-r ...

  10. linux 下 查看是32位还是64位系统 命令

    文章引自:http://zhidao.baidu.com/question/583981849.html 方法1:getconf LONG_BIT 查看 如下例子所示: 32位Linux系统显示32, ...