You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.NET WinForms项目中Crystal Reports打印至Dymo Twin Turbo指定纸轴方法问询

解决Dymo Twin Turbo 纸轴选择问题(VB.NET WinForms + Crystal Reports)

一、先搞定Dymo SDK的引用问题

  1. 找到Dymo SDK安装目录,默认路径是C:\Program Files (x86)\DYMO\DYMO Label Software\SDK
  2. 在VB.NET项目右键「引用」→「添加引用」→「浏览」,选中以下文件:
    • DYMO.Label.Framework.dll(优先选这个,新版SDK的核心库)
    • 旧版SDK可能需要DYMO.LabelWriter.Printing.dll,按需选择
  3. 确保项目目标框架是.NET Framework 4.6及以上,Dymo SDK对.NET Core/.NET 5+的支持很差,别踩坑

二、核心实现:指定纸轴打印

Crystal Reports本身没法直接控制Dymo的双纸轴,得绕一下——要么把Crystal报表导出成图像/PDF,再用Dymo SDK指定纸轴打印;要么直接用Dymo SDK做标签绑定,跳过Crystal的打印流程。

方案1:导出Crystal报表为图像,用Dymo SDK打印

Imports DYMO.Label.Framework
Imports CrystalDecisions.CrystalReports.Engine
Imports CrystalDecisions.Shared
Imports System.IO

' 把Crystal报表导出为位图
Private Function ExportReportToBitmap(report As ReportDocument) As Bitmap
    ' 导出为TIFF(Crystal直接支持的图像格式)
    Dim tempPath = Path.Combine(Path.GetTempPath(), "temp_label.tif")
    report.ExportToDisk(ExportFormatType.Tiff, tempPath)
    Return New Bitmap(tempPath)
End Function

' 打印到指定纸轴
Private Sub PrintToTwinTurbo(bitmap As Bitmap, useLeftRoll As Boolean)
    ' 找到Twin Turbo打印机
    Dim targetPrinter = Printer.GetPrinters().FirstOrDefault(Function(p) p.Name.Contains("Twin Turbo"))
    If targetPrinter Is Nothing Then
        MessageBox.Show("没找到Dymo Twin Turbo打印机")
        Return
    End If

    ' 加载你的Dymo标签模板(提前用Dymo Label软件做好的)
    Dim label = Label.Open("C:\Templates\YourLabelTemplate.label")
    ' 将导出的图像添加到标签(坐标和尺寸根据你的模板调整)
    label.AddImage(0, 0, bitmap.Width, bitmap.Height, bitmap)

    ' 设置纸轴参数
    Dim printParams = New PrintParameters()
    printParams.RollSelection = If(useLeftRoll, RollSelection.Left, RollSelection.Right)

    ' 执行打印
    label.Print(targetPrinter.Name, printParams)
End Function

方案2:直接用Dymo SDK绑定数据(替代Crystal)

如果你的标签内容不复杂,完全可以跳过Crystal,直接用Dymo模板绑定数据,这样更省心:

Imports DYMO.Label.Framework

' 假设你的数据模型
Public Class LabelData
    Public Property CustomerName As String
    Public Property OrderID As String
End Class

Private Sub PrintLabel(data As LabelData, useLeftRoll As Boolean)
    Dim label = Label.Open("C:\Templates\YourTemplate.label")
    ' 绑定模板中的字段(模板里要预先创建对应的文本对象)
    label.SetObjectText("txt_CustomerName", data.CustomerName)
    label.SetObjectText("txt_OrderID", data.OrderID)

    Dim targetPrinter = Printer.GetPrinters().FirstOrDefault(Function(p) p.Name.Contains("Twin Turbo"))
    If targetPrinter Is Nothing Then
        MessageBox.Show("未找到目标打印机")
        Return
    End If

    Dim printParams = New PrintParameters()
    printParams.RollSelection = If(useLeftRoll, RollSelection.Left, RollSelection.Right)
    label.Print(targetPrinter.Name, printParams)
End Sub

三、踩坑排查

  • 示例代码跑不起来:检查项目平台(x86/x64)和SDK的DLL位数一致,目标框架必须是.NET Framework,别用Core
  • 纸轴切换无效:先在Dymo Label软件里手动测试纸轴切换是否正常,确保驱动是最新版;代码里的RollSelection别写错,是Left/Right枚举值
  • 权限问题:右键项目→「属性」→「调试」,勾选「启用Visual Studio宿主进程」,或者直接以管理员身份运行程序

内容的提问来源于stack exchange,提问作者Graham

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 09:20:42