【问题标题】:Need to create a .doc file with list of items using Aspose需要使用 Aspose 创建一个包含项目列表的 .doc 文件
【发布时间】:2020-09-22 08:26:44
【问题描述】:

我一直在使用 Aspose.Words.jdk15.jar 打印 .doc 文件的遗留应用程序。我有一个要求,我要获取值列表,然后我们必须在 doc 文件中循环并打印它。

我们正在使用 range.replace() 方法在 doc 中替换该值。这个文档已经存在于我的工作区中,我们已经像这样映射了值

组件名称:$COMPONENT_NAME 结算生效日期:$EFFECTIVE_DATE 结算结束日期:$END_DATE

以及我为替换 doc 的值而编写的代码。所以,我的要求是根据列表的大小在我的文档中多次需要这个值。

for(int i=0;i

doc.getRange().replace("$COMPONENT_NAME" , checkNull(details.get(i).getComponentName()) + “,”, false, false); doc.getRange().replace("$EFFECTIVE_DATE" , checkNull(details.get(i).getBillEffectiveDate()) + “,”, false, false); doc.getRange().replace("$END_DATE" , checkNull(details.get(i).getBillEndDate()) + “,”, false, false); }

【问题讨论】:

    标签: aspose aspose.words


    【解决方案1】:

    实现您需要的最佳方式是使用邮件合并功能。 https://docs.aspose.com/words/java/about-mail-merge/ 但在这种情况下,您需要用模板中的合并字段替换占位符。 如果您无法更改模板,您可以为列表中的每个项目克隆文档,替换克隆文档中的值,然后将文档合并在一起以获得最终结果。代码如下所示:

    // Open template
    Document doc = new Document("C:\\Temp\\in.doc");
    
    // Create document where result will be stored to.
    // Simply clone the original template without children,
    // In this case styles of the original document will be kept.
    Document result = (Document)doc.deepClone(false);
    
    for(int i=0; i<details.length; i++)
    {
        Document component = doc.deepClone();
    
        component.getRange().replace("$COMPONENT_NAME", details[i].getComponentName());
        component.getRange().replace("$EFFECTIVE_DATE", details[i].getBillEffectiveDate().toString());
        component.getRange().replace("$END_DATE", details[i].getBillEndDate().toString());
    
        // Append the result to the final document.
        result.appendDocument(component, ImportFormatMode.USE_DESTINATION_STYLES);
    }
    
    result.save("C:\\Temp\\out.doc");
    

    但我更喜欢邮件合并方法。

    【讨论】:

    • 谢谢 Alexey...我会尝试这种方法
    • 但问题是我无法更改模板并且我必须使用相同的模板。所以在这种情况下,我必须克隆文档并合并它。如何合并两个文档?
    • 谢谢@Alexey Noskov,我的要求有点不同。在同一个文档中,我们有另一个数据,我们不能重复并且应该在文档中只出现一次。但是我们必须重复很少的字段,因为我们在 DB 调用后获得了字段列表。
    • @SumitRanjan 该技术是相同的,但在您的情况下,您只克隆模板的必需部分。如果没有您的模板,很难为您提供准确的代码。正如我之前提到的,使用带有区域的邮件合并功能来实现您的需要会更容易和正确。
    • 地址名字:$FN 姓氏:$LN 电话号码:$PHN_NBR 费用 组件名称:$COMPONENT_NAME 生效日期:$EFFECTIVE_DATE 结束日期:$END_DATE 汇率:$RATE 货币:$CURRENCY 在我的模板,我有这些字段,其中地址将只有一次,而费用将是多次。如果您能给我任何代码示例,那就太好了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 2021-03-06
    • 2010-10-28
    • 2010-09-24
    • 1970-01-01
    • 2015-03-31
    • 2018-01-06
    相关资源
    最近更新 更多