1

我的应用程序使用RTF filewith 合并字段作为源,并PDF file使用Aspose.Words. 此应用程序的用户将生成的文档提供给他们的客户,因此将为他们的每个客户打印相同文档的副本。然而,这些副本只有一个区别,那就是每个文档副本末尾的副本编号。

目前; 假设有 4 个客户,因此将打印相同文档的 4 个副本,只有副本编号不同。我通过创建相同的文档 4 次来实现这一点,每次我插入我的 html 文本、合并字段并添加副本号然后附加文档。最后,我有一个大文档,其中附加了所有 4 个创建的文档。

这是我的代码块,那里有很多代码,所以我尝试将它们缩小到仅相关部分:

import com.aspose.words.*

Document docAllAppended = new Document(loadDocument("/documents/" + RTFFileName));
Document docTemp=null;
for (int i = 1; i <= copyNumber; i++) {
  docTemp = new Document(loadDocument("/documents/" + RTFFileName));

  DocumentBuilder builder = new DocumentBuilder(docTemp);
  //insert html which includes file context
  builder.insertHtml(htmlText);

  //insert Copy number
  builder.moveToBookmark("sayfa");
  Font font = builder.getFont();
  font.setBold(true);
  font.setSize(8);
  builder.write("Copy Number-" + i+ " / ");
  font.setBold(false);

  docAllAppended.appendDocument(docTemp,ImportFormatMode.USE_DESTINATION_STYLES);
}

这看起来非常不必要并且性能低下。此外,每次我的用户尝试更改要打印的副本数时,我的应用程序都会从​​一开始就计算整个事情。我要问的是,有没有办法让它更快,或者当要打印的副本数发生变化时如何不重新创建整个东西?到目前为止,我还没有找到太多。

提前致谢。

4

1 回答 1

1

如果唯一的区别是副本数,那么您可以通过插入 HTML、合并等来准备一次文档。

然后,在 for 循环中,设置副本编号并将文档保存为 docx 或 pdf。不需要在循环中附加文档,您可以将每个副本保存为不同的名称。

import com.aspose.words.*

Document docAllAppended = new Document(loadDocument("/documents/" + RTFFileName));
Document docTemp=null;
docTemp = new Document(loadDocument("/documents/" + RTFFileName));

DocumentBuilder builder = new DocumentBuilder(docTemp);
//insert html which includes file context
builder.insertHtml(htmlText);

// In for loop, only update the copy number
for (int i = 1; i <= copyNumber; i++) {
    // Use DocumentBuilder for font setting
    builder.moveToBookmark("sayfa");
    Font font = builder.getFont();
    font.setBold(true);
    font.setSize(8);
    builder.write("dummy value");
    font.setBold(false);

    // Use Bookmark for setting the actual value
    Bookmark bookmark = docAllAppended.getRange().getBookmarks().get("sayfa");
    bookmark.setText("Copy Number-" + i + " / ");

    // Save the document for each client
    docAllAppended.save(Common.DATA_DIR + "Letter-Client-" + i + ".docx");
}

我与 Aspose 一起担任开发人员宣传员。

于 2015-04-10T18:28:58.353 回答