C# 用Spire根据word模板和插入的标签 填写数据并导出

复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Spire.Doc;
using Spire.Doc.Documents;
using Spire.Doc.Fields;
using System.Drawing;

namespace SandInspect.Common
{
    public class Bookmark
    {

        private Document doc = null;
        public Bookmark(Document document)
        {
            doc = document;
        }

        /// <summary>
        /// 用文本替换指定书签的内容
        /// </summary>
        /// <param name="bookmarkName">书签名</param>
        /// <param name="text">文本</param>
        /// <param name="saveFormatting">删除原始书签内容时,是否保留格式</param>
        /// <returns>TextRange</returns>
        public Spire.Doc.Fields.TextRange ReplaceContent(string bookmarkName, string text, bool saveFormatting)
        {
            BookmarksNavigator navigator = new BookmarksNavigator(doc);
            navigator.MoveToBookmark(bookmarkName);//指向特定书签
            navigator.DeleteBookmarkContent(saveFormatting);//删除原有书签内容     
            Spire.Doc.Interface.ITextRange textRange = navigator.InsertText(text);//写入文本
            return textRange as TextRange;
        }

        /// <summary>
        /// 用图片替换指定书签的内容
        /// </summary>
        /// <param name="bookmarkName">书签名</param>
        /// <param name="picPath">图片路径</param>
        /// <param name="widthScale">宽度缩放比例,0以上正整数</param>
        /// <param name="heightScale">高度缩放比例,0以上正整数</param>
        /// <param name="wrapStyle">环绕方式</param>
        /// <param name="horizontalAlignment"></param>
        public void ReplaceContent(string bookmarkName, string picPath, float widthScale, float heightScale, TextWrappingStyle wrapStyle, ShapeHorizontalAlignment horizontalAlignment)
        {
            //BookmarksNavigator navigator = new BookmarksNavigator(doc);
            //navigator.MoveToBookmark(bookmarkName);
            //navigator.DeleteBookmarkContent(false);
            //IParagraphBase paragraphBase = navigator.InsertParagraphItem(ParagraphItemType.Picture);//插入类型为图片
            //Image image = Image.FromFile(picPath);//加载图片
            //DocPicture picture = paragraphBase.OwnerParagraph.AppendPicture(image);//插入图片
            ////picture.WidthScale = widthScale;
            ////picture.HeightScale = heightScale;
            ////picture.TextWrappingStyle = wrapStyle;
            //picture.HorizontalPosition = 0f;
            //picture.VerticalPosition = 0f;
            ////设置文字环绕方式           
            //picture.TextWrappingStyle = TextWrappingStyle.None;
            ////设置图片大小          
            //picture.Width = 160;
            //picture.Height = 160;
            //picture.HorizontalAlignment = horizontalAlignment;


            //创建BookmarksNavigator实例
            BookmarksNavigator bn = new BookmarksNavigator(doc);
            //找到名为Spire的书签
            bn.MoveToBookmark(bookmarkName, true, true);
            //添加一个secton并命名为section0
            Section section0 = doc.AddSection();
            //为section0添加一个段落
            Paragraph paragraph = section0.AddParagraph();
            paragraph.Text = "";
            //加载一张图片
            Image image = Image.FromFile(picPath);
            //为段落添加图片
            DocPicture picture = paragraph.AppendPicture(image);
            picture.HorizontalPosition = 0f;
            picture.VerticalPosition = 0f; //设置图像的停靠位置方式
            //设置图片大小          
            picture.Width = 145;
            picture.Height = 145;
            picture.HorizontalAlignment = ShapeHorizontalAlignment.Center;
            picture.TextWrappingStyle = TextWrappingStyle.None;

            //把含有图片的段落插入到书签位置
            bn.InsertParagraph(paragraph);
            doc.Sections.Remove(section0);


        }


