当前位置: 首页 > 知识库问答 >
问题:

Apache POI XWPFRun对象中的分离文本行

夏侯衡
2023-03-14

我试图通过使用XWPFDocument类将模板Docx文档替换为ApachePOI。我在doc和JSON文件中有标记来读取替换数据。我的问题是,当我将docx的扩展名更改为zip文件并打开document.xml时,docx中的文本行似乎以某种方式分开。例如,[MEMBER_CONTACT_INFO]文本分别变为[MEMBER_CONTACT_INFO]POI以相同的方式读取,因为Docx原始文件是这样的。这将在段落中创建2个xwpfrun对象,分别将文本显示为[member_contact_info]

我的问题是,是否有一种方法可以通过合并相关的运行或类似的方式强制POI像Word一样运行?或者我该如何解决这个问题?我在替换时匹配运行文本,但我找不到我的标记,因为它被拆分为两个不同的运行对象。

最佳

共有1个答案

漆雕昊天
2023-03-14

这浪费了我很多时间...

基本上,一个xwpfPartage由多个XWPFRun组成,XWPFRun是一个具有固定相同样式的传染性文本。

因此,当您尝试在MS-Word中编写类似“[PLACEHOLDER_NAME]”的内容时,它将创建一个XWPFRun。但是,如果您以某种方式添加了更多的内容,然后返回并将“[PLACEHOLDER_NAME]”更改为其他内容,则不能保证它仍然是一个xwpfrun,它很有可能分裂为两个运行。AFAIK这就是MS-Word的工作原理。

在这种情况下如何避免分裂运行?

解决方案:我知道有两种解决方案:

>

  • 将文本“[PLACEHOLDER_NAME]”复制到记事本或其他地方。进行必要的修改,将其复制回来并粘贴到word文件中,而不是“[PLACEHOLDER_NAME]”,这样整个“[PLACEHOLDER_NAME]”将被替换为新的文本,避免了XWPfruns的拆分。

    如果必须再次更改新占位符,请按照步骤1或2进行操作。

  •  类似资料:
    • 我想知道你如何从一个文本文件中获取信息,并将其写入单独的数组列表中。 如你所见,上面有哺乳动物、鸟类和鱼类的群体!所以我将这些数组列表声明为。 目标是将人类、狗、老鼠和猫的字符串对象写入mammalList。然后将鸟写到鸟列表,将鱼写到鱼列表。 我知道如何使用缓冲读取器读取单个数组列表中的文本文件,但我不知道如何将每个动物分为各自的类别。非常感谢你的帮助! 下面是在Freestyle 076的帮助

    • 在组件中: 鉴于:

    • 问题内容: 我正在使用hibernate和c3p0 connectionpool插入,更新和删除许多分离的对象。问题在于,hibernate不会批处理语句,而是会 在每个session.persist / insert / update / delete(object)之间。分析sql- connection看起来像这样: select @@ session.tx_rad_only总是返回“ 0”

    • 我正试图将某个程序的用户名打印到一个文件中,但PrintWriter没有在我的文件中打印任何内容。我已经尝试了stackOverFlow上提到的所有东西,但都不起作用。 用户类 构造函数:

    • 问题内容: hibernate中哪些是分离的,持久的和短暂的对象?请举例说明。 问题答案: 甲其不与相关联的永久类的实例,有在数据库中没有表示和没有标识符值被认为是 瞬时 的hibernate: 甲 持久 实例具有在数据库中的表示,标识符值,并与一个相关联。您可以通过将瞬态实例与关联来使其 持久化 : 现在,如果我们使用Hibernate ,则持久化实例将成为一个 分离的 实例:它不再附加到实例上

    • 问题内容: 结合使用JPA和Hibernate,运行以下代码时出现异常。第一次运行它时,一切正常,数据已插入数据库中。第二次,当应更新数据时,它失败: boutiqueDao.persist()只需调用EntityManager.persist()方法。 这是我的精品班: 最后,我的堆栈跟踪: 我正在Tomcat 7.0.32服务器上运行Java 7.0.11。 任何的想法? 问题答案: 用于全新