我在Word模板中使用一个内容控件,通过编程(使用java)向其中添加文本。这很好用。现在我想在课文中的每一个新句子处插入一行。有没有一种方法可以配置内容控件,使其自动执行此操作?
恐怕您无法将内容控件配置为自动执行此操作。
但是,如果通过Word对象模型填充内容控件,则可以简单地使用富文本内容控件或纯文本内容控件,后者具有激活的"允许回车(多段)"选项(对象模型中的多行),并用包含换行符的文本填充。
为了快速测试,我在一个空文档中添加了这样一个纯文本内容控件,并使用了以下VBA代码:
Sub FillContentControl()
ContentControls(1).Range.Text = "Sentence One." & vbNewLine & "Sentence Two."""
End Sub
在我的例子中,这产生了以下输出:
Sentence One.
Sententce Two.
当然,您应该在Java代码中添加换行符。你只需要知道你的句子的结尾在哪里。
如果如您对基于docx4j的解决方案的请求所示,您不是通过Word而是直接在docx中填写内容控件,我可以考虑另一种涉及VBA宏的解决方法(我通常不建议使用):您可以为文档添加事件处理程序。打开事件以更新文档中所有标记的内容控件。它可能看起来像这样:
Private Sub Document_Open()
For Each ContentControl In ThisDocument.ContentControls
If ContentControl.Tag = "TODO_Add_Linebreaks" Then
ContentControl.Range.Text = Replace(ContentControl.Range.Text, ". ", "." & vbNewLine)
ContentControl.Tag = ""
End If
Next
End Sub
第二个解决方案要求您添加带有标记"TODO_add_Linebreaks"(或您喜欢的任何指示)的内容控件,并使文档启用宏。
您可以使用w:br元素,如so:
<w:p>
<w:sdt>
<w:sdtPr>
<w:id w:val="711844519"/>
</w:sdtPr>
<w:sdtContent>
<w:r>
<w:t>foo</w:t>
<w:br/>
<w:t>bar</w:t>
</w:r>
</w:sdtContent>
</w:sdt>
<w:r>
</w:p>
有关如何使用docx4j添加其中一个,请参阅字符串中的换行符