c# - 将 Windows 打印机驱动程序与“本机”打印机条形码渲染相结合?
问题描述
我需要从我的 .NET Windows 应用程序中打印带有条形码(通常是 Code 128)的标签。由于客户有不同的打印机——不同的 Eltron/Zebra 型号和不同的制造商(如 GoDEX、Sato 等)——我希望我的应用程序完全(或至少大部分)与实际的打印机型号无关。
因此,我尝试使用打印机的 Windows 驱动程序打印带有条形码的此类标签。在这种方法中,条形码显然会在 PC 上呈现为图像,而打印机只是将其输出为像素图像。也许整个标签被渲染为图像,我不确定。作为旁注:我实际上是使用 XtraReports 来打印标签,但这本身不应该导致下面的问题。
但是,这种方法会产生较差的条码质量。我不得不通过调整打印机驱动程序设置(例如温度、速度等)多次对输出进行故障排除,但后续系统仍然不接受一定百分比的条形码。
我知道我可以将“原始”EPL/ZPL 命令发送到 Zebra 打印机,它会渲染条形码本身 - 从而获得更好的质量。
但是,这种方法有两个缺点:
- 首先,原始命令可能因打印机型号而异,而且很可能因制造商而异。不确定 EPL/ZPL 是否是如此广泛支持的“通用语”
- 其次,如果客户希望更改/重新排列标签内容,那么这将成为一项非常不直观的工作——特别是与仅在 XtraReports 中重新设计标签相比。我知道有 Z-Designer,但它没有集成到我的应用程序中,并且(可能)特定于 Zepra 打印机。
有没有一种方法可以基本上结合两全其美。基本上使用 Windows 驱动程序来绘制/打印整体标签,但让打印机以最佳质量呈现条码?
我隐约知道使用可以从打印机加载或加载到打印机上的条形码字体,但不确定质量有多好,PC 上需要多少设置以及打印机型号和制造商对它的支持程度。对我来说似乎是另一罐蠕虫。
解决方案
我在 MS ACCESS 中构建了一个仓库调度应用程序,使用 VBA 将条形码标签打印到 Zebra 打印机。这里没有简单的答案。3 种常见途径:最糟糕的选择:使用3rd 方软件(如 BarTender),但通常无法集成,并且有效的两步过程会产生打印错误文件、重新打印重复标签和欺诈的问题;更好的选择:使用 ZPL 将 原始打印(通过 Windows 通用文本驱动程序)直接打印到打印机,这比您预期的更常见(或 EPL 或 CPCL 或其他一些兔子洞)最好的标签结果,但问题是它的技术含量很高,标签布局更改很痛苦(您似乎已经熟悉这些问题),需要大量支持电话;最佳选择(对我来说):让打印机的供应商打印驱动程序完成工作(需要配置),在 MS ACCESS(或您的 .NET 应用程序)中将布局作为报告,在斑马打印机驱动程序中将条形码文本格式化为用户定义的字体将该字体映射到所需的条形码(驱动程序中的配置类型、大小、方向、可选文本等),调整驱动程序的速度设置等,直到标签的质量与 raw/zpl 相似,保存/导出驱动程序配置设置到一个文件(最常见的支持调用我只是重新加载这个文件,节省时间)。不利的一面是,需要一些前期规划来协调布局,特别是条形码与驱动程序通过用户字体映射到所需的条形码。多年来,通过多个版本的 MS ACCESS 和打印机更改,这对我有用。
推荐阅读
- css - 使用 SVG Shapen 进行图像遮罩
- php - 未捕获的 PDOException:SQLSTATE[HY093]:无效的参数号:绑定变量的数量与 PDO 插入查询中的标记数量不匹配
- wordpress - 我用 wordpress 在谷歌云上开始了一个新项目,现在我如何将它连接到我购买的网站和我的电子邮件
- python - Python 创建一组路径并找到它们之间的路径
- python - AssertionError - 尝试实现新的优化器时
- javascript - 如何制作编辑 .JSON 文件中的变量的 HTML 页面?
- javascript - 如何用长字符串中的空字符串替换字符串?
- java - Grails 4 Oauth2 令牌调用另一个服务(grails 应用程序)
- android-permissions - 是否可以取消对内部分布式应用程序的 Android 权限请求要求?
- java - 如何在另一个表中打印用户 ID