Я использую следующий метод для создания PDF-документа, используя слияние MS Word Mail. «PaymentPlanDetails» имеет 7050 записей, а его модель данных имеет 9 строковых полей, int полей, десятичных полей и DateTime поле.
private MemoryStream MergeOracleDisbursementToPdf(OracleDisbursementsHeader mailMergeModel, List<OracleDisbursementsDetailPDF> PaymentPlanDetails, byte[] fileBytes)
{
if (fileBytes == null || fileBytes.Length == 0)
{
return null;
}
var templateStream = new MemoryStream(fileBytes);
var pdfStream = new MemoryStream();
var wordStream = new MemoryStream();
WordDocument mergeDocument = null;
using (mergeDocument = new WordDocument(templateStream, FormatType.Docx))
{
if (mergeDocument != null)
{
var mergeList = new List<OracleDisbursementsHeader> { mailMergeModel };
var reportDataSource = new MailMergeDataTable("Report", mergeList);
var tableDataSource = new MailMergeDataTable("PaymentPlanDetails", PaymentPlanDetails);
List<DictionaryEntry> commands = new List<DictionaryEntry>();
commands.Add(new DictionaryEntry("Report", ""));
commands.Add(new DictionaryEntry("PaymentPlanDetails", ""));
MailMergeDataSet ds = new MailMergeDataSet();
ds.Add(reportDataSource);
ds.Add(tableDataSource);
mergeDocument.MailMerge.ExecuteNestedGroup(ds, commands);
mergeDocument.UpdateDocumentFields();
using (var converter = new DocIORenderer())
{
converter.Settings.
using (var pdfDocument = converter.ConvertToPDF(mergeDocument)) // takes 1 Min 15 Secs for 7050 Records
{
pdfDocument.Save(pdfStream);
pdfDocument.Close();
}
}
mergeDocument.Close();
}
}
return pdfStream;
}
Проблема в том, что код висит в строке «using (var pdfDocument = converter.ConvertToPDF(mergeDocument))
» в течение 1 минуты и 15 секунд . Есть ли способ ускорить этот процесс?
Что я пробовал до сих пор:
«https://www.syncfusion.com/forums/138495/conversion-of-large-word-doc-to-pdf-is-very-slow-also-often-results-in-out-of-memory-errors” В статье показано, как включить быстрый рендеринг. Однако в версии, которую я сейчас использую, такой член не указан в разделе «converter.Settings».