我的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 =服务器错误,当我尝试渲染向导控件时,所以我想我可能需要创建一个新窗口,然后在打印之前输出字符串,但是不能好像有点工作......任何想法?
答案 0 :(得分:1)
我找到了解决我的问题的方法,我没有设法完成它的客户端,但我设法解决它的服务器端,这比我不想做的PDF路线更好。 我在这里发现了一篇很棒的文章 Printing in ASP.NET
我建议一次打印我的向导控件的所有步骤。谢谢你的帮助。
答案 1 :(得分:0)
如果您将向导步骤放到单个页面中,那么您已经使用的javascript打印方法将起作用,因此它们都会呈现...
另一种方法我想只需浏览每一步并按下你的打印按钮。
我这样做的方法是使用类似pdfsharp的东西,并给它标记生成每一步并告诉它为每个标记步骤创建一个pdf页面...从那里用户有一个pdf文档,他们可以使用他们常用的pdf查看器查看保存或打印。
问题是javascript方法正在使用基于dom的api调用来要求浏览器打印页面,这当然最终意味着您只能打印当前正在查看的向导步骤...使用pdf方法意味着用户可以在打印前预览预期的打印输出,并且您可以更好地控制打印的内容。
虽然需要更多代码......
pdfsharp可以在这里找到:http://www.pdfsharp.net/Downloads.ashx
正如你可以看到它的免费和开源。