Мое приложение использует 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);
}
Это выглядит излишним и имеет низкую производительность. Также каждый раз, когда мои пользователи пытаются изменить номер копии для печати, мое приложение вычисляет все с самого начала. Я спрашиваю, есть ли способ сделать это быстрее или как не создавать целую вещь, когда число копий будет напечатано? До сих пор я не нашел многого.
Заранее спасибо.
Если единственное различие - номер копии, то вы можете просто подготовить документ один раз, вставив 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 в качестве разработчика-евангелиста.