[英]Configuring a Content Control in Word to add New Lines
我在Word模板中使用內容控件,在其中以編程方式添加文本(使用Java)。 這很好。 現在,我想在文本中的每個新句子處插入一行。 有沒有一種方法可以配置內容控件,使其自動執行此操作?
恐怕您無法將內容控件配置為自動執行此操作。
但是,如果通過Word對象模型填充內容控件,則可以簡單地使用RTF內容控件或純文本內容控件,后者具有“允許回車(多段)”選項(對象中的MultiLine)模型”),並用包含換行符的文本填充。
為了進行快速測試,我將這樣的純文本內容控件添加到了一個空文檔中,並使用了以下VBA代碼:
Sub FillContentControl()
ContentControls(1).Range.Text = "Sentence One." & vbNewLine & "Sentence Two."""
End Sub
在我的示例中,這產生了以下輸出:
Sentence One.
Sententce Two.
當然,您應該在Java代碼中添加換行符。 您只需要檢測句子的結尾即可。
如果,正如您對基於docx4j的解決方案的要求所表明的那樣,您沒有通過Word填寫內容控件,而是直接在docx中填寫內容,那么我想到了另一個涉及VBA宏的解決方法(我通常不建議這樣做):為Document.Open事件添加事件處理程序,以更新文檔中所有已標記的內容控件。 它可能看起來像這樣:
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元素,如下所示:
<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添加其中之一,請參見linebreaks-in-strings
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.