最近实现一个功能,具体需求就是把数据库中的内容转换成word文档,文档中需要包含标题、目录以及表格信息。

这里我使用的是Aspose.Word类,这是一个很强大的文档操作工具包,实现了所有操作文档的所需要的功能。

我使用中遇到了几个问题,最棘手的就是当生成word时如果数据量太大,执行一段时间后,会报一个错,而当数据量不是很大时,就不会报错。具体报错如下:

 1 java.lang.RuntimeException: java.lang.IllegalStateException: There are too many styles in the document.
2 at com.aspose.words.StyleCollection.zzZ(Unknown Source)
3 at com.aspose.words.NodeImporter.zzZ(Unknown Source)
4 at com.aspose.words.NodeImporter.zzZ(Unknown Source)
5 at com.aspose.words.NodeImporter.zzY(Unknown Source)
6 at com.aspose.words.NodeImporter.zzZ(Unknown Source)
7 at com.aspose.words.NodeImporter.zzY(Unknown Source)
8 at com.aspose.words.NodeImporter.zzZ(Unknown Source)
9 at com.aspose.words.NodeImporter.zzY(Unknown Source)
10 at com.aspose.words.NodeImporter.zzZ(Unknown Source)
11 at com.aspose.words.NodeImporter.zzY(Unknown Source)
12 at com.aspose.words.NodeImporter.zzZ(Unknown Source)
13 at com.aspose.words.NodeImporter.importNode(Unknown Source)
14 at com.epoint.datacenter.controller.exportToWord.ResourcesToWord.drawTabel(ResourcesToWord.java:121)
15 at com.epoint.datacenter.controller.exportToWord.ResourcesToWord.exportToWord(ResourcesToWord.java:93)
16 at com.epoint.datacenter.Test.ExportWord.main(ExportWord.java:10)
17 Caused by: java.lang.IllegalStateException: There are too many styles in the document.
18 at com.aspose.words.StyleCollection.zzZlI(Unknown Source)
19 at com.aspose.words.StyleCollection.zzY(Unknown Source)
20 at com.aspose.words.StyleCollection.zzZ(Unknown Source)
21 ... 14 more

字面意思就是文档中有太多的格式或类型了,但是光看字面意思完全不知道什么意思。无奈进行了百度,可悲的是百度也没有找到类似的问题。

一般定位到报错代码行,然后分析前面的代码,基本都能找到问题。报错位置如下:

NodeImporter importer = new NodeImporter(srcdoc, doc, ImportFormatMode.KEEP_SOURCE_FORMATTING);
for (Node node : (Iterable<Node>) nodes) {
Node importNode = importer.importNode(node, true);
doc.getFirstSection().getBody().appendChild(importNode);
}

其实for循环是没有问题的,因为程序能执行几分钟。往上找就看到了NodeImporter的定义,这里面定义了导入节点的样式,KEEP_SOURCE_FORMATTING表示把引用到的样式全部导入到母页面,我就怀疑是不是样式太多是因为这个引用的样式过多,于是换成了USE_DESTINATION_STYLES,使用母页面的样式,尝试后问题竟然解决了。当然这个问题不是很难,但是Aspoe.Word这个工具包也是第一次用,不熟悉里面的内容,这里做下记录。

