【问题标题】:Print all pages separated by pagebreaks in ASP.NET在 ASP.NET 中打印由分页符分隔的所有页面
【发布时间】:2019-03-06 20:51:27
【问题描述】:

我有一个带有#resultsDiv 的网页,该网页是根据后端查询对美元价值和预期数量的动态创建的,并在每个部件号的数据之间插入 CSS 分页符。 #resultsDiv 中可能有很多或只有几页,具体取决于用户设置的过滤器。它的设计使我们的库存团队可以为我们仓库中可能找到该零件的位置的每个零件编号打印一页。

我的问题是,当我单击按钮打印 div 中的页面(下面的代码)时,它只显示第一页(这是我不想打印的唯一页面)。相反,如果我右键单击并打印,则所有页面都可以打印。

我已经阅读了这些 SO 问题,并尝试了他们的大多数解决方案,但均无济于事: window.print() is not printing the whole page

window.print() only prints the “viewable” part of the screen

ScriptManager.RegisterStartupScript code not working - why?

我也尝试了这里建议的一些方法:

Advanced CSS Printing — Using CSS Page Breaks

作为参考,这里是 ScriptManager 的 MSDN 条目:

ScriptManager.RegisterStartupScript Method

这是点击处理程序:

    protected void btnPrint_OnClick(object sender, EventArgs e)
    {
        if (!(ViewState["PartsToPrint"] is DataTable dt)) return;
        DataView dv = new DataView(dt);
        DataTable dtDistinctPartNumbers = dv.ToTable(true, "partNumber");
        foreach (DataRow row in dtDistinctPartNumbers.Rows)
        {
            //pull out the data as needed from the datatable rows
            string partNumber = row["partnumber"].ToString();
            if (!dbf.IncrementPrintCount(GetSelectedOrganization(), partNumber))
            {
                setStatus(false, "Error saving print count");
            }
        }
        ScriptManager.RegisterStartupScript(resultsDiv, GetType(), resultsDiv.UniqueID, "window.print();", true);
    }

我也试过了:

ScriptManager.RegisterStartupScript(this, typeof(Page), "Print", "window.print();", true);

ScriptManager.RegisterStartupScript(resultsDiv, typeof(Page), "Print", "window.print();", true);

还有其他变体,包括 ASP 呈现的面板 (div) 选择器(请参阅下面的 CSS),所以我的想法已经不多了。

这是相关的 CSS:

@media print {
    body, html, #wrapper, #resultsDiv, 
#ContentPlaceHolder1_resultsDiv {
        height: 100%;
        width: 100%;
    }
    p.pagebreakhere {
        display: block;
        page-break-before: always;
    }
}

我需要点击事件来打印所有页面,而不仅仅是第一页。可能更简单地说,给我与右键单击和打印完全相同的对话框。我错过了什么?

【问题讨论】:

    标签: javascript html css asp.net printing


    【解决方案1】:

    好吧,结果证明这很容易,只要您可以执行一些客户端代码(我可以使用此解决方案)。

    在.aspx页面中,修改:

    <asp:Button runat="server" ID="btnPrint" OnClick="btnPrint_OnClick" Text="Print for recount"/> 
    

    收件人:

    <asp:Button runat="server" ID="btnPrint" OnClick="btnPrint_OnClick" Text="Print for recount" OnClientClick="javascript:window.print();"/>
    

    弹出“右键单击并打印”对话框,允许用户打印所有页面,并且 OnClick 事件仍然运行以执行打印计数的后端更新。

    可能有一个更优雅的解决方案,但我时间有限(库存在本周晚些时候),所以我愿意继续推进这个解决方案。

    【讨论】:

      猜你喜欢
      • 2013-04-08
      • 1970-01-01
      • 2011-07-07
      • 1970-01-01
      • 2011-11-01
      • 2012-05-07
      • 1970-01-01
      • 2017-01-08
      • 2020-12-29
      相关资源
      最近更新 更多