公司项目,需要对一个列表做批量保存到Doc的功能。

后来通过架构人员协助,采用MemoryStream二进制流的方式保存为htm文档。

然后通过第3方的dll,ICSharpCode.SharpZipLib打包成zip文件。

抛弃doc的原因是流的形式保存为doc,office会解析为htm,但是Word样式很难维护,出现表格变粗的情况。

本地解压缩,从而实现批量保存的功能。

代码如下,

  public void CreateZip()
{
List<MemoryStream> memList = new List<MemoryStream>();
for (int i = 0; i < 200; i++)
{
string a = @"<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=utf8'>
<title>Ctrip.com Internet & Intranet - ViewEmail</title>
</head>
<body>
<h1>test</h1>
</body>
</html>";
byte[] b = Encoding.GetEncoding("gb2312").GetBytes(a);
MemoryStream mstream = new MemoryStream();
mstream.Write(b, 0, b.Length);
memList.Add(mstream);
}
MemoryStream ms = new MemoryStream();
using (ZipFile zipF = ZipFile.Create(ms))
{
zipF.BeginUpdate();
for (int i = 0; i < memList.Count; i++)
{
zipF.Add(new MemoryDataSource(memList[i].GetBuffer()), "a" + i.ToString() + ".htm");
}
zipF.CommitUpdate();
}
//将MemoryStream转换,否则发送时候可能出错
byte[] byteBuffer = ms.ToArray();
ms.Flush();
ms.Close();
Response.Clear();
Response.ContentType = "Application/zip";
Response.AppendHeader("content-disposition", "attachment; filename=" + System.Web.HttpUtility.UrlEncode("test" + DateTime.Now.ToString("yyyyMMdd") + ".zip", System.Text.Encoding.UTF8));
Response.BinaryWrite(byteBuffer);
Response.End();
} protected void Button1_Click(object sender, EventArgs e)
{
CreateZip();
} class MemoryDataSource : IStaticDataSource
{
#region Constructors
/// <summary>
/// Initialise a new instance.
/// </summary>
/// <param name="data">The data to provide.</param>
public MemoryDataSource(byte[] data)
{
data_ = data;
}
#endregion #region IDataSource Members
/// <summary>
/// Get a Stream for this <see cref="IStaticDataSource"/>
/// </summary>
/// <returns>Returns a <see cref="Stream"/></returns>
public Stream GetSource()
{
return new MemoryStream(data_);
}
#endregion
#region Instance Fields
readonly byte[] data_;
#endregion
}

  

批量保存 htm的更多相关文章

  1. mybatis批量保存的两种方式(高效插入)

    知识点:mybatis中,批量保存的两种方式 1.使用mybatis foreach标签 2.mybatis ExecutorType.BATCH 参考博客:https://www.jb51.net/ ...

  2. .NET DLL 保护措施应用实例(百度云批量保存工具)

    最近做了个小工具,将保护措施思路全部应用到了此工具中. 点我下载   百度云批量保存工具是一款专门用于自动批量保存百度云分享的软件. 本软件特点:1:完全模拟人工操作:2:可以批量保存百度分享的文件( ...

  3. sqlbulkcopy 多表批量保存

    /// <summary> /// 批量保存多表 /// </summary> /// <param name="dt1"></param ...

  4. 使用EntityManager批量保存数据

    @PersistenceContext EntityManager em; 从别的系统中定期同步某张表的数据,由于数据量较大,采用批量保存 JPA EntityManager的四个主要方法 ① pub ...

  5. Howto: 在ArcGIS10中将地图文档(mxd文档)批量保存到之前版本

     Howto: 在ArcGIS10中将地图文档(mxd文档)批量保存到之前版本 文章编号 : 38783 软件: ArcGIS - ArcEditor 10 ArcGIS - ArcInfo 10 A ...

  6. mybatis单笔批量保存

    在上一篇写了接口调用解析返回的xml,并赋值到实体.这一篇主要介绍,如何保存实体数据. 一,xml样例 <?xml version="1.0" encoding=" ...

  7. Jquery Easy UI Datagrid 上下移动批量保存数据

    DataGrid with 上下移动批量保存数据 通过前端变量保存修改数据集合,一次性提交后台执行 本想结合easyui 自带的$('#dg').datagrid('getChanges'); 方法来 ...

  8. springboot jpa 批量保存数据--EntityManager和 JpaRepository

    1: 项目里面使用springboo-boot-start-data-jpa操作数据库,通过源码,在repository上继承JpaRepository 可以实现保存操作,其中源码接口为: <S ...

  9. delphi dbgrid 批量保存

    unit uzcdbadd; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Fo ...

随机推荐

  1. [vijos1066]弱弱的战壕

    描述 永恒和mx正在玩一个即时战略游戏,名字嘛~~~~~~恕本人记性不好,忘了-_-b. mx在他的基地附近建立了n个战壕,每个战壕都是一个独立的作战单位,射程可以达到无限(“mx不赢定了?!?”永恒 ...

  2. 初学Docker

    1.基本概念Docker 包括三个基本概念镜像( Image )容器( Container )仓库( Repository )理解了这三个概念,就理解了 Docker 的整个生命周期. 2.Docke ...

  3. 【WordPress】CentOS 6.10 测试WP发送邮件失败

    1.错误信息如下: SMTP -> ERROR: Failed to connect to server: Permission denied (13) 2.解决方法: https://gist ...

  4. MSBuild常用方法

    打包后把nuget包复制到指定的目录 <Target Name="CopyPackage" AfterTargets="Pack"> <Cop ...

  5. day03_基本数据类型基本运算

    1.什么是数据类型 变量值才是我们存储的数据,所以数据类指的就是变量值的不同种类 2.为何数据要分类型? 变量值是用来保存现实世界中的状态的,那么针对不同的状态就应该用不同类型的数据去表示 3.如何用 ...

  6. hibernate的get() load() 和find()区别

    如果找不到符合条件的纪录,get()方法将返回null.如果找不到符合条件的纪录,find()方法将返回null.如果找不到符合 条件的纪录,load()将会报出ObjectNotFoundEccep ...

  7. 2017 ACM/ICPC Shenyang Online SPFA+无向图最长路

    transaction transaction transaction Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 132768/1 ...

  8. bzoj2733: [HNOI2012]永无乡(splay)

    2733: [HNOI2012]永无乡 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 3778  Solved: 2020 Description 永 ...

  9. TCP/IP网络编程之套接字类型与协议设置

    套接字与协议 如果相隔很远的两人要进行通话,必须先决定对话方式.如果一方使用电话,另一方也必须使用电话,而不是书信.可以说,电话就是两人对话的协议.协议是对话中使用的通信规则,扩展到计算机领域可整理为 ...

  10. IOS开发学习笔记011-xcode使用技巧

    xcode使用技巧 1.自动生成类 2.断点调试 3.代码段保存 4.注释标记 1.新建类,自动生成两个文件和基本结构 第一步  第二步,选择新建一个类,而不是一个源文件  第三步,书写类名一级自己要 ...