将字符串变量的内容打印到本地打印机ASP.NET

时间:2013-06-17 13:20:37

标签: c# asp.net printing

我在ASP.NET中有一个页面。在此页面中,我有一个List<string>,其中包含各种数据。我需要能够在客户端打印此信息。因此,如果登录用户单击打印按钮,则会显示一个对话框,从中可以选择设置,如打印机,横向/纵向,数字(如果是副本)等。这是我的代码:

 private List<string> dataToBePrinted = new List<string>();

 public void addDataToList(string text)
 {
    dataToBePrinted.Add(text);
 }

 protected void btnPrint_Click(object sender, EventArgs e)
 {
    //Print contents of dataToBePrinted to local printer here.
 }

到目前为止,我只能按原样打印页面(包括所有控件,窗口等),但我只需要List<string>中的信息。我怎么能做到这一点?

编辑:

好的,感谢所有的评论/答案。我得到了它的工作:

//When clicking "Print" data, put list in session variables and redirect to new blank page
protected void btnGruppenkalenderDrucken_Click(object sender, EventArgs e)
{
    Session["Printing"] = lstData;
    Response.Redirect("Printing.aspx");
}

//This is the code behind of the new blank page. Cast session variable back to list,   then fill table
public partial class Printing : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        List<List<string>> lst = (List<List<string>>)Session["Printing"];
        foreach (List<string> temp in lst)
        {
            TableRow row = new TableRow();
            foreach (string data in temp)
            {
                TableCell cell = new TableCell();
                cell.Text = data;
                row.Cells.Add(cell);
            }
            tblData.Rows.Add(row);
        }
    }
}
}

//Markup of new page. I added button "btnPrint" that calls javascript for printing when clicked client side.
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Printing.aspx.cs" Inherits="WerIstWo.Printing" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Table ID="tblData" runat="server">

        </asp:Table>  
        <asp:Button ID="btnPrint" runat="server" Text="Print" OnClientClick="javascript:window.print();"/>      
    </div>
    </form>
</body>
</html>

现在我只需要格式化空白页面,一切顺利。

再次感谢!

3 个答案:

答案 0 :(得分:1)

由于Web浏览器的设计方式,服务器(您的代码)无法直接访问客户端的打印机。相反,您可以使用“打印页面”的链接/按钮或仅包含所需信息的页面(该列表的内容)。然后,客户端可以打印该页面,选择他们自己的本地打印机。

您可以在提示用户打印的主体后面的打印页面中加入一些javascript。

window.print()应该做你想做的事。

答案 1 :(得分:1)

我的建议是创建一个新页面,根据您的需要设置数据,将用户重定向到那里,然后在javascript 中调用windows.print()

答案 2 :(得分:0)

看看css媒体选择器。像这样定义css类:

.printable {
  display:none;
}

@media print {
.noPrint {
    display:none;
 }
.printable {
    display:block;
 }
}

然后将此类添加到页面上的所有元素,但您将转储List数据的元素除外。这个元素应该有可打印的类。

参考:

Use CSS to hide contents on print