我在远程网络服务器上托管我的应用程序,当我单击客户端计算机上的“打印”按钮时,我收到“没有安装打印机”的错误,我从中了解到该应用程序正在尝试在服务器上查找打印机而不是客户端计算机。
我正在使用此代码进行打印:
protected void BtnPrint_Click(object sender, EventArgs e)
{
PrintDocument pd = new PrintDocument();
pd.PrintPage += PrintPage;
pd.Print(); // Prints on remote server
}
private void PrintPage(object o, PrintPageEventArgs e)
{
// QR Code
QRCodeEncoder encoder = new QRCodeEncoder();
encoder.QRCodeScale = 3;
String EmployeeId = this.Request.QueryString.Get("EmployeeId ").ToString();
Bitmap img = encoder.Encode(EmployeeId );
Point loc = new Point(1, 1);
e.Graphics.DrawImage(img, loc);
}
编辑:
我在Stack Over流程中看到了类似的问题,使用“打印对话框”打开对话框供用户从他的计算机中进行选择。我有两个问题:
1- PrintDialog仅适用于Windows窗体应用程序
2-我想保留qr代码的一键打印选项,而不是增加用户必须执行的点击次数。
答案 0 :(得分:0)
在C#中编写的代码 - Code Behind,始终在服务器端运行
如果要在客户端计算机上打印文档,则应将文档呈现为html - 这样它将显示在浏览器中,然后执行javascript function print(); javascriopt代码总是在客户端运行。 您可以使用Data Uri在打印前在浏览器中显示图像
例如:
protected void BtnPrint_Click(object sender, EventArgs e)
{
QRCodeEncoder encoder = new QRCodeEncoder();
encoder.QRCodeScale = 3;
String EmployeeId = this.Request.QueryString.Get("EmployeeId ").ToString();
Bitmap img = encoder.Encode(EmployeeId );
Response.Write("<img src='data:image/bmp;base64,"+ImageToBase64(img,ImageFormat.Bitmap)+"' width='100' height='100' />"); //render image as html
Response.Write("<script>window.print();</script>"); //print page
}
public string ImageToBase64(Image image,
System.Drawing.Imaging.ImageFormat format)
{
using (MemoryStream ms = new MemoryStream())
{
// Convert Image to byte[]
image.Save(ms, format);
byte[] imageBytes = ms.ToArray();
// Convert byte[] to Base64 String
string base64String = Convert.ToBase64String(imageBytes);
return base64String;
}
}