首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SelectPDF在幕后呈现重复值

SelectPDF在幕后呈现重复值
EN

Stack Overflow用户
提问于 2020-05-20 01:39:36
回答 1查看 119关注 0票数 0

我最近继承了一些用SelectPDF呈现的报告,并试图解决一个问题。在这个特殊的例子中,一个非常基本的MVC页面呈现一组在中间有分页的表,就是将重复的数据随机组合成隐藏在幕后的字段。当您通过Ctrl+F搜索文档或尝试拖动和选择(请参阅图像)时,数据显示为可搜索的,而复制时,数据显示为报表中字段/值的某种组合。例如,在下面的图像中,这些黄色字段是来自上一页或以下页面的数据,可以搜索、复制等。文件没有隐藏字段,没有显示:无,没有这种性质的任何内容。我想看看这是否是一个SelectPDF设置?为什么在报告其他地方找到的隐藏字段中重新呈现数据?

代码是非常基本的引导布局,包含div和for循环,在每个进程中都呈现一个表。在每个表之后是一个分页,例如:

代码语言:javascript
复制
<div class="new-page"></div>

类在哪里

代码语言:javascript
复制
.new-page {
page-break-after: always;

根据docs,呈现似乎也相当简单:

代码语言:javascript
复制
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;
    }

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-20 07:04:50

披露:我为SelectPdf工作。

您需要启用备用分页算法。要做到这一点,请使用以下代码:

代码语言:javascript
复制
pdf.Options.PageBreaksEnhancedAlgorithm = true;

有关该属性的详细信息如下:https://selectpdf.com/docs/P_SelectPdf_HtmlToPdfOptions_PageBreaksEnhancedAlgorithm.htm

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61903693

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档