由于最近一直在忙着做着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"] = "";
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 > )
{
var dr = dtInfo.Rows[];
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 = ;
waterShape.Height = ;
//文本将从左下角到右上角。
waterShape.Rotation = -;
//绘制水印颜色
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 = ;
shape.Height = ;
shape.DistanceTop = ;
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;
} }
}

模板:

效果图:

Aspose.Words进行Word替换(插入图片和水印)的更多相关文章

  1. Java利用poi生成word(包含插入图片,动态表格,行合并)

    转(小改): Java利用poi生成word(包含插入图片,动态表格,行合并) 2018年12月20日 09:06:51 wjw_11093010 阅读数:70 Java利用poi生成word(包含插 ...

  2. OpenXml入门---word里面插入图片

    下面介绍如何在word里面插入图片,顺便小弟发现MSDN官网有完整的OpenXML教程,虽然是全英文的不过还是很有帮助的. Tips,原来摘抄代码里面没有模板,在copy过来发现插入word中的图片大 ...

  3. 在word里插入图片,并设置图片的格式

    由于公司业务需要,需要在生成的word里插入图片(公司印章),仔细想了下,还是在word模板里添加一个书签,然后再该书签的位置插入图片,并设置图片的格式方便些: 代码如下: using System; ...

  4. 如何在Microsoft Word里面插入图片作为背景/封面?

    Stay hungry, Stay foolish.     如何在Word里面插入图片作为背景?其实很简单,开门见山,我们只需要这几步即可! 1.第一步,打开要插入图片的Word 2.第二步,插入图 ...

  5. .net使用Aspose.Words进行Word替换操作的实现代码

    DLL文件下载 示例: Aspose.Words.Document doc = new Aspose.Words.Document(TempFile); Aspose.Words.DocumentBu ...

  6. C#调用NPOI组件读取excel表格数据转为datatable写入word表格中并向word中插入图片/文字/书签 获得书签列表

    调用word的com组件将400条数据导入word表格中耗时10分钟简直不能忍受,使用NPOI组件耗时4秒钟.但是NPOI中替换书签内容的功能不知道是不支持还是没找到. 辅助类 Excel表格数据与D ...

  7. C#中按模板操作Word —— 如何向Word中插入图片

    一.Word对象模型的重叠性分析 本文主要介绍通过书签Bookmark向Word文档中插入图片的方法.在此之前我们先简单讨论下Word对象模型的重叠性.如果你对Word对象模型还不熟悉,请参考本专栏第 ...

  8. C#操作word之插入图片

    假如我们导出一份简历到word文档,那势必可能要同时导出我们包含的简历,下面就来试一下如何和通过C#代码,将图片插入到word文档中. 为了简便起见,就简单一点.类似下面这样的 姓名 张三 照片   ...

  9. Aspose.Words操作Word.PDF,让图片和文本垂直居中,水平居中解决方案

    x 环境 { "Aspose.Words": {"Version":"18.x"} } 需求与难题 生成试卷的时候,如果数学题目中有特殊符号 ...

随机推荐

  1. boost::mutex::scoped_lock

    在三维重建过程中,世界地图 Map &world作为唯一 访问/更新 对象,可以使用boost::mutex::scoped_lock . 一:boost::mutex::scoped_loc ...

  2. [Intermediate Algorithm] - Everything Be True

    题目 所有的东西都是真的! 完善编辑器中的every函数,如果集合(collection)中的所有对象都存在对应的属性(pre),并且属性(pre)对应的值为真.函数返回ture.反之,返回false ...

  3. C# MVC 返回html内容

    var ss = Server.MapPath(""); //C:\Users\Administrator\Desktop\Csharp测试程序\TestMVC\TestMVC s ...

  4. 安装mysql遇到的几个坑

    1. 官网下载压缩版mysql,配置太复杂 弃之 2. 官网下载最新版本mysql安装包 5.8.X,安装成功,一路next,安装成功后发现没有看到自定义安装路径,查看mysql安装完成的路径果然在C ...

  5. json简介及josn数组中取字符

    1.json字符串就是字符串,只不过格式是Json格式的,以键值对的形式存在,键和值可以是字符串,数字,空值,数组等. json对象在花括号中书写,一个json对象包含多个键值对,json对象以花括号 ...

  6. EF6 mysql配置

    如何把一个ef项目 从sqlserver改为mysql 首先在引入了ef的层再引入这两个包,注意两个的版本一定要一样,一定要一样,一定要一样,不然就会报错 MySql.Data.Entity目前的最新 ...

  7. 谨慎调整内核参数:vm.min_free_kbytes

    内核参数:内存相关 内存管理从三个层次管理内存,分别是node, zone ,page; 64位的x86物理机内存从高地址到低地址分为: Normal DMA32 DMA.随着地址降低. [root@ ...

  8. 51nod1126 求递推序列的第N项【递推】

    有一个序列是这样定义的:f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7. 给出A,B和N,求f(n)的值. Input 输 ...

  9. 当svn检出项目检出一半时停止,如何继续检出

    1.当svn检出项目时,发现中断,又不想重新检出可以在已检出的项目目录下右键 2.然后点击 之后直接update你的项目就可以了

  10. windows 2003一个网卡绑定多个IP地址

    1.打开“网络连接”,选中需要添加多个IP的“本地连接”-->右键-->“属性”: 2.从“常规”中找到“Internet 协议(TCP/IP)属性”: 3.选择手动设置IP地址.网关.掩 ...