【问题标题】:Prints pdf when page loads页面加载时打印 pdf
【发布时间】:2008-11-13 23:55:08
【问题描述】:

我的 aspx 页面中有这段代码;

<a href="javascript:void(0);" onclick=<% Print(); %> title="Print listings">Print</a>

当用户点击它时,它会显示一个链接以将列表打印到 pdf;如您所见,脚本从后面的代码中调用了一个函数。

问题在于,当我编写此代码时,当我进入此页面时,它会在加载时打印为 pdf,我认为它会等待点击,但它会执行打印。

有什么问题?提前致谢。

PD。我正在使用 VS2005,我使用 iTextSharp 创建 pdf。

【问题讨论】:

    标签: c# asp.net javascript


    【解决方案1】:

    您想使用 HyperlinkControl 并将 OnClick 事件处理程序连接到 Print 方法后面的代码。当用户然后单击链接时,页面将回发并引发 OnClick 事件。从那里您可以打印您的 PDF。

    在您的示例中,Print() 函数在页面加载时进行评估。任何带有 和 括号的东西都会在渲染时进行评估。

    执行您想要的操作的最佳方法是在您的页面上有一个链接,该链接重定向到 ASHX 页面,然后将 PDF 直接输出到响应流中。应该有很多关于如何在这个地方完成的例子(谷歌ashx)。链接如下所示:

    <a href="PrintMyPdf.ashx?PageID=<%= CurrentPageId %>">Print</a>
    

    这会将参数“PageID”传递给 ashx,您可以从中确定要打印的页面。 语法计算表达式(在这种情况下是代码中的属性,但它可以是方法或论坛)并将结果插入页面的该部分。

    所以如果你的财产是:

    protected int CurrentPageId { get { return 4; } }
    

    它会将以下内容写入您的页面:

    <a href="PrintMyPdf.ashx?PageID=4">Print</a>
    

    罗伯

    【讨论】:

      【解决方案2】:
      <a href="javascript:void(0);" onclick=<% Print(); %> title="Print listings">Print</a>
      

      你不能这样做。我知道你在想什么,但这是不可能的,而且(对不起)太天真了。

      nmiranda 写道:

      问题是当我编写这个代码时 碰巧当我去这个页面时 加载时打印为pdf,我 以为它会等待点击,但 而是执行打印。

      这绝对有道理。您需要做的是将 Print() 函数的调用放入 不同的 网页中,然后在 onclick 事件通过 AJAX 调用此网页。

      【讨论】:

        【解决方案3】:

        很难从您的代码 sn-p 中准确判断发生了什么,但我假设您将 pdf 文件作为 print() 函数的一部分输出到响应流。 这将在加载时显示 pdf,因为后面的代码是在渲染时评估的(就在它将代码发送到浏览器之前),而不是在客户端上评估。

        要获得您想要的行为,最好的方法是创建一个 http 处理程序文件 (ashx),该文件将接受任何所需的参数作为 url 上的请求变量,然后将 pdf 输出到流。

        然后,您可以使用正确的参数为 ashx 文件创建一个 href 以显示文档。

        【讨论】:

          【解决方案4】:

          最后我做到了,我必须清楚,首先我使用另一个网页制作了所有报告,根据我收到的回复,我意识到我使用 href 在同一页面内调用报告的方法不是正确。

          所以,我分析了罗伯特·瓦格纳的建议并尝试了这种方法;

          protected void btnPrint_Click(object sender, EventArgs e)
          {
              ...
              string url = GetUrlWithParameters();
          
              string reportscript = "<script language='JavaScript'>" +
                  "window.open('" + url + "', 'CustomPopUp', " +
                  "'width=400, height=400, resizable=yes, scrollbars=yes')" +
                  "</script>";
          
              Page.RegisterStartupScript("reportscript", reportscript);
              ...
          

          在 GetUrlWithParameters() 中,我构造并调用 ashx 并在其中生成报告,ashx 根据某些问题接收不同的参数,并且效果很好。

          它执行脚本并完全按照我的需要在另一个窗口中显示 pdf。

          谢谢。

          【讨论】:

            【解决方案5】:

            您只需要另一个页面来打印 PDF 文档。假设该页面是 printPDF.aspx

            您只需要将链接更改为

            <a href="printPDF.aspx" title="Print listings">Print</a>
            

            如果您必须将参数传递给它,那么我会将链接更改为

            <a href="javascript:void(0);" onlick="javascript:GoToPrint();" title="Print listings">Print</a>
            

            脚本:

            <script>
                function GoToPrint()
                {
                    window.location = 'printPDF.aspx?var1=x&var2=y';
                }
            </script>
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2019-04-13
              • 1970-01-01
              • 2017-12-09
              • 1970-01-01
              • 2016-07-19
              • 2017-04-11
              相关资源
              最近更新 更多