Vb.net 我唤起我的电脑';从我的网页打印打印机,但它打印的是空白页

Vb.net 我唤起我的电脑';从我的网页打印打印机,但它打印的是空白页,vb.net,printing,Vb.net,Printing,我对网络编程缺乏经验,边学习边学习。在我的vb.net应用程序中,我创建了一个可打印的网页。现在,我想通过自动调用他们的打印机来让用户更容易。我相信control+p会在大多数浏览器中调用打印机,所以我正在尝试。(我意识到这不是一个优雅的解决方案,我对更好的解决方案持开放态度。)但我遇到的问题是,我可以调用打印机对话框,但它只打印标准页眉和页脚的空白页面。我认为打印机可能在页面准备好之前启动,因此我尝试设置一个时间延迟,但延迟似乎发生在页面在页面上呈现之前,而不是页面呈现之后和打印机对话框显示之

我对网络编程缺乏经验,边学习边学习。在我的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
除非你有很好的理由这样做,否则听起来你好像错过了web开发的一个基本部分。即,分离服务器端和客户端代码/功能

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

window.print();

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

您正在尝试从服务器端代码打印网页?有什么特别的原因吗?通常,人们只需在JavaScript中调用
window.print()
。还有,你为什么要让线程休眠10秒钟?这只会让浏览器无缘无故地等待页面。@JanGreve:这里没有插值字符串。这是一个参数化的SQL查询。该参数在5行之后添加。值得注意的是,可以使用CSS@media query对网页进行不同格式的打印。谢谢。这很有帮助。我以前写过JavaScript,但不是在当前上下文(vb.net,Visual Studio 2008)中,所以我甚至不知道它放在哪里——显然不是在后面的代码中。我得做些研究,找出如何运用你的建议。我对客户端和服务器端的理解是模糊的。这似乎是一个足够清晰的概念,但当涉及到使用它的实际情况时,我并不总是清楚。@Andrew,我称之为可打印页面并不十分准确。这确实是一个规模的总结。当用户填写量表时,在他们看来,它将分布在4个页面上。“可打印”页面将所有内容汇总在一个页面中,以便他们可以打印记录。我曾考虑过使用CSS,但由于我只想打印这一单页摘要,而不想打印其他页面,因此按照我想要的方式设置页面似乎更简单。@David我之前的评论是给你的,David,但我忘了在评论中写上你的名字woo-Hoo!成功了。我只是在designer页面的标记视图中插入了一点JavaScript。很容易。知道如何在这种情况下使用JavaScript将帮助我解决另一个问题。非常感谢!