【问题标题】:Aspose WORD styling for JAVA为 JAVA 设置 WORD 样式
【发布时间】:2021-06-18 07:29:02
【问题描述】:

现状

我有多个带有硬编码样式(例如字体大小、标题颜色等)的 Word 文档。使用 Aspose.WORD for java 生成 PDF。

我想要达到的目标

我想为多个租户使用一组文档,但根据租户的需要更改样式。

完美的解决方案是在实际生成文档之前预定义样式。此样式将应用于文档。

有什么解决办法吗?

【问题讨论】:

    标签: aspose aspose.words aspose.pdf


    【解决方案1】:

    在您的情况下,您可以为每个租户创建不同的模板并使用AttachedTemplate 属性将相应的模板附加到文档并将AutomaticallyUpdateStyles 属性设置为true。这会强制 Aspose.Words 更新文档中的样式以匹配附加模板中的样式。请看下面的简单代码示例:

    Document doc = new Document();
    DocumentBuilder builder = new DocumentBuilder(doc);
    // The Hello World text will use Normal style.
    builder.writeln("Hello world");
    
    // In the template.dotx I modified Normal style 
    // and after saving the text will be styled like defined in the template.
    doc.setAttachedTemplate("C:\\Temp\\template.dotx");
    doc.setAutomaticallyUpdateStyles(true);
    
    doc.save("C:\\Temp\\out.docx");
    doc.save("C:\\Temp\\out.pdf");
    

    您有一个用于生成报告的模板,您可以在此模板中定义文档布局。出于演示目的,我使用邮件合并功能。你有几个模板只定义了样式。在生成最终文档时,您将相应的模板附加到样式中,从而获得所需的输出。请参阅以下屏幕截图和代码。

    generateWithStyling("styling1", "C:\\Temp\\template1.dotx");
    generateWithStyling("styling2", "C:\\Temp\\template2.dotx");
    
    private static void generateWithStyling(String suffix, String template) throws Exception
    {
        // Open template
        Document doc = new Document("C:\\Temp\\in.docx");
        // Execute mail merge to fill the template with data.
        doc.getMailMerge().execute(new String[] { "FirstName", "LastName" }, new String[] { "Alexey", "Noskov" });
    
        doc.setAttachedTemplate(template);
        doc.setAutomaticallyUpdateStyles(true);
    
        doc.save("C:\\Temp\\out_" + suffix + ".docx");
        doc.save("C:\\Temp\\out_" + suffix + ".pdf");
    }
    

    更新:您可以使用copyStylesFromTemplate 方法,而不是使用AttachedTemplateAutomaticallyUpdateStyles 属性。它将样式从指定模板复制到文档中。

    【讨论】:

    • 我想避免为每个租户使用不同的模板。我想拥有相同的模板但不同的样式。
    • @Smolda 也许我不够清楚。我更新了我的答案。简而言之,您有一个定义报告布局的模板(一个用于所有租户)和几个定义样式的模板(每个租户一个)
    • 谢谢阿列克谢。你为我们节省了一点时间:)
    • @Smolda 我已经更新了我的答案。还有另一种选择可以实现您的需求。请参阅 Document.copyStylesFromTemplate 方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-29
    • 1970-01-01
    • 1970-01-01
    • 2011-07-19
    • 1970-01-01
    相关资源
    最近更新 更多