Aspose.word

Aspose.Words是一款先进的类库,通过它可以直接在各个应用程序中执行各种文档处理任务。Aspose.Words支持DOC,OOXML,RTF,HTML,OpenDocument, PDF, XPS, EPUB和其他格式。使用Aspose.Words,您可以生成,更改,转换,渲染和打印文档而不使用Microsoft Word。
上面一句话换而言之是他解决了IIS针对Microsoft Word Application的各种权限不足问题。当然,这里主要不是和他家哈牛B说Aspose怎么用,在这里主要和大家讨论的是Aspose我们怎样对他进行一些扩展让他更适合你的项目。
      1、将一些对象的动态方法进行静态化
          这里说的动态方法是什么呢,比方说打开构建Document对象,DocumentBuilder对象等,在Aspose集成时可能他们的编程习惯与我们团队里的不一样,那么可以通过一些方式让整个编码风格统一起来。 
    比如:        
        /// <summary>
/// 使用操作者
/// </summary>
/// <param name="oWordApplic"></param>
/// <param name="oDoc"></param>
public static DocumentBuilder Builder(this Aspose.Words.Document oDoc)
{
return new DocumentBuilder(oDoc);
}

  这样程序中调用写法就改为: DocumentBuilder builder=Doc.Builder();

2、将一些经常出现或者反应习惯进行集成,静态化处理。

比如说我们这里面插入文字,如果按照Aspose提供的,那么我们可能需要做的是:

            oWordApplic.Bold = conBold;
oWordApplic.Font.Size = conSize;
oWordApplic.ParagraphFormat.Alignment = ParagraphAlignment.Left;
oWordApplic.Write(strText);

  但是我们可以看到,一般操作不需要黑体,字体大小也比较固定,基本上都是靠左对齐,那么我们可以进行一些集成,然后我们按照变动优先级进行默认参数排序(通常认为改动字体可能行最大、其次是是否黑体,对齐方式变动可能性最小)

        /// <summary>
/// 添加内容
/// </summary>
/// <param name="strText"></param>
public static void WriteText(this DocumentBuilder oWordApplic, string strText, double conSize = 24, bool conBold = false
, ParagraphAlignment conAlign = ParagraphAlignment.Left)
{
oWordApplic.Bold = conBold;
oWordApplic.Font.Size = conSize;
switch (conAlign)
{
case ParagraphAlignment.Left:
oWordApplic.ParagraphFormat.Alignment = ParagraphAlignment.Left;
break;
case ParagraphAlignment.Center:
oWordApplic.ParagraphFormat.Alignment = ParagraphAlignment.Center;
break;
case ParagraphAlignment.Right:
oWordApplic.ParagraphFormat.Alignment = ParagraphAlignment.Right;
break;
default:
oWordApplic.ParagraphFormat.Alignment = ParagraphAlignment.Left;
break;
}
oWordApplic.Write(strText);
}

  那么我们在插入文字时oWordApplic.WriteText(strText);即可~

3、善于将其他的类库与操作类库集成

这里有一个例子,我们经常要将个DataSet里面的数据插入到word的行里面去,我们可以根据DataSet的数据结构特点与Word的表格结构特点类似

我们第一步做的是做一个DataRow,Dictionary,Aspose.Words.Node相互映射并且进行区域行的文字替换。

        // 根据字典替换
public static void ReplaceText(this Aspose.Words.Node node, Dictionary<string,string> _ReplaceDic,System.Data.DataRow dr)
{
//System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex(oleText);
foreach (System.Data.DataColumn dc in dr.Table.Columns)
{
if (_ReplaceDic.Keys.Contains(dc.ColumnName))
{
node.Range.Replace(_ReplaceDic[dc.ColumnName], dr[dc].ToString(), false, false);
}
else
{
node.Range.Replace(dc.ColumnName, dr[dc].ToString(), false, false);
}
}
}

    然后再根据DataTable对word表格进行行控制:

        //表格增加新行
public static Row InsertTableRow(this Table table)
{ // Retrieve the first table in the document.
// Clone the last row in the table.
Row clonedRow = (Row)table.LastRow.Clone(true); // Remove all content from the cloned row's cells. This makes the row ready for
// new content to be inserted into.
foreach (Cell cell in clonedRow.Cells)
cell.RemoveAllChildren();
// Add the row to the end of the table.
table.AppendChild(clonedRow);
return clonedRow;
}

  这样就会完全遵循了我们所谓的Word替换规则,并且还不会影响word行的样式甚至一些自定义的文字。

4、尝试将代码、类库进行模型化与具现化。

