图1为html界面中的一个内嵌表格,当使用builder.insertHtml(processedTemplate);进行内容插入到指定的word文档后,原有的表格宽度设置无效、内容换行也无法生效,我有什么办法保持html的style到word中,及如何能设置指定class的table不跨页显示?
要在将 HTML 内容插入到现有的 Word 文档时保持内嵌表格的设置宽度,您可以按照以下步骤操作:
原因:在插入 HTML 内容时,默认情况下可能会丢失表格的样式和宽度设置,导致文档格式不符合预期。
解决方案:
- 
使用 DocumentBuilder的insertHtml方法:确保在插入 HTML 时使用适当的选项,以便保留样式。您可以使用useBuilderFormatting参数来控制是否使用DocumentBuilder的格式设置。
- 
设置表格的样式:在插入 HTML 之前,手动设置表格的宽度和其他样式属性。使用 getCellFormat()和getRowFormat()方法来配置表格单元格和行的格式。
- 
防止表格跨页:确保特定类的表格不跨页显示,您可以在插入表格后设置其 RowFormat的AllowBreakAcrossPages属性为false。
下一步:以下是一个示例代码,展示了如何实现这些步骤:
Document doc = new Document("your-document.docx");
DocumentBuilder builder = new DocumentBuilder(doc);
// 插入 HTML 内容
String htmlContent = "<table style='width:100%;'><tr><td style='width:50%;'>Cell 1</td><td style='width:50%;'>Cell 2</td></tr></table>";
builder.insertHtml(htmlContent, true);
// 设置表格不跨页
Table table = (Table) doc.getChild(NodeType.TABLE, 0, true);
for (Row row : table.getRows()) {
    row.getRowFormat().setAllowBreakAcrossPages(false);
}
// 保存文档
doc.save("updated-document.docx");
请根据您的具体需求调整代码。如果您有其他问题或需要进一步的帮助,请随时告诉我!希望这些建议能帮助您顺利解决问题!
我这边希望对html中class=“no-break”的表格插入到word后设置为不跨页,而非所有的表格,例如插入的表格是这样的内容:
String htmlCtx = “<table>
 <tr>
   <td>
     <table class="no-break">
	   <tr>
	      <td>254</td>
		  <td>254-1</td>
		  <td>254-2</td>
	   </tr>
	 </table>
   </td>
 </tr>
</table>”;
@LXY133 我可以看到单元格文本没有空格。MS Word 不允许对文本进行无空格换行。另外,Aspose.Words 不允许使用 "word-wrap "样式,因此唯一的办法是在 html 中或插入表格后指定表格/行/单元格的宽度,请查看 https://docs.aspose.com/words/java/applying-formatting/。您也可以使用 CellFormat | Aspose.Words for Java
没有办法通过 HTML 类检测指定的表格。您需要添加值来检测哪些表格不会跨页断开。下面的示例代码说明了如何做到这一点:
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
String htmlCtx = "<table>" +
        "<tr>" +
        "<td>" +
        "<table style=\"width:100%\" class=\"no-break\">" +
        "<tr>" +
        "<td>Text</td>" +
        "<td>Text</td>" +
        "<td>Text</td>" +
        "</tr>" +
        "</table>" +
        "</td>" +
        "</tr>" +
        "</table>";
boolean isNoBreak = false;
HandleNodeChanging callback = new HandleNodeChanging(isNoBreak);
doc.setNodeChangingCallback(callback);
builder.insertHtml(htmlCtx);
public static class HandleNodeChanging implements INodeChangingCallback {
    public HandleNodeChanging(boolean isNoBreak) {
        mIsNoBreak = isNoBreak;
    }
    public void nodeInserted(NodeChangingArgs args) {
        if (args.getNode().getNodeType() == NodeType.TABLE) {
            if (!mIsNoBreak) {
                Table table = (Table) args.getNode();
                for (Row row : table.getRows()) {
                    row.getRowFormat().setAllowBreakAcrossPages(mIsNoBreak);
                }
            }
        }
    }
    public void nodeInserting(NodeChangingArgs args) {
    }
    public void nodeRemoved(NodeChangingArgs args) {
    }
    public void nodeRemoving(NodeChangingArgs args) {
    }
    private boolean mIsNoBreak;
}
此外,以下链接也会有所帮助:




