如何打印每页使用相同模板的文档 Web asp.net VB

How to print a document with the same template per page web asp.net vb

提问人:GojoSatoru 提问时间:7/5/2023 最后编辑:Mostafa RoghanianGojoSatoru 更新时间:7/6/2023 访问量:63

问:

我是 asp.net 新手,使用 VB.Net 语言。

如何在每页上打印具有相同模板或标题的文档?

如果 GridView 有 10 条以上的记录,则其余记录将位于第 2 页上,其中包含第一页的模板/标题。

Protected Sub PrintGridView(ByVal sender As Object, ByVal e As EventArgs)
    Dim dataGrid As New System.Web.UI.WebControls.GridView
    dataGrid.DataSource = (From lst In _lstPrint Select New With {.Item = lst.Item, .Descricao = lst.TipoComponente, .Certificado = lst.Certificacao, .Corrida = lst.Corrida, .Qtd = lst.Qtd, .UnidMedida = lst.UnidadeMedida})

    Dim obj As New eLVM()
    obj.Id = Integer.Parse(Request.QueryString("id"))
    ' Disable Paging if all Pages need to be Printed.
    dataGrid.AllowPaging = False

    ' Re-bind the GridView.
    dataGrid.DataSource = (From lst In _lstPrint Select New With {.Item = lst.Item, .Descricao = lst.TipoComponente, .Certificado = lst.Certificacao, .Corrida = lst.Corrida, .Qtd = lst.Qtd, .UnidMedida = lst.UnidadeMedida})
    dataGrid.DataBind()

    ' For Printing Header on each Page.
    dataGrid.UseAccessibleHeader = True
    dataGrid.HeaderRow.TableSection = TableRowSection.TableHeader
    dataGrid.FooterRow.TableSection = TableRowSection.TableFooter
    dataGrid.Attributes("style") = "border-collapse:separate"
    For Each row As GridViewRow In dataGrid.Rows
        If (row.RowIndex + 1) Mod dataGrid.PageSize = 0 AndAlso row.RowIndex <> 0 Then
            row.Attributes("style") = "page-break-after:always;"
        End If
    Next

    Using sw As StringWriter = New StringWriter()
        ' Render GridView to HTML.
        Dim hw As HtmlTextWriter = New HtmlTextWriter(sw)
        dataGrid.RenderControl(hw)

        ' Enable Paging.
        dataGrid.AllowPaging = True
        'dataGrid.DataSource = _lstPrint
        'dataGrid.DataBind()

        ' Remove single quotes to avoid JavaScript error.
        Dim gridHTML As String = sw.ToString().Replace(Environment.NewLine, "")
        Dim gridCSS As String = gridStyles.InnerText.Replace("""", "'").Replace(Environment.NewLine, "")

        ' Print the GridView.
        Dim script = "window.onload = function() { PrintGrid('" & gridHTML & "', '" & gridCSS & "'); }"
        ClientScript.RegisterStartupScript([GetType](), "GridPrint", script, True)
    End Using
    ' rest of the code ...
End Sub

GridView 的场景

我希望该黑色部分与其余的 GridView 记录一起在第二页的标题部分重复。

javascript html css asp.net vb.net

评论


答:

0赞 Albert D. Kallal 7/5/2023 #1

我有点想知道是否尝试以某种方式转换 HTML 中的渲染表(这就是 asp.net 处理系统处理该控件后 gv 的样子)。

因此,最终结果很难控制页面布局,事实上,基于 Web 的打印可能是您可以实现的最困难的任务之一。

结果呢?

我认为您最好采用报告生成器系统。请考虑客户端 RDL 报表查看器。所谓的 RDL(报表定义语言)与 SSRS 报告服务大致相同,但不需要 SQL Server 报告服务。

这不仅允许非常漂亮的布局和页面系统,而且还具有内置的 Excel、Word 和 PDF 导出功能。

因此,它看起来像这样:

enter image description here

因此,请考虑使用 RDL 报表控件。设置起来可能有点痛苦,但这是我会考虑的事情。

您需要逐步谷歌了解如何设置 + 让报表查看器(和设计器)正常工作,所有这些都可以在没有 SQL Server Reporting Services 的情况下工作。

一个链接:

https://learn.microsoft.com/en-us/sql/reporting-services/application-integration/integrating-reporting-services-using-reportviewer-controls-get-started?view=sql-server-ver16