【问题标题】:Why my code is slow when printing crystal report, also not printing on desired printer?为什么打印水晶报告时我的代码很慢,也没有在所需的打印机上打印?
【发布时间】:2021-06-21 07:35:06
【问题描述】:

我正在编写一个零售系统,该系统应该在 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

谢谢。

【问题讨论】:

    标签: vb.net printing crystal-reports


    【解决方案1】:

    我没有发现您的代码有任何问题。

    For 循环是唯一可以减慢代码速度的地方。

    但我的猜测是打印机确实需要很长时间才能唤醒。它还取决于打印机驱动程序。一些打印机对不同框架的响应不同。

    我的经验是,如果你放了一个加载元素,比如动画,或者继续进度条,用户就感觉不到 6 秒了。

    如果您在代码末尾放置一个 Messagebox("test")。消息框会立即出现吗?如果是这样,这意味着您的代码运行良好,但打印机没有。这可能意味着数据源本身未优化,或者您的打印机电源较弱。

    【讨论】:

    • 我把打印机换成了xps writer,同时我也用多种方式测试了打印机,没有任何问题。
    • 关于 For 循环,我只有 2 台打印机和 microsoft xps 编写器,所以这没什么大不了的,另一件事为什么代码打印到默认打印机,而代码已经给出了所需的打印机名称?奇怪
    • 我认为是水晶报表的问题,具体来说,我用的是CR 13.0.24.2970和VS2010 Ultimate SP1,报表是从数据集中读取的..!有什么建议吗?
    • 我还在寻找一个东西,但我找不到任何解决方案,请有经验的人给我一些建议。!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-15
    • 2012-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-14
    相关资源
    最近更新 更多