Как повысить производительность метода Syncfusion ConvertToPDF - PullRequest
0 голосов
/ 28 октября 2019

Я использую следующий метод для создания 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».

1 Ответ

1 голос
/ 31 октября 2019

Элемент EnableFastRendering не указан в "converter.settings": По умолчанию мы использовали метод быстрой визуализации на переносных платформах (Asp.Net Core и Xamarin) при выполнении преобразования Word в PDF и так далее "Свойство EnableFastRendering "не указано на этих платформах. Но мы предоставили этот подход быстрого рендеринга в качестве опции для базовых платформ (Windows Forms, WPF, Asp.Net Web Forms) при выполнении преобразования Word в PDF, поэтому он указан в перечисленных выше базовых платформах.

Предложение по повышению производительности: Мы предлагаем вам использовать процессор x64, чтобы использовать доступную оперативную память и сократить время выполнения.

Если вы все еще сталкиваетесь с той же проблемой, пожалуйста, предоставьте нам следующееподробности с вашего конца:

  1. Введите документ Word с полным образцом. Если в вашем документе Word есть какие-либо конфиденциальные данные, замените их фиктивными данными и предоставьте их нам. Нам просто нужен ваш документ, чтобы воссоздать проблему, с которой вы столкнулись.
  2. Цель платформы, используемая в вашем приложении. (Щелкните правой кнопкой мыши на своем проекте -> Свойства -> Построить).
  3. ОЗУ, используемая на вашем конце.

На основе вышеизложенных деталей мы проанализируем сообщенную проблему ипредоставит вам соответствующее решение в ближайшее время.

Примечание: Я работаю в Syncfusion

...