        /// <summary>
        /// 用图片替换指定书签的内容2
        /// </summary>
        /// <param name="bookmarkName">书签名</param>
        /// <param name="picPath">图片路径</param>
        /// <param name="widthScale">宽度缩放比例,0以上正整数</param>
        /// <param name="heightScale">高度缩放比例,0以上正整数</param>
        /// <param name="wrapStyle">环绕方式</param>
        /// <param name="horizontalAlignment"></param>
        public void ReplaceContent2(string bookmarkName, string picPath, float widthScale, float heightScale, TextWrappingStyle wrapStyle, ShapeHorizontalAlignment horizontalAlignment)
        {
            //创建BookmarksNavigator实例
            BookmarksNavigator bn = new BookmarksNavigator(doc);
            //找到名为Spire的书签
            bn.MoveToBookmark(bookmarkName, true, true);
            //添加一个secton并命名为section0
            Section section0 = doc.AddSection();
            //为section0添加一个段落
            Paragraph paragraph = section0.AddParagraph();
            paragraph.Text = "";
            //加载一张图片
            Image image = Image.FromFile(picPath);
            //为段落添加图片
            DocPicture picture = paragraph.AppendPicture(image);
            picture.HorizontalPosition = 0f;
            picture.VerticalPosition = 0f; //设置图像的停靠位置方式
            //设置图片大小          
            picture.Width = 300;
            picture.Height = 300;
            picture.HorizontalAlignment = ShapeHorizontalAlignment.Center;
            picture.TextWrappingStyle = TextWrappingStyle.None;

            //把含有图片的段落插入到书签位置
            bn.InsertParagraph(paragraph);
            doc.Sections.Remove(section0);


        }

        /// <summary>
        /// 用表格替换指定书签的内容
        /// </summary>
        /// <param name="bookmarkName">书签名</param>
        /// <param name="table">Table实例</param>
        public void ReplaceContent(string bookmarkName, Table table)
        {
            BookmarksNavigator navigator = new BookmarksNavigator(doc);
            navigator.MoveToBookmark(bookmarkName);
            TextBodyPart body = new TextBodyPart(doc);
            body.BodyItems.Add(table);
            navigator.ReplaceBookmarkContent(body);
        }

        /// <summary>
        /// 创建表格并写入数据,返回Table对象
        /// </summary>
        /// <param name="rowsNum">行数</param>
        /// <param name="columnsNum">列数</param>
        /// <param name="columnWidth">列宽</param>
        /// <param name="horizontalAlignment">水平对齐方式</param>
        /// <param name="datatable">DataTable实例</param>
        /// <returns></returns>
        public Table CreateTable(int rowsNum, int columnsNum, float columnWidth, RowAlignment horizontalAlignment, System.Data.DataTable datatable)
        {
            Table table = new Table(doc, true, 1f);//初始化Table对象
            table.ResetCells(rowsNum, columnsNum);//设置行数和列数
            //填充数据
            for (int i = 0; i < datatable.Rows.Count; i++)
            {
                for (int j = 0; j < datatable.Columns.Count; j++)
                {
                    table.Rows[i].Cells[j].AddParagraph().AppendText(datatable.Rows[i][j].ToString());
                }
            }
            //设置列宽
            for (int i = 0; i < rowsNum; i++)
            {
                for (int j = 0; j < columnsNum; j++)
                {
                    table.Rows[i].Cells[j].Width = columnWidth;
                }
            }
            table.TableFormat.HorizontalAlignment = horizontalAlignment;//表格水平对齐方式
            return table;
        }

    }
}
复制代码

Bookmark类代码

 

下面是调用方法 插入文字和图片

