分享 aspose 的一些基本用法

文章目录
  1. 基本用法

Aspose 是Aspose公司旗下的最全的一套office文档管理解决方案,主要提供.net跟java两个开发语言的控件套包。功能异常强大,各个平台基本都支持,强力推荐大家使用。
本文就根据我所用的经历简要介绍Aspose的一些用法!

注:由于小弟只在ASP.NET 中曾用Aspose 导出过word ,所以接下来的介绍都是asp.net环境下的一些用法。

####资源包
首先我们得去官网下载 asp.net aspose的DLL 程序集,稍后会在项目中使用。
官网的DLL 会带有水印和商标,因此大家可以在网上搜索破解版,这里我就不啰嗦了

基本用法

1
Aspose.Words.Document doc = new Aspose.Words.Document();

用来申明一个 word文件对象,后面() 里可以增加参数,实例化有5个重载,括号中什么都不写表示空文档对象,若写上本地word的路径,则是将word文件读取到当前word文件对象中。

1
Aspose.Words.DocumentBuilder builder = new Aspose.Words.DocumentBuilder(doc);

DocumentBuilder 类似一个文档操作工具,用来操作已经实例化的Document 对象,DocumentBuilder 里有许多方法 例如插入文本、插入图片、插入段落、插入表格等等

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#region 属性说明
//Document 代表Word文件物件,此物件会包含許多文件的元件,如段落(Section)、內文(Body)…等等。
//Section 代表Word当中的一个节。
//Body 代表在节里的主要文字。
//HeaderFooter 代表在节里的段落首及段落尾。
//Comment 代表Word文件裡的注解。
//Shape 代表在Word文件里的影像、图形或是OLE物件。
//GroupShape 一群Shape物件的组合。
//Paragraph 代表一小段文字。
//Table 代表Word文字中的表格。
//Row 代表表格的列。
//Cell 代表表格的栏位。
//BookmarkStart 代表书签,用来标注书签的开始。
//BookmarkEnd 代表书签,用来标注书签的结束。
#endregion
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
////建立Document物件
Document doc = new Document();

//建立DocumentBuilder物件
DocumentBuilder builder = new DocumentBuilder(doc);

//將DocumentBuilder的颜色设定为红色
builder.Font.Color = System.Drawing.Color.Red;

//将DocumentBuilder的颜色设定为双底线
builder.Font.Underline = Underline.Double;

//新增文字
builder.Writeln("鹏吧");

//新增超链接
builder.InsertHyperlink("tsima", "http://www.peng8.net", false);

//将上述设定的格式清除
builder.Font.ClearFormatting();

//保存为doc,并打开
doc.Save("demo.doc", SaveFormat.Doc, SaveType.OpenInWord, Response);

####高级进阶 ——–书签的用法
有时候我们希望在word指定的位置插入指定的内容,这个时候我们就需要用到书签了,需要我们在word模版中手动建立书签,请看下面的截图

将光标停留在红色框的位置,然后在word 插入 菜单中找到 书签

给书签取一个名字,然后添加,那后台如何去找到这个书签,请接着往下看

1
2
Bookmark mark = doc.Range.Bookmarks["ArticleByTime"];
mark.Text = "需要插入的内容";

我们将这个方法封装成一个通用的方法,方便重复使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/// 用Bookmark绑定word对应项的值
/// <summary>
/// 用Bookmark绑定word对应项的值
/// </summary>
/// <param name="parama">指定word</param>
/// <param name="parama">word里面的标签名称</param>
/// <param name="paramb">对应标签显示的值</param>
public static void UseBookmark(Document doc, string parama, string paramb)
{
if (doc.Range.Bookmarks[parama] != null)
{
Bookmark mark = doc.Range.Bookmarks[parama];
mark.Text = paramb;
}
}

另外设置书签还有一中方法,MoveToBookmark(),移动到指定书签的位置,然后插入相关的内容

