项目中用到了将邮件内容转换为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. bzoj4810 [Ynoi2017]由乃的玉米田

    Description 由乃在自己的农田边散步,她突然发现田里的一排玉米非常的不美.这排玉米一共有N株,它们的高度参差不齐. 由乃认为玉米田不美,所以她决定出个数据结构题   这个题是这样的: 给你一 ...

  2. javascript执行原理

    执行环境 当执行流执行到函数时会创建一个执行环境,这个执行环境包含了函数内部 语句可以访问的所有变量和函数,当代码执行完时,销毁执行环境.所以一般情 况下,局部变量在函数执行完时会被销毁. 作用域.调 ...

  3. windows10 配置 华为vpn客户端

    2017-05-08 1. 安装客户端软件VPNClient_V100R001C02SPC703.exe 2. 新建vpn 安装完成后,打开客户端连接vpn,发现未启用虚拟网卡(这是因为还需要安装客户 ...

  4. 用kotlin方式打开《第一行代码:Android》

    参考:<第一行代码:Android>第2版--郭霖 注1:本文为原创,例子可参考郭前辈著作:<第一行代码:Android> 注2:本文不赘述android开发的基本理论,不介绍 ...

  5. Natas Wargame Level 15 Writeup(Content-based Blind SQL Injection)

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAq4AAACGCAYAAAAcnwh0AAAABHNCSVQICAgIfAhkiAAAIABJREFUeF

  6. Samba文件共享服务

    Samba起源: 早期网络想要在不同主机之间共享文件大多要用FTP协议来传输,但FTP协议仅能做到传输文件却不能直接修改对方主机的资料数据,这样确实不太方便,于是便出现了NFS开源文件共享程序:NFS ...

  7. java 解决时间相减问题

    比如 Date currentTime ="2011-06-20 9:23:50"; Date endTime="2011-06-21 10:33:56"; 要 ...

  8. Java基础知识二次学习--第四章 异常

    第四章 异常处理   时间:2017年4月26日11:16:39~2017年4月26日11:28:58 章节:04章_01节 04章_02节 视频长度:20:46+01:16 内容:异常的概念 心得: ...

  9. Selenium 高阶应用之WebDriverWait 和 expected_conditions

    Seleniium 是相当不错的一个第三方测试框架,可惜目前国内已经无法访问其官网(FQ可以). 不知道大家是否有认真查看过selenium 的api,我是有认真学习过的.selenium 的api中 ...

  10. Spring-bean作用域scope详解

    Spring Framework支持五种作用域(其中有三种只能用在基于web的Spring ApplicationContext). singleton 在每个Spring IoC容器中一个bean定 ...