【问题标题】: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>