####高级进阶 ——–表格的用法
表格可以用HTML 的table 拼接,也可以使用 aspose内部的Table 。
我将2种方式进行了封装,方便大家调用,请看下面这段代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
/// <summary>
/// 向指定的位置插入指定的table数据集
/// </summary>
/// <param name="Location">标签位置</param>
/// <param name="builder">word对象</param>
/// <param name="dt">table数据集</param>
/// <param name="ColumnsWidth">列的宽度</param>
/// <param name="Columns">绑定的列</param>
/// <param name="ColumnsNames">列显示的名字</param>
/// <param name="IsNo">是否开启序号</param>
/// <param name="IsHtml">是否开启HTML渲染表格</param>
private void InsertWordTables(string Location, Aspose.Words.DocumentBuilder builder, DataTable dt, int[] ColumnsWidth, string[] Columns, string[] ColumnsNames, bool IsNo, bool IsHtml)
{
try
{
builder.MoveToBookmark(Location);
if (IsHtml)
{
StringBuilder strTable = new StringBuilder();
if (dt.Rows.Count > 0)
{
string tdStyle = "border:solid windowtext 1.0pt;padding:5px;text-align:center;";
string thStyle = "border:solid windowtext 1.0pt;background:silver;padding:5px;text-align:center;";
string tbStyle = "border-collapse: collapse;border:1px solid; padding:5px;text-align:center;";
strTable.Append("<table style='" + tbStyle + "' cellpadding='0' cellspacing='0'><tr>");
if (IsNo)
{
strTable.Append("<th style='" + thStyle + "'>序号</th>");
}
for (int i = 0; i < ColumnsNames.Length; i++)
{
strTable.Append("<th style='" + thStyle + "'>" + ColumnsNames[i] + "</th>");
}
strTable.Append("</tr>");
for (int i = 0; i < dt.Rows.Count; i++)
{
strTable.Append("<tr>");
if (IsNo)
{
strTable.Append("<td style='" + tdStyle + "'>" + (i + 1).ToString() + "</td>");
}
for (int j = 0; j < Columns.Length; j++)
{
strTable.Append("<td style='" + tdStyle + "'>" + dt.Rows[i][Columns[j].ToString()].ToString() + "</td>");
}
strTable.Append("</tr>");
}
strTable.Append("</table>");
}
else
{
strTable.Append("<p>暂无</p>");
}
builder.InsertHtml(strTable.ToString());
}
else
{
if (dt.Rows.Count > 0)
{
#region 插入表格
builder.InsertParagraph();
builder.ParagraphFormat.Alignment = ParagraphAlignment.Justify;
//开始插入表格
builder.StartTable();
if (IsNo)
{
builder.InsertCell();
builder.Font.Bold = true;
builder.CellFormat.VerticalAlignment = CellVerticalAlignment.Center;
builder.CellFormat.Width = 40;
builder.CellFormat.VerticalMerge = CellMerge.First;
builder.CellFormat.Shading.BackgroundPatternColor = System.Drawing.Color.Silver;
builder.CellFormat.HorizontalMerge = CellMerge.None;
builder.Write("序号");
}
for (int i = 0; i < ColumnsNames.Length; i++)
{
builder.InsertCell();
builder.Font.Bold = true;
builder.CellFormat.VerticalAlignment = CellVerticalAlignment.Center;
builder.CellFormat.Width = ColumnsWidth[i];
builder.CellFormat.VerticalMerge = CellMerge.First;
builder.CellFormat.Shading.BackgroundPatternColor = System.Drawing.Color.Silver;
builder.CellFormat.HorizontalMerge = CellMerge.None;
builder.Write(ColumnsNames[i]);
}
builder.EndRow();
for (int i = 0; i < dt.Rows.Count; i++)
{
builder.Font.Bold = false;
if (IsNo)
{
builder.InsertCell();
builder.CellFormat.VerticalAlignment = CellVerticalAlignment.Center;
builder.CellFormat.VerticalMerge = CellMerge.None;
builder.CellFormat.Width = 40;
builder.CellFormat.Shading.BackgroundPatternColor = System.Drawing.Color.White;
builder.Write((i + 1).ToString());
}
for (int j = 0; j < Columns.Length; j++)
{
builder.InsertCell();
builder.CellFormat.VerticalAlignment = CellVerticalAlignment.Center;
builder.CellFormat.VerticalMerge = CellMerge.None;
builder.CellFormat.Width = ColumnsWidth[j];
builder.CellFormat.Shading.BackgroundPatternColor = System.Drawing.Color.White;
builder.Write(dt.Rows[i][Columns[j].ToString()].ToString());
}
builder.EndRow();
}
builder.EndTable();
#endregion
}
else
{
builder.InsertHtml("<p>暂无</p>");
}
}
}
catch (Exception ex)
{
throw;
}
}

关于aspose 还有很多没有讲解到的,请看官网的API,其实还有很多方法和属性我也没有用到过,若大家有更先进的方法记得留言交流!