c# 将页面导出到word(含图片及控件)

/// <summary>
        /// 创建word
        /// <param name="filePath">文件路径 </param>
        /// </summary>
        protected void CreateWordFile(string filePath)
                {
            if (File.Exists(filePath))
                        {
                File.Delete(filePath);
            }
            using (FileStream fs = File.Create(filePath))
                        {
                fs.Close();
            }
        }
    /// <summary>
        /// 将页面内容输出到Word
        /// <param name="filePath">文件路径 </param>
        /// </summary>
        protected void WritePageContentToWord(string filePath)
        {
            string pageHtml = string.Empty;
            StringWriter sw = new StringWriter();
            HtmlTextWriter htw = new HtmlTextWriter(sw);
            this.divAll.RenderControl(htw);
            pageHtml = sw.ToString();
            pageHtml.Replace("../App_Themes/blue/Image/FiveStar.png", Server.MapPath("./App_Themes/blue/Image/FiveStar.png"));
            pageHtml.Replace("../App_Themes/blue/Image/FourStar.png", Server.MapPath("./App_Themes/blue/Image/FourStar.png"));
            pageHtml.Replace("../App_Themes/blue/Image/ThreeStar.png", Server.MapPath("./App_Themes/blue/Image/ThreeStar.png"));//这里将图片相对路径换成绝对路径

            if (File.Exists(filePath))
            {

                StreamWriter streamW = File.CreateText(filePath);
                streamW.Write(pageHtml);
                streamW.Close();
            }
            sw.Close();
            htw.Close();
        }
protected void InsertPhoto(string filePath)
        {
            //生成图片
            string imagePath = MapPath("/File2/" + Request.QueryString["ID"].ToString() + ".png");
            Session["imagePath"] = imagePath;
            //插入图片;
            StringBuilder reportContent = new StringBuilder();

            object Nothing = System.Reflection.Missing.Value;
            object filename = filePath;
            Microsoft.Office.Interop.Word.Application WordApp2 = new Microsoft.Office.Interop.Word.Application();//.ApplicationClass();
            Microsoft.Office.Interop.Word.Document WordDoc2 = WordApp2.Documents.Open(ref filename, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing);

            //此处打开的这个word实际为网页的文本格式(可用记事本打开看一下),需另存为doc格式,
            //才能把图片嵌入到word文档中,否则保存的永远就是链接
            WordDoc2.SaveAs(filePath, WdSaveFormat.wdFormatDocument);

            //循环Word文档中所有插入的图元,查找显示为空的图元,进行替换
            //因该Word文档是由HTML生成而来,存放的图片实际为空,类型为wdInlineShapeLinkedPicture,需替换为实际类型
            //IEnumerable<InlineShape> shape2 =new IEnumerable  WordDoc2.InlineShapes;
            foreach (InlineShape shape in WordDoc2.InlineShapes)         {
                //查找插入图形的位置

                    object oRange = WordDoc2.Paragraphs[17].Range;//获取图片插入的位置
                    object LinkToFile = false;
                    object SaveWithDocument = true;
                //插入图形
                WordDoc2.InlineShapes.AddPicture(imagePath, ref LinkToFile, ref SaveWithDocument, ref oRange);
                //删除显示为空的图元
                shape.Select();
                WordApp2.Selection.Delete();
                break;
             }
            //打开该文档时默认视图为页面视图方式
            WordDoc2.ActiveWindow.View.Type = WdViewType.wdPrintView;
            //保存插入图片的Word
            WordDoc2.SaveAs(filePath, WdSaveFormat.wdFormatDocument);

            //关闭所有的Word文档
            WordApp2.NormalTemplate.Saved = true;
            Object saveChanges2 = Microsoft.Office.Interop.Word.WdSaveOptions.wdSaveChanges;
            WordApp2.Documents.Close(saveChanges2, Type.Missing, Type.Missing);

            //退出Word应用程序
            try       {
                WordApp2.Application.Quit(Type.Missing, Type.Missing, Type.Missing);
                if (WordApp2 != null)          {
                    WordApp2 = null;
                }
            }
            catch { }
            finally       {
                GC.Collect();
                GC.WaitForPendingFinalizers();
                GC.Collect();
                GC.WaitForPendingFinalizers();
            }
        }
protected void lnkToWord_Click(object sender, EventArgs e)
        {
            Chart2.SaveImage(Server.MapPath("~/File2/" + Request.QueryString["ID"].ToString() + ".png"), ChartImageFormat.Png);
            Label lbName = fv.FindControl("lbName") as Label;
            string wordname = lbName.Text.ToString() + Request.QueryString["ID"];
            string filePath = MapPath("~/File2/") + wordname + ".doc";  //文件路径
            CreateWordFile(filePath);
            WritePageContentToWord(filePath);
            InsertPhoto(filePath);
            string FileName = wordname + ".doc";
            Response.Redirect(string.Format("~/File2/{0}", FileName));
            string ImagePath = Session["imagePath"].ToString();
        }

具体做法是:先将页面写成html,在写成html时将图片相对路径改成绝对路径,保存成一份word到服务器。此页面包含.Net里面的chart控件,所以先将chart控件变成图片存入服务器,最后将图片插入到word

时间: 2024-08-01 22:42:58

c# 将页面导出到word(含图片及控件)的相关文章

支持打印和打印预览Word文档处理控件TX Text Control ActiveX

