Html 插入现有的word文档时,无法保存内嵌table的设置宽度

图1为html界面中的一个内嵌表格,当使用builder.insertHtml(processedTemplate);进行内容插入到指定的word文档后,原有的表格宽度设置无效、内容换行也无法生效,我有什么办法保持html的style到word中,及如何能设置指定class的table不跨页显示?


@LXY133

要在将 HTML 内容插入到现有的 Word 文档时保持内嵌表格的设置宽度,您可以按照以下步骤操作:

原因:在插入 HTML 内容时,默认情况下可能会丢失表格的样式和宽度设置,导致文档格式不符合预期。

解决方案

  1. 使用 DocumentBuilderinsertHtml 方法:确保在插入 HTML 时使用适当的选项,以便保留样式。您可以使用 useBuilderFormatting 参数来控制是否使用 DocumentBuilder 的格式设置。

  2. 设置表格的样式:在插入 HTML 之前,手动设置表格的宽度和其他样式属性。使用 getCellFormat()getRowFormat() 方法来配置表格单元格和行的格式。

  3. 防止表格跨页:确保特定类的表格不跨页显示,您可以在插入表格后设置其 RowFormatAllowBreakAcrossPages 属性为 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>”;

使用代码插入html后,word文档中的表格还是无法实现表格的宽度的固定

builder.insertHtml(processedTemplate, true);

@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;
}

此外,以下链接也会有所帮助: