0

我使用以下方法使用 MS Word Mail 合并生成 PDF 文档。“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;
        }

问题是代码在“<code>using (var pdfDocument = converter.ConvertToPDF(mergeDocument))”行中挂起1 分钟 15 秒。有没有办法加快这个过程?

到目前为止我已经尝试过:

“<a href="https://www.syncfusion.com/forums/138495/conversion-of-large-word-doc-to-pdf-is-very-slow-also-often-results-in-out- of-memory-errors" rel="nofollow noreferrer">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”下没有列出这样的成员。

4

1 回答 1

1

EnableFastRendering 成员未在“converter.settings”中列出: 默认情况下,我们在执行 Word 到 PDF 转换时在便携式平台(Asp.Net Core 和 Xamarin)中使用快速渲染方法,因此此“EnableFastRendering”属性未在这些平台中列出. 但是我们在执行 Word 到 PDF 转换时在基本平台(Windows 窗体、WPF、Asp.Net Web 窗体)中提供了这种快速渲染方法作为选项,因此在上述这些基本平台中列出。

性能提升建议: 我们建议您使用 x64 处理器,以利用可用的 RAM 并减少执行时间。

如果您仍然面临同样的问题,请向我们提供以下详细信息:

  1. 输入带有完整示例的 Word 文档。如果您的 Word 文档中有任何机密数据,请用一些虚拟数据替换并提供给我们。我们只需要您的文件来重现您面临的问题。
  2. 应用程序中使用的平台目标。(右键单击您的项目-> 属性-> 构建)。
  3. 最终使用的 RAM。

基于以上细节,我们将进一步分析所报告的问题,并第一时间为您提供合适的解决方案。

注意:我为 Syncfusion 工作

于 2019-10-31T10:22:28.917 回答