Aspose.Words進行Word替換(插入圖片和水印)


   由於最近一直在忙着做着Word打印模板的一些工作,就整理一些Asponse.Words對Word文檔進行操作的資料。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Text.RegularExpressions;
using Aspose.Words;
using Aspose.Words.Drawing;
using System.IO;
using System.Drawing;


namespace ASPONSE_Words
{
    public class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("開始進行操作");
            DataTable dt = new DataTable();
            dt.Columns.Add("title", typeof(string));
            dt.Columns.Add("xm", typeof(string));
            dt.Columns.Add("xb", typeof(string));
            dt.Columns.Add("mz", typeof(string));
            dt.Columns.Add("nl", typeof(string));
            dt.Columns.Add("Photo1", typeof(string));
            dt.Columns.Add("Photo2", typeof(string));
            dt.Columns.Add("Photo3", typeof(string));
            dt.Columns.Add("Photo4", typeof(string));
            DataRow dr = dt.NewRow();
            dr["title"] = "測試";
            dr["xm"] = "華哥\n無敵";
            dr["xb"] = "男神";
            dr["mz"] = "漢族";
            dr["nl"] = "18";
            dr["Photo1"] = "../File/1.jpg";
            dr["Photo2"] = "../File/2.jpg";
            dr["Photo3"] = "../File/3.jpg";
            dr["Photo4"] = "../File/4.jpg";
            dt.Rows.Add(dr);
            var fileUrl = "../File/test11.doc";
            try
            {
                Print(fileUrl, dt);
                Console.WriteLine("替換成功");
            }
            catch (Exception)
            {
                Console.WriteLine("替換失敗");
            }

            Console.ReadKey();
        }

        public static void Print(string fileurl, DataTable dtInfo)
        {
            Document doc = new Document(fileurl);
            if (dtInfo != null && dtInfo.Rows.Count > 0)
            {
                var dr = dtInfo.Rows[0];
                foreach (DataColumn dc in dtInfo.Columns)
                {
                    var nValue = dr[dc.ColumnName] + "";
                    try
                    {
                        if (dc.ColumnName.Contains("Photo"))
                        {
                            if (File.Exists(nValue))
                            {
                                Regex reg = new Regex("#" + dc.ColumnName + "#");
                                doc.Range.Replace(reg, new ReplaceImage2(nValue), false);
                            }
                        }
                        else {
                            if (nValue.Contains("\n"))
                            {
                                doc.Range.Replace("$" + dc.ColumnName + "$", "#" + dc.ColumnName + "#", false, false);
                                Regex reg = new Regex("#" + dc.ColumnName + "#");
                                doc.Range.Replace(reg,new ReplaceHtml(nValue),false);
                            }
                            else doc.Range.Replace("$" + dc.ColumnName + "$", nValue, false, false);
                        }
                    }
                    catch (Exception ex)
                    {
                        throw ex;
                    }
                }
            }
            WaterMark(doc, "華哥無敵");
            doc.Save("huage.doc");
        }


        public static void WaterMark(Document mdoc, string wmText)
        {
            Shape waterShape = new Shape(mdoc, ShapeType.TextPlainText);
            //設置該文本的水印
            waterShape.TextPath.Text = wmText;        
            waterShape.TextPath.FontFamily = "宋體";
            waterShape.Width = 200;
            waterShape.Height = 100;
            //文本將從左下角到右上角。
            waterShape.Rotation = -40;
            //繪制水印顏色
            waterShape.Fill.Color = Color.Gray;//淺灰色水印
            waterShape.StrokeColor = Color.Gray;
            //將水印放置在頁面中心
            waterShape.RelativeHorizontalPosition = RelativeHorizontalPosition.Page;
            waterShape.RelativeVerticalPosition = RelativeVerticalPosition.Page;
            waterShape.WrapType = WrapType.None;
            waterShape.VerticalAlignment = VerticalAlignment.Center;
            waterShape.HorizontalAlignment = HorizontalAlignment.Center;

            // 創建一個新段落並在該段中添加水印。 
            Paragraph watermarkPara = new Paragraph(mdoc);
            watermarkPara.AppendChild(waterShape);           

            // 在每個部分中,最多可以有三個不同的標題,因為我們想要出現在所有頁面上的水印,插入到所有標題中。  
            foreach (Section sect in mdoc.Sections)
            {
                // 每個區段可能有多達三個不同的標題,因為我們希望所有頁面上都有水印,將所有的頭插入。
                InsertWatermarkIntoHeader(watermarkPara, sect, HeaderFooterType.HeaderPrimary);
                InsertWatermarkIntoHeader(watermarkPara, sect, HeaderFooterType.HeaderFirst);
                InsertWatermarkIntoHeader(watermarkPara, sect, HeaderFooterType.HeaderEven);
            }
        }
        private static void InsertWatermarkIntoHeader(Paragraph watermarkPara, Section sect, HeaderFooterType headerType)
        {
            HeaderFooter header = sect.HeadersFooters[headerType];

            if (header == null)
            {
                // 當前節中沒有指定類型的頭,創建它
                header = new HeaderFooter(sect.Document, headerType);
                sect.HeadersFooters.Add(header);
            }

            // 在頭部插入一個水印的克隆
            header.AppendChild(watermarkPara.Clone(true));
        }
    }

    public class ReplaceImage1 : IReplacingCallback
    {
        public string imageUrl;
        public string Barcode;

        public ReplaceImage1(string url)
        {
            this.imageUrl = url;
        }

        public ReplaceAction Replacing(ReplacingArgs e)
        {
            //獲取當前節點
            var node = e.MatchNode;
            //獲取當前文檔
            Document doc = node.Document as Document;
            DocumentBuilder builder = new DocumentBuilder(doc);
            //將光標移動到指定節點
            builder.MoveTo(node);          
            //插入圖片
            builder.InsertImage(imageUrl);          
            return ReplaceAction.Replace;
        }

    }

    public class ReplaceImage2 : IReplacingCallback
    {
        public string imageUrl;
        public string Barcode;

        public ReplaceImage2(string url )
        {
            this.imageUrl = url;
        }

        public ReplaceAction Replacing(ReplacingArgs e)
        {
            //獲取當前節點        
            if (!string.IsNullOrEmpty(imageUrl))
            {
                var node = e.MatchNode;
                Document doc = node.Document as Document;
                DocumentBuilder builder = new DocumentBuilder(doc);
                builder.MoveTo(node);
                Shape shape = new Shape(doc, ShapeType.Image);
                shape.ImageData.SetImage(imageUrl);      
                shape.Width = 80;
                shape.Height = 104;
                shape.DistanceTop = 10;
                shape.HorizontalAlignment = HorizontalAlignment.Center;
                shape.VerticalAlignment = VerticalAlignment.Center;
                builder.InsertNode(shape);
            }
            return ReplaceAction.Replace;
        }

    }

    public class ReplaceHtml : IReplacingCallback
    {
        public string Text ;

        public ReplaceHtml(string str)
        {
            this.Text = str;
        }

        public ReplaceAction Replacing(ReplacingArgs e)
        {
            //獲取當前節點        
            if (!string.IsNullOrEmpty(Text))
            {
                Node node = e.MatchNode;
                Document doc = node.Document as Document;
                DocumentBuilder builder = new DocumentBuilder(doc);
                builder.MoveTo(node);
                builder.Write(Text);
            }
            return ReplaceAction.Replace;
        }

    }
}

模板:

效果圖:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM