【发布时间】:2014-07-11 00:33:28
【问题描述】:
我有一个将部署到服务器的 asp.net 网站。 在其中一个页面上,我有一个页面可以在 pageLoad() 上加载水晶报表查看器 我希望当用户单击那里的按钮时,它将报告打印到他们的打印机。
这是我的 asp 页面,其中包含水晶报表查看器和按钮:
<body>
<link href="style.css" rel="stylesheet" type="text/css" />
<form id="form1" runat="server">
<table align="center">
<tr>
<td align=left>
<asp:LinkButton ID="toHome_LinkButton1" runat="server" onclick="toHome_LinkButton1_Click"><<< Home</asp:LinkButton>
</td>
<td align=right>
<asp:Button ID="print" runat="server" Text="Print" CssClass="css_button" OnClick="print_Click" />
</td>
</tr>
<tr>
<td colspan=2 align=center>
<CR:CrystalReportViewer ID="crv1" runat="server"
EnableDatabaseLogonPrompt="False" EnableParameterPrompt="False"
ToolPanelView="None" GroupTreeStyle-ShowLines="False" HasCrystalLogo="False"
HasDrilldownTabs="False" HasDrillUpButton="False" HasExportButton="False"
HasGotoPageButton="False" HasPageNavigationButtons="False"
HasPrintButton="False" HasSearchButton="False" HasToggleGroupTreeButton="False"
HasToggleParameterPanelButton="False" HasZoomFactorList="False"
PrintMode="ActiveX" />
</td>
</tr>
</table>
</form>
我已经尝试使用 PrinToPrinter() 方法,但据我所知,这些方法仅用于服务器端打印,因为我们必须声明打印机的名称,对吗?
这是我的 onClick 按钮: (请注意,我仍然使用我认为是服务器端打印的 PrintToPrinter 方法)
protected void print_Click(object sender, EventArgs e)
{
string url = Request.ServerVariables["QUERY_STRING"];
string[] kodeKwitansi = url.Split('=');
SqlConnection con = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString);
SqlCommand select = con.CreateCommand();
select.CommandText = "SELECT k.no_kwitansi, k.kode_vendor, k.nama_vendor, u.nama_pekerja, k.nama_pekerja_penanggungjawab, k.satuan, k.jumlah, k.jenis_pembayaran, k.tanggal FROM tb_kwitansi k, tb_user u WHERE k.no_kwitansi = '" + kodeKwitansi[1] + "' AND (k.nomor_pekerja = u.nomor_pekerja)";
con.Open();
SqlDataReader reader = select.ExecuteReader();
reader.Read();
noKwitansi = reader["no_kwitansi"].ToString();
kode_vendor = reader["kode_vendor"].ToString();
namaVendor = reader["nama_vendor"].ToString();
namaPekerja = reader["nama_pekerja"].ToString();
namaPJ = reader["nama_pekerja_penanggungjawab"].ToString();
satuan = reader["satuan"].ToString();
nominal = reader["jumlah"].ToString();
jenisPembayaran = reader["jenis_pembayaran"].ToString();
con.Close();
rd.Load(MapPath("Kwitansi.rpt"));
TextObject to = (TextObject)rd.ReportDefinition.ReportObjects["Text7"];
to.Text = noKwitansi;
to = (TextObject)rd.ReportDefinition.ReportObjects["Text10"];
to.Text = kode_vendor;
to = (TextObject)rd.ReportDefinition.ReportObjects["Text11"];
string[] val = nominal.Split('.');
string val2 = "";
int n = val[0].Length;
int count = 0;
int tan = 0;
for (int i = n - 1; i >= 0; i--)
{
if (val[0][i] == '.')
{
val2 = val[0][i] + val2;
tan = 1;
}
else if (val[0][i] >= '0' && val[0][i] <= '9')
{
val2 = val[0][i] + val2;
count++;
if (count == 3 && i != 0 && tan == 0)
{
val2 = "," + val2;
count = 0;
}
}
}
if (val.Count() == 2)
{
val2 = val2 + "." + val[1];
}
to.Text = val2;
to = (TextObject)rd.ReportDefinition.ReportObjects["Text12"];
if (satuan.Equals("$"))
{
to.Text = terbilang(nominal);
}
else
{
to.Text = terbilang(nominal);
}
to = (TextObject)rd.ReportDefinition.ReportObjects["Text13"];
to.Text = jenisPembayaran;
to = (TextObject)rd.ReportDefinition.ReportObjects["Text15"];
to.Text = namaPJ;
to = (TextObject)rd.ReportDefinition.ReportObjects["Text8"];
to.Text = namaVendor;
rd.PrintOptions.PrinterName = "Canon Inkjet iP3600 series";
rd.PrintToPrinter(1, true, 0, 0);
rd.Close();
rd.Dispose();
Response.Redirect("LihatKwitansi.aspx?"+url);
}
我读到我们可以使用 javascript 的 windows.Print(),但据我所知,当我们使用 window.Print() 时,它会打印整个页面,而我只想打印报告。
那么任何人都可以帮助我做到这一点吗? 我需要的是当用户从他们的计算机访问我的页面时,然后他们点击按钮,它会将报告直接打印到连接到他们计算机的打印机上。
任何帮助将不胜感激 在此先感谢:)
【问题讨论】:
标签: c# asp.net printing crystal-reports