说明

为了消除于原生交互操作库对Microsoft Word软件依赖性,我们已经改变了进程。我们用Aspose库在内存中管理所有进程并更有效地管理文档有两个目的:

  • 避免为了自动化而在一个服务器上安装Microsoft Word。

  • 直接在代码中的库有更好的性能

同时,Aspose有完整的Microsoft Ofiice库,并且对于为我们的网络应用程序添加弹性功能性非常有用。你的mileage将依据处理有关整合它们的库的文档的方式而发生变化,但它们是功能完整的,并且该文档是提供的产品中不可分割的一部分。

使用代码

(1)设置许可证

Aspose组件需要你加载许可证到库,以解锁它的真正功能。

你可以在它们的网站上申请临时许可证(通过创建引用你感兴趣的组件,表明你感兴趣的组件,在引用的最后阶段,该选项将变为可用)

Dim License As New Aspose.Words.License()
Try
    License.SetLicense("Aspose.Words.lic")
Catch ' Make sure to trap and record any licensing issues here
End Try

添加许可证到你的库作为静态资源,不然它会驻留在和应用程序相同的文件夹。


(2)处理你的文档

现在是你的设计容易出偏差的时候,我们用隐藏的书签来控制动态节(里和外), 如果你用其它方式,你将需要深度挖掘库的功能。

两个主要的类将在大部分处理过程中被使用:Aspose.Word.WordDocument 和 Aspose.Word.WordDocumentBuilder。

Dim oWordFile As System.IO.MemoryStream
Dim oWordDocument As Aspose.Words.Document
Dim oWordDocumentBuilder As Aspose.Words.DocumentBuilder
' oDocument represents an external resource extracted from a database
oWordFile = New System.IO.MemoryStream(oDocument.Content, True)
oWordDocument = New Aspose.Words.Document(oWordFile)
oWordDocumentBuilder = New Aspose.Words.DocumentBuilder(oWordDocument)
' Clean up, passed this point the MemoryStream is no longer required
oWordFile.Dispose()
oWordFile = Nothing

现在有了这项设置,你就已经准备好铺开你的代码来利用文档。Aspose.Word.NET对象层管理文档(如XML文档),无论它是遗留的(RTF,DDC1997/2003等)还是新的格式(DOCX,DOCM等),为了正确地修改或利用现有的数据,你都需要穿过对象节点树。

(3)书签管理上的几个例子和注意点

' Retrieve data
Dim sValue As String = oWordDocument.Range.Bookmarks(sBookmarkName).Text
' Change data
sValue = “Test”
oWordDocument.Range.Bookmarks(sBookmarkName).Text = sValue

这包括操纵现有的书签。

创建书签本身就很简单,你将需要新增两个子节点到文档架构中:

Dim oBookmarkStart As New Aspose.Words.BookmarkStart(oWordDocument, sNewName)
Dim oBookmarkEnd As New Aspose.Words.BookmarkEnd(oWordDocument, sNewName)
' oNodeStart and oNodeEnd represent content nodes already identified to become the
' boundaries of the new bookmark
oNodeStart.AppendChild(oBookmarkStart)
oNodeEnd.AppendChild(oBookmarkEnd)

识别书签边界的方式将依据你管理文档的方式而变化,如果你是在构建文档,你将只需要简单地添加它到文档内容中;如果你是用先前存在的模板,则需要更复杂的解决方案来管理书签。

唯一一个你需要当心的点是当克隆一个节点(文档中的任意成分都是节点并且也能被克隆为它自己的树)时,要注意克隆的书签仍然保持着它们的原始名称,你必须为其重命名,否则将发生异常。

通过捕捉上述两种节点来相应地改变书签名称

(4)保存你的修改

虽然这些实例都很基础,它们包含I/O使用书签,你将需要做的是使用适当的XSaveOptions类保存文档。请注意,使用提供的其他保存方式(由文件扩展名来检测)可能是错误的。

在此说明PDF保存事项:

' The options are up to you, this setup is for lighter files
oPDFOptions = New Aspose.Words.Saving.PdfSaveOptions()
oPDFOptions.EmbedFullFonts = False
oPDFOptions.ExportCustomPropertiesAsMetadata = False
oPDFOptions.FontEmbeddingMode = Aspose.Words.Saving.PdfFontEmbeddingMode.EmbedNone
' For Left to Right text support (Arabic, Hebrew, etc…)
oWordDocument.FieldOptions.IsBidiTextSupportedOnUpdate = False
' oNewMemoryStream being the target for the push
oWordDocument.Save(oNewMemoryStream, oPDFOptions)

注意点

从性能上看,不需要举例说明文档来自一个硬盘驱动绑定文件已经是一个很大的改进,不需要依靠Microsoft Office添加更多,但处理本身显示相对于原生.NET交互操作库有6:1的增益。

另一个注意点是关于组件的性能,清理是繁琐的,因此应该孤立到非关键路径。

对象提取层也大大简化了代码需要操纵的文档本身,不包括同样的的quirks出现在文档最终结构中,其复杂性是由库本身所决定的。