记Aspose.Word的使用中出现的问题的更多相关文章

  1. 利用Aspose.Word控件和Aspose.Cell控件,实现Word文档和Excel文档的模板化导出

    我们知道,一般都导出的Word文档或者Excel文档,基本上分为两类,一类是动态生成全部文档的内容方式,一种是基于固定模板化的内容输出,后者在很多场合用的比较多,这也是企业报表规范化的一个体现. 我的 ...

  2. Aspose Word模板使用总结

    Aspose Word模板使用总结 1.创建word模版,使用MergeFeild绑定数据     新建一个Word文档,命名为Template.doc     注意:这里并不是输入"< ...

  3. 利用Aspose.Word控件实现Word文档的操作

    Aspose系列的控件,功能都挺好,之前一直在我的Winform开发框架中用Aspose.Cell来做报表输出,可以实现多样化的报表设计及输出,由于一般输出的内容比较正规化或者多数是表格居多,所以一般 ...

  4. 黄聪:利用Aspose.Word控件实现Word文档的操作(转)

    撰写人:伍华聪  http://www.iqidi.com  Aspose系列的控件,功能都挺好,之前一直在我的Winform开发框架中用Aspose.Cell来做报表输出,可以实现多样化的报表设计及 ...

  5. 关于ASPOSE.WORD使用上的一个小问题

    最近实习期间负责了公司某个项目的一个功能模块里面的word导出功能,使用的是ASPOSE.WORD类库,但是经常导出时候会遇到图中的问题,大概意思就是两个表格不能跨在一起,调试了好几次还是没发现具体的 ...

  6. Aspose.Word邮件合并之自定义数据源

    Aspose.Word在进行邮件合并时,默认的几个重载方法对Database支持比较友好,但是也可以通过自定义数据源来实现从集合或者对象中返回数据进行邮件合并. 自定义数据源主要是通过实现IMailM ...

  7. Aspose Word.Dll库自带的bug导致The document appears to be corrupted and cannot be loaded 问题处理。

    问题的详细描述: C#在开发过程中使用Aspose.word.dll库去实现word套打功能.但是,最近客户反映出现了一个问题,在打印文档的时候,系统报错.经过定位分析发现是Aspose.word.d ...

  8. aspose.word 使用简单方法

    aspose.word使用简单方法 概念介绍 使用aspose生成word报表步骤: 加载word模板 提供数据源 填充 加载模板 提供了4种重载方法 1 2 3 4 5 public Documen ...

  9. aspose.word 读取word段落内容

    注:转载请标明文章原始出处及作者信息 aspose.word 插件下载 链接: http://pan.baidu.com/s/1qXIgOXY 密码: wsj2 使用原因:无需安装office,无兼容 ...

随机推荐

  1. 按照自己的思路研究Spring AOP源码【2】

    目录 问题的提出 哪一步导致了顺序的改变 AbstractAdvisorAutoProxyCreator.sortAdvisors()方法 总结 问题的提出 上面这篇文章介绍了Spring AOP源码 ...

  2. Java数组学习之前基础小案例

    不多说,1天时间看完数组之前内容,这就靠代码的实践总结一下吧~~ 打印三角形 简单易懂,初学都会,就不注释了,前者为取巧的三角形实现方法,我注释了,直接上源码~~ public class Trian ...

  3. Journey to the future begins

    当提交申请的那一刻,我就更加确认了自己想要走的路,慢慢一路向上,追求自己想要的生活! 2021.5.18 wzb

  4. 并发王者课 - 青铜 2:峡谷笔记 - 简单认识Java中的线程

    在前面的<兵分三路:如何创建多线程>文章中,我们已经通过Thread和Runnable直观地了解如何在Java中创建一个线程,相信你已经有了一定的体感.在本篇文章中,我们将基于前面的示例代 ...

  5. 前端的MySQL基础

    前端MySQL 一.引言 MySQL是一个关系型数据库管理系统,在Web应用方面,MySQL是最好的应用之一.其主要的他点是体积小.速度块.总体成本低.源码开放 二.MySQL的构成 在我们开始学习M ...

  6. kvm总结复习

    一.虚拟化概念 1.虚拟化技术:在计算机技术中,虚拟化(技术)或虚拟技术(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源(CPU.内存.磁盘空间.网络适配器等),予以 ...

  7. CSS定位特性

    CSS属性书写顺序 布局定位属性:display / position / float / clear / visibility / overflow 自身属性:width / height / ma ...

  8. jackjson学习2+CVE-2019-14379漏洞分析

    最近想着分析jackson,jackson和fastjson有点相似,浅蓝大神的文章很好,个人受益匪浅 昨天简单说了下jackson的用法,现在继续拓扑,补充前置知识,前置知识补充的足够多,那么漏洞分 ...

  9. libevent中的bufferevent原理

    以前的文章看过缓冲区buffer了,libevent用bufferevent来负责管理缓冲区与buffer读写事件.       今天就带大家看下evbuffer.c,使用bufferevent处理事 ...

  10. TVM优化Deep Learning GPU算子

    TVM优化Deep Learning GPU算子 高效的深度学习算子是深度学习系统的核心.通常,这些算子很难优化,需要HPC专家付出巨大的努力. 端到端张量IR / DSL堆栈TVM使这一过程变得更加 ...