我正在编程一个零售系统,应该打印在4种类型的打印机,收据,A4,A5和标签。我的问题是,我需要在不更改默认打印机的情况下打印收据,但是如果打印机设置为默认打印机,我可以正常打印。
让我疑惑的是,我已经设置了所需打印机的名称,但它打印到默认打印机,而且在任何情况下都需要6-10秒,这在这样的软件中是不能接受的,以下是我的代码:
Private Sub PrintFromDS()
Dim rptDoc As New ReportDocument
rptDoc = New CRrcpt
Dim i As Integer
Dim doctoprint As New System.Drawing.Printing.PrintDocument()
doctoprint.PrinterSettings.PrinterName = RcptPrinter
Dim rawKind As Integer
For i = 0 To doctoprint.PrinterSettings.PaperSizes.Count - 1
If doctoprint.PrinterSettings.PaperSizes(i).PaperName = "72mm x Receipt" Then
rawKind = CInt(doctoprint.PrinterSettings.PaperSizes(i).GetType().GetField("kind", Reflection.BindingFlags.Instance Or Reflection.BindingFlags.NonPublic).GetValue(doctoprint.PrinterSettings.PaperSizes(i)))
Exit For
End If
Next
rptDoc.SetDataSource(ds)
rptDoc.PrintOptions.PaperSize = CType(rawKind, CrystalDecisions.Shared.PaperSize)
rptDoc.PrintToPrinter(1, False, 0, 0)
rptDoc.Refresh()
End If
End Sub
谢谢。
发布于 2021-03-25 04:11:13
我没有看到你的代码有任何问题。
For循环是唯一可以减慢代码速度的地方。
但我的猜测是,打印机确实需要很长时间才能唤醒。它还取决于打印机驱动程序。有些打印机对不同的框架有不同的响应。
我的经验是,如果你放置一个加载元素,比如动画,或者继续进度条,用户就不会再感觉到6秒。
如果您将Messagebox("test")放在代码的末尾。消息框会立即出现吗?如果是这样,这意味着您的代码运行良好,但打印机不能。这可能意味着数据源本身没有优化,或者您的打印机电量不足。
https://stackoverflow.com/questions/66783627
复制相似问题