2

我的 Web 应用程序中有一个 asp:Wizard 控件。我需要能够在向导中的任何步骤进行打印,并打印直到该步骤的所有步骤,而不仅仅是当前步骤。

我在每个步骤页面中添加了一个打印按钮,并尝试调用 javascript:window.Print(),但只打印当前步骤。

我如何获得在 1 页中打印的所有步骤?

在我走 PDF 路线之前,我想先尝试让它在 javascript 中工作。我试过做这样的事情:

protected void Page_Load(object sender, EventArgs e) 
    { 
        StringWriter sw = new StringWriter(); 
        HtmlTextWriter tw = new HtmlTextWriter(sw); 
        this.WizardStep2.RenderControl(tw); 
        string wizardHtmlContent = sw.ToString().Replace("\r\n", ""); 

        string printScript = @"function printDiv(printpage) 
                                { 
                                var headstr = '<html><head><title></title></head><body>'; 
                                var footstr = '</body>'; 
                                var newstr = printpage; 
                                var oldstr = document.body.innerHTML; 
                                document.body.innerHTML = headstr+newstr+footstr; 
                                window.print();  
                                document.body.innerHTML = oldstr; 
                                return false; 
                                }"; 


        this.Page.ClientScript.RegisterStartupScript(this.GetType(), "PrentDiv", printScript, true); 
        this.Button1.Attributes.Add("onclick", "printDiv('" + wizardHtmlContent + "');"); 

    }

对于 aspx:

<form id="form1" runat="server"> 
<div> 
     <asp:Wizard ID="Wizard1" runat="server"> 
        <WizardSteps> 
            <asp:WizardStep ID="WizardStep1" runat="server" Title="Step 1"> 
                step1 
            </asp:WizardStep> 
            <asp:WizardStep ID="WizardStep2" runat="server" Title="Step 2"> 
                step2 
            </asp:WizardStep> 
        </WizardSteps> 
    </asp:Wizard> 
    <asp:Button ID="Button1" runat="server" Text="Button" /> 
</div> 
</form>

但是当我尝试渲染向导控件时,我在第 3 行遇到了丢失的 runat=server 错误,所以我认为我可能需要创建一个新窗口,然后在打印之前输出字符串,但似乎无法得到那个工作......任何人有任何想法吗?

4

2 回答 2

1

我找到了解决我的问题的方法,我没有设法在客户端完成它,但我设法在服务器端解决它,这比我不想做的 PDF 路线要好。我在这里找到了一篇很棒的文章: 在 ASP.NET 中打印

我修改为一次性打印我的向导控件的所有步骤。感谢你的帮助。

于 2011-08-02T10:51:15.107 回答
0

如果您将向导步骤放在一个页面中,那么您已经使用的 javascript 打印方法将起作用,以便它们都呈现......

我猜另一种方法是简单地浏览到每个步骤并点击你的打印按钮。

我这样做的方法是使用类似 pdfsharp 的东西,并给它每个步骤生成的标记,并告诉它为每个步骤的标记创建一个 pdf 页面......从那里用户有一个 pdf 文档,他们可以简单地查看使用他们常用的 pdf 查看器保存或打印。

问题是javascript方法正在使用基于dom的api调用来要求浏览器打印页面,这当然最终意味着您只能打印您当前正在查看的向导步骤......使用pdf方法意味着用户可以在打印前预览预期的打印输出,并且您可以更好地控制打印的内容。

虽然它确实需要更多的代码......

pdfsharp 可以在这里找到:http ://www.pdfsharp.net/Downloads.ashx

如您所见,它是免费和开源的。

于 2011-07-28T15:31:21.497 回答