2015-04-09 8 views
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); 
} 

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

Заранее благодарен.

ответ

1

Если единственным отличием является количество копий, то вы можете просто подготовить документ один раз, вставив HTML, слияние и т.д.

Затем в цикле, установите количество копий и сохранить документ как 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 для мониторинга времени процессора, затраченного на операции. Однако при добавлении подробной информации, такой как подсчет вызовов, время, затрачиваемое на операции aspose, резко возрастает, а также на некоторые другие операции. 1 минута всего процесса составляет 30 минут, поэтому я считаю это ненадежным. Есть ли более точный способ мониторинга, связанный с операциями. – halil

+0

Это займет много времени без профилирования? Aspose.Words зависит от классов из .NET framework и широко называет методы из библиотек классов .NET. Возможно, что профилировщик также отслеживает вызовы из зависимостей и делает огромный список. –

+0

Нет, без профилирования это занимает приблизительно 1 минуту (что также несколько длиннее). Это, как вы сказали, профайлер. Используете ли вы какой-либо метод, когда вы обрабатываете связанные операции, чтобы отслеживать, что происходит за кулисами. – halil