SelectPDF визуализирует повторяющиеся значения за кулисами

Недавно я унаследовал некоторые отчеты, отображаемые с помощью SelectPDF, и пытаюсь решить проблему. В этом конкретном случае довольно простая страница MVC, которая отображает набор таблиц с разрывами страниц между ними, отображает случайный набор дублированных данных в виде скрытых полей за кулисами. Когда вы выполняете поиск в документе с помощью Ctrl+F или пытаетесь перетащить и выбрать (см. изображение), данные отображаются как доступные для поиска, а при копировании данные представляют собой некоторую комбинацию полей/значений из отчета. Например, на изображении ниже эти желтые поля представляют собой данные с предыдущих или следующих страниц, и их можно искать, копировать и т. д. В файле нет скрытых полей, нет display:none, ничего подобного. Я пытаюсь понять, возможно, это настройка SelectPDF? Почему он повторно отображает в скрытых полях данные, найденные в другом месте отчета?

Код представляет собой довольно простую компоновку boostrap с содержащим div и циклом for, который в каждом процессе отображает таблицу. После каждой таблицы ставится разрыв страницы, например:

<div class="new-page"></div>

Где находится класс

.new-page {
page-break-after: always;

Рендеринг также кажется довольно простым в соответствии с документами:

public static string RenderRazorViewToPDFWithHeader(RazorHeaderPartialView headerPartialView, string contentViewName, RazorFooterPartialView? footerPartialView, object model, ControllerContext ControllerContext, ViewDataDictionary ViewData, TempDataDictionary TempData, PdfPageOrientation pageOrientation)
    {
        string filePath = Path.GetTempPath() + Path.GetRandomFileName();

        var header = RenderRazorViewToString(headerPartialView.PartialViewName, model, ControllerContext, ViewData, TempData);
        var PDFView = RenderRazorViewToString(contentViewName, model, ControllerContext, ViewData, TempData);
        var footer = footerPartialView.HasValue ? RenderRazorViewToString(footerPartialView.Value.PartialViewName, model, ControllerContext, ViewData, TempData) : String.Empty;
        var pdf = new HtmlToPdf();

        pdf.Options.PdfPageOrientation = pageOrientation;

        pdf.Options.DisplayHeader = true;
        pdf.Header.DisplayOnFirstPage = true;
        pdf.Header.DisplayOnOddPages = true;
        pdf.Header.DisplayOnEvenPages = true;
        pdf.Header.Height = headerPartialView.Height;
        pdf.Header.Add(new PdfHtmlSection(header, null));

        if (footerPartialView.HasValue)
        {
            pdf.Options.DisplayFooter = true;
            pdf.Footer.Height = footerPartialView.Value.Height;
            pdf.Footer.Add(new PdfHtmlSection(footer, null));

            if (footerPartialView.Value.ShowPageNumbers)
            {
                const int fontSize = 8;
                int pageNumX = (pdf.Options.WebPageWidth / 3) + footerPartialView.Value.HorizontalMarginOffset;
                int pageNumY = footerPartialView.Value.VerticalMarginOffset;

                PdfTextSection pageNumText = new PdfTextSection(pageNumX, pageNumY,
                    "Page {page_number} of {total_pages}",
                    new System.Drawing.Font("Arial", fontSize));
                pdf.Footer.Add(pageNumText);
            }
        }

        var doc = pdf.ConvertHtmlString(PDFView);
        doc.Save(filePath);
        doc.Close();

        return filePath;
    }

введите здесь описание изображения


person James F    schedule 20.05.2020    source источник


Ответы (1)


Раскрытие информации: я работаю в SelectPdf.

Вам нужно включить альтернативный алгоритм разрыва страницы. Для этого используйте следующий код:

pdf.Options.PageBreaksEnhancedAlgorithm = true;

Подробнее об этом свойстве см. здесь: https://selectpdf.com/docs/P_SelectPdf_HtmlToPdfOptions_PageBreaksEnhancedAlgorithm.htm

person selectpdf    schedule 20.05.2020
comment
Благодарю вас! Я попробую сегодня и дам вам знать! - person James F; 20.05.2020