对网络编程缺乏经验,随时随地学习。在我的vb.net应用程序中,我创建了一个可打印的网页。现在我想通过自动调用他们的打印机让用户更容易。我相信control + p会在大多数浏览器中调用打印机,所以我正在尝试。 (我意识到它不是一个优雅的解决方案,并且对更好的东西开放。)但我遇到的问题是我可以唤起打印机对话框,但是它打印的是一个只有标准页眉和页脚的空白页面。我想也许打印机在页面准备好之前就已经出现了,所以我尝试了延迟时间,但延迟似乎发生在页面呈现在页面上之前,而不是在页面呈现之后和打印机对话框显示之前。我仍然得到空页。我该怎么办?
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim ScaleID = Request.QueryString.ToString
Using myConnection As New SqlConnection(connectionString)
Dim cmdScale As New SqlCommand("Select * from ScalesView where [Scale ID] = @ScaleID", myConnection)
Dim daScale As New SqlDataAdapter
Dim dsScale As New Data.DataSet
Dim dtScale As New Data.DataTable
myConnection.Open()
cmdScale.Parameters.AddWithValue("@ScaleID", ScaleID)
daScale.SelectCommand = cmdScale
cmdScale.ExecuteNonQuery()
dsScale.Clear()
daScale.Fill(dsScale, "ScalesView")
dtScale = dsScale.Tables(0)
lblName.Text = dtScale.Rows(0)("Client Name")
lblRater.Text = dtScale.Rows(0)("Rater Name")
lblBehavior.Text = dtScale.Rows(0)("Behavior Name")
lblDate.Text = dtScale.Rows(0)("Date")
lblSetting.Text = dtScale.Rows(0)("Setting Name")
lblA9.Text = dtScale.Rows(0)("Item 9")
lblD9.Text = Description(lblA9.Text)
'more code to display data here
End Using
txtTotSensory.Text = (CInt(lblA1.Text) + CInt(lblA5.Text) + CInt(lblA9.Text) + CInt(lblA13.Text)).ToString
txtTotEscape.Text = (CInt(lblA2.Text) + CInt(lblA6.Text) + CInt(lblA10.Text) + CInt(lblA14.Text)).ToString
txtTotAttention.Text = (CInt(lblA3.Text) + CInt(lblA7.Text) + CInt(lblA11.Text) + CInt(lblA15.Text)).ToString
txtTotTangible.Text = (CInt(lblA4.Text) + CInt(lblA8.Text) + CInt(lblA12.Text) + CInt(lblA16.Text)).ToString
'more data manipulation here
sortIt()
System.Threading.Thread.Sleep(10000)
SendKeys.SendWait("^(p)")
End Sub
答案 0 :(得分:2)
除非你有非常好的理由以这种方式处理事情,否则听起来你错过了网络开发的基本部分。即,服务器端和客户端代码/功能的分离。
如果页面应该从浏览器打印,那就是客户端。打印客户端是一个简单的JavaScript调用:
window.print();
您基本上无法从服务器端代码调用客户端的打印机。 (想象一下互联网,您访问的任何服务器都可以与您的计算机硬件进行交互。)您可以打印到服务器的打印机(不知道为什么会有人想要),但是那种情况你需要打印一些东西。在服务器上将页面呈现在内存上只是为了打印它看起来有点过分。