TX Text Control ActiveX 控件为软件开发人员提供了强大的所见所得的Word文档处理,可以加载.编辑和保存Wod格式(DOCX.DOC.RTF等),生成Word报表,文档转换,导出和直接创建PDF和PDF/A文件.该产品分发完全免费,包含了标准版.专业版和企业版. 具体功能: 支持打印和打印预览 文档可以分割为多个不同的段落,每个段落都可以单独的格式化 支持定义超链接,并加载和保存HTML文件 支持添加项目符号和数字列表 支持多层Undo和Redo操作 支持插入任何数量的列到

可导出窗体和背景的报表控件QuickReport

QuickReport 是一个100% 用Delphi 代码编写的分栏报表生成器控件,它可与Delphi 和C++Builder 完美整合,并且Delphi/C++Builder IDE 中使用表单设计器作为报表设计器来设计报表. 具体功能: 报表设计:QuickReport 是一个用Delphi 编写的分栏报表生成器.可与Delphi 和C++Builder 完美整合,在Delphi/C++Builder IDE 中使用表单设计器作为报表设计器来设计报表. 数据连接:Quickreport 可

WP8__实现ListBox横向滑动及子项绑定图片等控件

<!--实现绑定的图片等信息 ListBox水平滚动--> <Grid> <Grid.Resources> <Style x:Key="horizontalListBoxStyle" TargetType="ListBox"> <Setter Property="ItemsPanel"> <Setter.Value> <ItemsPanelTemplate> &l

【WPF】【UWP】借鉴 asp.net core 管道处理模型打造图片缓存控件 ImageEx

原文:[WPF][UWP]借鉴 asp.net core 管道处理模型打造图片缓存控件 ImageEx 在 Web 开发中,img 标签用来呈现图片,而且一般来说,浏览器是会对这些图片进行缓存的. 比如访问百度,我们可以发现,图片.脚本这种都是从缓存(内存缓存/磁盘缓存)中加载的,而不是再去访问一次百度的服务器,这样一方面改善了响应速度,另一方面也减轻了服务端的压力. 但是,对于 WPF 和 UWP 开发来说,原生的 Image 控件是只有内存缓存的,并没有磁盘缓存的,所以一旦程序退出了,下次再

Android 自定义 HorizontalScrollView 打造再多图片(控件)也不怕 OOM 的横向滑动效果

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38140505 自从Gallery被谷歌废弃以后,Google推荐使用ViewPager和HorizontalScrollView来实现Gallery的效果.的确HorizontalScrollView可以实现Gallery的效果,但是HorizontalScrollView存在一个很大的问题,如果你仅是用来展示少量的图片,应该是没问题的,但是如果我希望HorizontalScr

我写的一个 Qt 显示图片的控件

Qt 中没有专门显示图片的控件,通常我们会使用QLabel来显示图片.但是QLabel 显示图片的能力还是有点弱.比如不支持图像的缩放一类的功能,使用起来不是很方便.因此我就自己写了个简单的类. 我这个类支持三种图像显示模式,我分别称之为:FIXED_SIZE, CENTRED,AUTO_ZOOM, AUTO_SIZE. FIXED_SIZE 模式下,显示的图像大小等于图像尺寸乘以缩放因子,如果控件的尺寸小于这个大小则多出的部分被裁切掉. FIX_SIZE_CENTRED模式与FIXED_SIZ

【WP8】图片缓存控件

在做图片相关的应用的时候,经常需要用大图片的缓存,默认的Image控件不支持缓存的支持,本文自定义一个支持图片缓存的控件 当图片的地址是网络图片时候 根据Url判断该图片是否存在本地,如果存在,则直接从本地读取,如果不存在,则通过Http请求下载该图片,保存到本地,然后读取到Image控件中 当图片为本地地址的时候,直接从本地读取,设置到Image控件中 1.在定义可缓存图片控件之前,先封装一下文件存储的帮助类 using System; using System.IO; using Syste

Android开发技巧——定制仿微信图片裁剪控件

拍照--裁剪,或者是选择图片--裁剪,是我们设置头像或上传图片时经常需要的一组操作.上篇讲了Camera的使用,这篇讲一下我对图片裁剪的实现. 背景 下面的需求都来自产品. 裁剪图片要像微信那样,拖动和放大的是图片,裁剪框不动. 裁剪框外的内容要有半透明黑色遮罩. 裁剪框下面要显示一行提示文字(这点我至今还是持保留意见的). 在Android中,裁剪图片的控件库还是挺多的,特别是github上比较流行的几个,都已经进化到比较稳定的阶段,但比较遗憾的是它们的裁剪过程是拖动或缩放裁剪框,于是只好自己

从数码图片读取条码或者生成数码图片条码控件VintaSoftBarcode.NET Library

VintaSoftBarcode.NET Library 条形码控件是一个完美的条码读写.NET 库,支持从数码图片读取条码或者生成数码图片条码. 具体功能: 支持多线程 支持创建条码图片 支持为生成的条码指定大小和分辨率 拥有许多选项控制条码创建 支持从图片对象.图片文件.和PDF文档读取条码 编程环境:.NET 框架. 这是一个可完全操纵的.NET 库,保证在.NET 框架中实现快速工作. 能够识别图片中的所有条码. 确认已识别的条码类型. 返回条码的字符串值. 自动检测条码的方位. 返回条