由于最近一直在忙着做着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. Christopher G. Atkeson 简介

    有一个事实:双足机器人的稳定性问题单靠算法是搞不定的!!! 在2015 DARPA 机器人挑战赛中,许多参赛团队的机器人使用了Atlas,他们通过安装他们自己的软件并修改来让机器人保持平衡.来自WPI ...

  2. VTK初始化New返回Null问题

    原文链接:http://www.cppblog.com/mythma/archive/2013/08/02/vtk-6-new-null.html 在使用VTK6.0时候,会遇到X::New()返回为 ...

  3. Arduino 操作共阴极RGB LED

    一.原理图 注:电阻选用1k的 二. 实物图 三.完整事例代码,三种颜色不停的交替闪烁 实验结果自己运行观察

  4. js-循环执行一个函数

    js里的两个内置函数:setInterval()与setTimeout()提供了定时的功能,前者是每隔几秒执行一次,后者是延迟一段时间执行一次.javascript 是一个单线程环境,定时并不是很准, ...

  5. [bzoj3291] Alice与能源计划 (二分图最大匹配)

    传送门 Description 在梦境中,Alice来到了火星.不知为何,转眼间Alice被任命为火星能源部长,并立刻面临着一个严峻的考验.为 了方便,我们可以将火星抽象成平面,并建立平面直角坐标系. ...

  6. 爬虫写法进阶:普通函数--->函数类--->Scrapy框架

    本文转载自以下网站: 从 Class 类到 Scrapy https://www.makcyun.top/web_scraping_withpython12.html 普通函数爬虫: https:// ...

  7. php如何判断SQL语句的查询结果是否为空?

    PHP与mysql这对黄金搭档配合的相当默契,但偶尔也会遇到一些小需求不知道该怎么做,例如今天要谈到的:如何判断sql语句查询的结果集是否为空! 我们以查询学生信息为例,来看看究竟如何实现我们的需求. ...

  8. Git 基础教程 之 创建与合并分支

  9. 【习题 4-6 UVA - 508】Morse Mismatches

    [链接] 我是链接,点我呀:) [题意] 给你每个字母对应的摩斯密码. 然后每个单词的莫斯密码由其组成字母的莫斯密码连接而成. 现在给你若干个莫斯密码. 请问你每个莫斯密码对应哪个单词. 如果有多个单 ...

  10. Spring MVC灵活控制返回json的值(自定义过滤字段)

    在使用spring MVC开发过程中,为了提高项目执行效率,所以在一些外键字段的实体中会注解”@ManyToOne(fetch = FetchType.LAZY)”以实现延迟加载的效果. 但是,在使用 ...