复制代码
  public class WordModel
        {
            public string DH { get; set; }
            public string Url { get; set; }

            public string YSL { get; set; }

            public string YSLX { get; set; }

            public string BeginTime { get; set; }

            public string EndTime { get; set; }

            public string CLMS { get; set; }

            public string YSCMS { get; set; }

            public string SFGK { get; set; }

            public string MDGK { get; set; }

            public string Type { get; set; }

        }


        public ActionResult BatchOutPutWordBy(WordModel wm)
        {
            try
            {
               

                if (wm.Type == "1")//机制砂
                {
                    Document doc = new Document();
                    doc.LoadFromFile(Server.MapPath("~/UploadFiles/jzsword.docx"));
                    Common.Bookmark bookmark = new Common.Bookmark(doc);
                    bookmark.ReplaceContent("dh", wm.DH, true);
                    bookmark.ReplaceContent("ysl", wm.YSL, true);
                    bookmark.ReplaceContent("yslx", wm.YSLX, true);
                    bookmark.ReplaceContent("kssj", wm.BeginTime, true);
                    bookmark.ReplaceContent("jssj", wm.EndTime, true);
                    bookmark.ReplaceContent("clms", wm.CLMS, true);
                    bookmark.ReplaceContent("yscms", wm.YSCMS, true);
                    bookmark.ReplaceContent("sfgk", wm.SFGK, true);
                    bookmark.ReplaceContent("mdgk", wm.MDGK, true);

                    var s2 = wm.Url.Replace(TAppSettingManager.Get("ImgPath"), "~") ;
                    string picPath = Server.MapPath(s2);

                    bookmark.ReplaceContent("url", picPath, 25, 25, TextWrappingStyle.TopAndBottom, ShapeHorizontalAlignment.Center);
                    //生成Word文件
                    var name = wm.DH;
                    var yurl = TAppSettingManager.Get("ImgPath") + "/UploadFiles/words/" + name + ".PDF";
                    if (System.IO.File.Exists(yurl))
                    {
                        System.IO.File.Delete(yurl);
                    }
                    var str = Server.MapPath("~/UploadFiles/words/" + name + ".PDF");
                    doc.SaveToFile(str, FileFormat.PDF);
                    string path = TAppSettingManager.Get("ImgPath") + "/UploadFiles/words/" + name + ".PDF";
                    return Json_IsoksSuccess(path);
                }
                else
                {
                    Document doc = new Document();
                    doc.LoadFromFile(Server.MapPath("~/UploadFiles/ylword.docx"));
                    Common.Bookmark bookmark = new Common.Bookmark(doc);
                    bookmark.ReplaceContent("dh", wm.DH, true);
                    bookmark.ReplaceContent("ysl", wm.YSL, true);
                    bookmark.ReplaceContent("yslx", wm.YSLX, true);
                    bookmark.ReplaceContent("kssj", wm.BeginTime, true);
                    bookmark.ReplaceContent("jssj", wm.EndTime, true);
                    bookmark.ReplaceContent("clms", wm.CLMS, true);
                    var s2 = wm.Url.Replace(TAppSettingManager.Get("ImgPath"), "~");
                    string picPath = Server.MapPath(s2);

                    bookmark.ReplaceContent("url", picPath, 25, 25, TextWrappingStyle.TopAndBottom, ShapeHorizontalAlignment.Center);
                    //生成Word文件
                    var name = wm.DH;
                    var yurl = TAppSettingManager.Get("ImgPath") + "/UploadFiles/words/" + name + ".PDF";
                    if (System.IO.File.Exists(yurl))
                    {
                        System.IO.File.Delete(yurl);
                    }
                    var str = Server.MapPath("~/UploadFiles/words/" + name + ".PDF");
                    doc.SaveToFile(str, FileFormat.PDF);
                    string path = TAppSettingManager.Get("ImgPath") + "/UploadFiles/words/" + name + ".PDF";
                    return Json_IsoksSuccess(path);
                }
                    return Json_IsoksError("参数错误");
            }
            catch (Exception ex)
            {
                return Json_IsoksError(ex.Message);
            }
        }
复制代码

需要引入 NPOISpire.Pdf    Spire.Doc     Spire.License

 

posted @   吃兔子的萝卜7  阅读(769)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示