最近实现一个功能,具体需求就是把数据库中的内容转换成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. 【Azure 环境】基于Azure搭建企业级内部站点, 配置私有域名访问的详细教程 (含演示动画)

    前言 在Azure中,可以通过App Service快速部署,构建自定义站点(PaaS服务).默认情况下,这些站点被访问URL都是面向公网,通过公网进行解析.为了最好的安全保障,是否可以有一种功能实现 ...

  2. 实施CRM系统后 企业客户服务的改变

    通过实施CRM客户管理系统,企业的竞争力和盈利能力得到大幅提高.在这个过程中,客户服务不仅能够持续的满足客户的需求,还能够促进客户与企业建立长期的互惠互利的良好客户关系,这也为企业赢得了更多的商机和利 ...

  3. Java中Stream流相关介绍

    什么是Stream? Stream是JDK8 API的新成员,它允许以声明性方式处理数据集合 特点 代码简洁: 函数式编程写出的代码简洁且意图明确,使用stream接口让你从此告别for循环 多核友好 ...

  4. 百万级数据mysql查询优化

    一.limit越往后越慢的原因 当我们使用limit来对数据进行分页操作的时,会发现:查看前几页的时候,发现速度非常快,比如 limit 200,25,瞬间就出来了.但是越往后,速度就越慢,特别是百万 ...

  5. centos保存rpm到本地以及使用yum完全卸载软件包

    目录 保存安装的rpm到本地 方法一: 方法二(推荐): yum卸载软件包包括依赖 保存安装的rpm到本地 方法一: [root@ServerA ~]# vim /etc/yum.conf [main ...

  6. Ansible_静态和动态清单文件管理

    一.利用主机模式选择主机 1.应用静态清单主机 1️⃣:主机模式用于指定要作为play或临时命令的目标的主机:在最简单的形式中,清单中受管主机或主机组的名称就是指定该主机或主机组的主机模式 简单演示实 ...

  7. centos7 的Linux下ip命令替换ifconfig命令的用法

    linux的ip命令和ifconfig类似,但前者功能更强大,并旨在取代后者.使用ip命令,只需一个命令,你就能很轻松地执行一些网络管理任务.ifconfig是net-tools中已被废弃使用的一个命 ...

  8. 10.4 route:显示或管理路由表

    route命令 可以显示或管理Linux系统的路由表,route命令设置的路由主要是静态路由. 路由的概念     计算机与计算机之间的数据传输必须得经由网络,而网络可以通过直接连接两台计算机的方式或 ...

  9. python set去重简析

    python 中的集合可以去重是实现了__hash__与__eq__ 当class没有定义__eq__()方法时,那么它也不应该定义__hash__()方法.如果它定义了__eq__()方法,却没有定 ...

  10. hive的排序 order by和sort by

    在算法中,各个排序算法的复杂度都比较高,正常情况下为O (nlogn) ,所以当数据量特别大的时候,对数组进行排序消耗都很大. 因为hive的计算引擎MapReduce是分布式系统, 利用分布式的特点 ...