页面加载时打印pdf

时间:2008-11-13 23:55:09

标签: c# asp.net javascript

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

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

,它提供了一个链接,用于在用户点击时将列表打印到pdf;你可以注意到脚本从后面的代码调用一个函数。

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

有什么问题?提前谢谢。

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

5 个答案:

答案 0 :(得分:1)

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

在您的示例中,在页面加载时会评估Print()函数。任何有&lt; %%&gt;的东西和&lt;%=%&gt;括号在渲染时得到评估。

执行所需操作的最佳方法是在页面上显示一个链接,该链接会重定向到ASHX页面,然后将PDF直接输出到响应流中。应该有很多关于如何在这个地方完成这方面的例子(Google ashx)。链接看起来像这样:

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

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

所以如果你的财产是:

protected int CurrentPageId { get { return 4; } }

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

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

罗布

答案 1 :(得分:1)

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

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

  

nmiranda写道:

     

问题在于我编码时   它发生在我去这个页面的时候   加载时打印到pdf,I   以为它会等待点击但是   相反,它执行打印。

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

答案 2 :(得分:0)

从您的代码片段中确切地说出发生了什么有点困难,但我认为您将pdf文件作为print()函数的一部分输出到响应流中。 这将在加载时显示pdf,因为后台代码在渲染时(在将代码发送到浏览器之前)进行评估,而不是在客户端上进行评估。

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

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

答案 3 :(得分:0)

您只需要另一个页面即可打印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>

答案 4 :(得分:0)

最后我做到了,我必须清楚,首先我使用另一个网页制作了所有报告,根据我收到的回复,我意识到我使用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()中我构建和url调用ashx来生成我的报告,ashx根据一些问题接收不同的参数并且它工作得非常好。

它执行脚本并在我需要的其他窗口中显示pdf。

感谢名单。