Печать разных значений (номер копии) в разных копиях конкретного документа

1

Мое приложение использует RTF file с полями слияния как источник и создает с ним 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);
}

Это выглядит излишним и имеет низкую производительность. Также каждый раз, когда мои пользователи пытаются изменить номер копии для печати, мое приложение вычисляет все с самого начала. Я спрашиваю, есть ли способ сделать это быстрее или как не создавать целую вещь, когда число копий будет напечатано? До сих пор я не нашел многого.

Заранее спасибо.

Теги:
printing
rtf
aspose
aspose.words

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 в качестве разработчика-евангелиста.

  • 0
    Спасибо за ответ, с вашим решением мне нужно распечатать каждую копию отдельно в одном вызове (сначала я попытался использовать макросы), что создаст другие проблемы, я думаю. Каков наилучший способ контроля за задействованными операциями? Я использую профилировщик YourKit для отслеживания процессорного времени, затрачиваемого на операции. Однако, когда была добавлена подробная информация, такая как счетчик вызовов, время, затрачиваемое на операции обработки данных, резко увеличивается, а также на некоторые другие операции. 1 минута в общем процессе становится 30 минутами, поэтому я считаю это ненадежным. Есть ли более точный способ контроля за выполнением операций?
  • 0
    Это занимает много времени без профилирования? Aspose.Words зависит от классов из .NET Framework и активно вызывает методы из библиотек классов .NET. Возможно, что профилировщик также отслеживает вызовы зависимостей и составляет огромный список.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню