由於最近一直在忙着做着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; } } }
模板:
效果圖: