将页面内容转换Pdf\Word\Excel格式
项目中用到了将邮件内容转换为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格式的更多相关文章
- PDF/WORD/EXCEL 图片预览
一.PDF/WORD/EXCEL 转 XPS 转 第一页内容 转 图片 WORD.EXCEL转XPS (Office2010) public bool WordToXPS(string sourceP ...
- 在线文档转换API word,excel,ppt等在线文件转pdf、png
在线文档转换API提供word,excel,ppt等在线文件转pdf.png等,文档:https://www.juhe.cn/docs/api/id/259 接口地址:http://v.juhe.cn ...
- asp.net将页面内容按需导入Excel,并设置excel样式,下载文件(解决打开格式与扩展名指定的格式不统一的问题)
//请求一个excel类 Microsoft.Office.Interop.Excel.ApplicationClass excel = null; //创建 Workbook对象 Microsoft ...
- PDF/WORD/EXCEL/PPT 文档在线阅读
查资料看了2种解决方法: 1.通过办公软件dll转换,用flans去看 2.通过Aspose转换成pdf格式,在用js前台读pdf(我用的pdf.js) 今天我解决的就是WORD/EXCEL/PPT ...
- Ireport 报表导出 Poi + ireport 导出pdf, word ,excel ,htm
Ireport 报表导出 Poi + ireport 导出pdf, doc ,excel ,html 格式 下面是报表导出工具类reportExportUtils 需要导出以上格式的报表 只需要调用本 ...
- php pdf word excel 操作方法
很早的时候,用php生成execl都是件麻烦的事,我一般都会用csv来替代,现在这类工具就很多了,并且比较成熟了.不光有excel的,word,pdf. 1,php excelreader操作exce ...
- 将页面中表格数据导出excel格式的文件(vue)
近期由于项目需要,需要将页面中的表格数据导出excel格式的文件,折腾了许久,在网上各种百度,虽然资料不少,但是大都不全,踩了许多坑,总算是皇天不负有心人,最后圆满解决了. 1.安装相关依赖(npm安 ...
- solr建立pdf/word/excel索引的方法
PS: 本文假设你已经成功的搭建了一个Solr服务器步骤如下:(1)准备好一份Solr的源码,假设现在保存在c:\apache-solr-1.4.1\目录下(2)从https://issues.apa ...
- pdf word excel ppt 在线预览方案收集
https://www.idocv.com/docs.html http://www.cnblogs.com/wolf-sun/p/3569960.html http://coolwanglu.git ...
随机推荐
- CentOS_5.6下使用cmake编译MySQL_5.5.11教程
注:资料来自网络 Centos 5.6编译安装mysql 5.5.11 2011年06月24日 星期五 05:33 MySQL 最新的版本5.5.11需要cmake编译安装,估计以后的版本也会采 ...
- 蓝桥杯-骰子游戏-java
/* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: ...
- Gym - 101102C线段树
Judge Bahosain was bored at ACM AmrahCPC 2016 as the winner of the contest had the first rank from t ...
- 学习sql基础注入的方法
作为一个初学者的我,经学习发现基础真的十分重要, 这个随笔是写给我自己的希望我能坚持住 当然,我也希望对其他人有点帮助 在sql注入的过程中,我越发感觉那些基础函数的重要性 其实我感觉sql注入其实就 ...
- Scrollview中嵌套ListView(自定义组件解决)
首先,ScrollView中只能放一个控件,一般都放LinearLayout,orientation属性值为vertical.在LinearLayout中放需要呈现的内容.ListView也在其中,L ...
- 在SCIKIT中做PCA 逆运算 -- 新旧特征转换
PCA(Principal Component Analysis)是一种常用的数据分析方法.PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降 ...
- 576. Out of Boundary Paths
Problem statement: There is an m by n grid with a ball. Given the start coordinate (i,j) of the ball ...
- 二、Windows基础数据类型
六.Windows Data Types 简介: 6.1.这些数据类型都是C语言数据类型的再次的进行包装. 6.2.因为考虑到如果使用的是C中的基础数据类型可能无法表示,想表示的精准的含义. 6.3. ...
- SVN提交后自动推送消息到钉钉群
钉钉设置机器人配置 1.进入配置机器人入口 2.添加机器人 3.测试WebHook请求 本人使用Postman进行测试 4.配置SVN 4.1 配置 Pre-commit hook 设置提交内容必须包 ...
- Fail-Fast机制详解
Java中的Iterator非常方便地为所有的数据源提供了一个统一的数据读取(删除)的接口,但是在使用的时候容易报如下错误ConcurrentModificationException,原因是在使用迭 ...