这里讲述的不是代码的一些写法了,而是对待类库的一种理解方式。

Aspose对象首先我们要看他的数据用例

1、Aspose对象关系与Word对象关系肯定是一致的。

2、理解word的文档节点与Aspose中的Node节点的对应关系(文字、图形、书签、表格等)

3、基本上所有的Aspose操作都能找到对应的Word操作(操作一致性,从操作word方向来理解Aspose的)

言而总之、总而言之,反正就这样了

关于Aspose对于Word操作的一些扩展及思考的更多相关文章

  1. aspose 生成word 简单的文档操作

    package aspose.com.word; import com.aspose.words.Document;import com.aspose.words.DocumentBuilder; p ...

  2. [.NET] 开头不讲"Hello Word",读尽诗书也枉然 : Word 操作组件介绍 - Spire.Doc

    开头不讲"Hello Word",读尽诗书也枉然 : Word 操作组件介绍 - Spire.Doc [博主]反骨仔 [原文地址]http://www.cnblogs.com/li ...

  3. 开源word操作组件DocX的记录

    开源word操作组件DocX的记录 使用开源word操作组件DocX的记录 1.DocX简介 1.1 简介 DocX是一个在不需要安装word的情况下对word进行操作的开源轻量级.net组件,是由爱 ...

  4. DocX开源WORD操作组件的学习系列四

    DocX学习系列 DocX开源WORD操作组件的学习系列一 : http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_sharp_001_docx1.htm ...

  5. DocX开源WORD操作组件的学习系列三

    DocX学习系列 DocX开源WORD操作组件的学习系列一 : http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_sharp_001_docx1.htm ...

  6. DocX开源WORD操作组件的学习系列二

    DocX学习系列 DocX开源WORD操作组件的学习系列一 : http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_sharp_001_docx1.htm ...

  7. DocX开源WORD操作组件的学习系列一

    DocX学习系列 DocX开源WORD操作组件的学习系列一 : http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_sharp_001_docx1.htm ...

  8. WORD操作的问题

    最近有个小项目主要是对文档,特别是WORD的操作,读取表格数据存到数据库: 再把数据库的数据读出来写入WORD,下载下来,诸如此类的东西,说来很是简单. 想了想是用什么开发呢? C#常用的,没话说,也 ...

  9. Aspose.Cells相应操作及下载

    Aspose.Cells相应操作 1,上传 1.1 Workbook Workbook workBook = new Workbook(); 属性: 名称 值类型 说明 Colors Color[] ...

随机推荐

  1. 委托的lambda表达式

    委托可以用 Lambda 表达式的方法来表示,很多C#的代码都会大量使用 Lambda 表达式,正确理解它的用法还是很重要的. 基础规则: Lambda 运算符 “=>” 左边表示委托实例所需要 ...

  2. 反射-b

    Class pkClass=NSClassFromString(@"PKAddPassesViewController");    if (pkClass) {        NS ...

  3. c# 接口代码实例

    类和接口的实现 接口定义:为一组方法签名指定一个名称的方式. 类实现接口,就一定要提供接口所有方法的实现. 即使抽象类,也要全部实现,但是,它可以把接口方法声明为abstract的,从而把这个接口方法 ...

  4. Unity脚本获取内存和FPS

    using System; using System.Collections.Generic; using UnityEngine; public class Debugger : MonoBehav ...

  5. Configure swagger with spring boot

    If you haven’t starting working with spring boot yet, you will quickly find that it pulls out all th ...

  6. 【动态规划】XMU 1030 苦恼的月下老人

    题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1030 题目大意: 给定两个字符串的长度和内容,求最长公共子序列. 题目思路: [动态规 ...

  7. Java的内存管理与内存泄露

    作为Internet最流行的编程语言之一,Java现正非常流行.我们的网络应用程序就主要采用Java语言开发,大体上分为客户端.服务器和数据库三个层次.在进入测试过程中,我们发现有一个程序模块系统内存 ...

  8. Error on SVN checkout:SSL handshake failed

    最近遇到了一个恼火的问题,在Ubuntu上尝试用svn命令checkout一个https的repository时遇到个错误信息: svn: E175002: Unable to connect to ...

  9. in, out, ref

    C#中的函数传递方式可以为in.out.ref(引用) in方式的是默认的传递方式,即向函数内部传送值,不作讲解 很多语言都有类似的操作从函数向调用者返回值,这样我们可以通过函数的调用返回多个值,因为 ...

  10. Py3快速下载地址

    pip3.exe install 包名称 -i  http://mirrors.aliyun.com/pypi/simple  --trusted-host mirrors.aliyun.com