Метод Active Reports 6 PdfExport.Export() выдает исключение ArgumentOutOfRangeException после обновления Windows 10 Creators

Проблема

У меня есть код, который использует класс PdfExport Active Reports 6 для создания отчета в формате PDF. Я запускаю этот код на компьютере с Windows 10. После обновления Creators код начал выдавать ошибку ArgumentOutOfRangeException.

Код работал нормально, когда он запускался на Windows Server, но не на моем компьютере с Windows 10.

Кроме того, я попытался переключиться на класс XlsExport, и отчет работал нормально.

Код

public static void ExportPDF(ActiveReport report, Stream stream)
{

        try
        {
            report.Run();
            using (PdfExport pdf = new PdfExport())
            {
                // exception occurs here
                pdf.Export(report.Document, stream);
            }

        }
        catch (Exception)
        {
            throw;
        }

}

Сведения об ошибке

Исключение ArgumentOutOfRangeException

Сообщение

Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index

Трассировка стека

   at System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource)
   at System.Collections.Generic.List`1.get_Item(Int32 index)
   at #mqc.#Vqc.#RZc(Int32 fontIndex, String fontName, FontStyle fontStyle, Single sizeInPoints, Boolean vertical)
   at DataDynamics.ActiveReports.Export.Pdf.PdfExport.#7pk(Document document, Stream stream, String pageRange)
   at DataDynamics.ActiveReports.Export.Pdf.PdfExport.Export(Document document, Stream stream, String pageRange)
   at DataDynamics.ActiveReports.Export.Pdf.PdfExport.Export(Document document, Stream stream)
...

person Walter Stabosz    schedule 11.10.2019    source источник


Ответы (1)


После прочтения этого сообщения на форуме поддержки Active Reports и некоторые пробы и ошибки, я нашел исправление.

Решение

Откройте код файла дизайнера отчетов. В моем случае это было в файле SomeReport.rpx.vb.

Найдите область кода, сгенерированную дизайнером:

#Region "ActiveReports Designer generated code"
    Public WithEvents Detail1 As DataDynamics.ActiveReports.Detail
    Friend WithEvents ReportHeader1 As DataDynamics.ActiveReports.ReportHeader
    Friend WithEvents ReportFooter1 As DataDynamics.ActiveReports.ReportFooter
    ....

1. Объявления стилей требуют font-family

Внутри этой области кода найдите экземпляры Style свойств:

Me.Label2.Style = "font-family: Arial; color: Black; font-size: 10pt; font-weight: bold; text-align: right; ddo-char-set: 1"

Вы должны убедиться, что каждое свойство Style включает свойство font-family. Просмотрите свой код и исправьте все, что отсутствует.

2. Объявления StyleSheet также требуют font-family

Также ищите экземпляры кода, подобного этому, и убедитесь, что они также имеют определенный font-family.

Me.StyleSheet.Add(New DDCssLib.StyleSheetRule("font-family: Times New Roman; font-style: inherit; font-variant: inherit; font-weight: bold; font-size: 16pt; font-size-adjust: inherit; font-stretch: inherit", "Heading1"))

3. Ищите font-family: inherit

Вам нужно явно определить font-family, если вы видите font-family: inherit где-нибудь в разработанном коде, замените его именем шрифта.

Заключение

Как только вы добавите все недостающие font-family , ваш отчет должен работать.

person Walter Stabosz    schedule 11.10.2019