我从我的网页上唤起了我的电脑打印机,但它打印了一个空白页面

时间:2016-01-26 18:22:10

标签: vb.net printing

对网络编程缺乏经验,随时随地学习。在我的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

1 个答案:

答案 0 :(得分:2)

除非你有非常好的理由以这种方式处理事情,否则听起来你错过了网络开发的基本部分。即,服务器端和客户端代码/功能的分离。

如果页面应该从浏览器打印,那就是客户端。打印客户端是一个简单的JavaScript调用:

window.print();

您基本上无法从服务器端代码调用客户端的打印机。 (想象一下互联网,您访问的任何服务器都可以与您的计算机硬件进行交互。)您可以打印到服务器的打印机(不知道为什么会有人想要),但是那种情况你需要打印一些东西。在服务器上将页面呈现在内存上只是为了打印它看起来有点过分。