从网页打印条形码标签
Posted
技术标签:
【中文标题】从网页打印条形码标签【英文标题】:Printing barcode labels from a web page 【发布时间】:2010-09-14 22:03:33 【问题描述】:我正在开发一个 ASP.Net Web 应用程序,该应用程序必须在标准 Avery 样式的标签纸上打印动态创建的标签(一种特定的尺寸,因此只有一种整体布局)。标签的行数不定 (3-6),可能包含文本行或图形条形码图像。
我继承的第一个剪辑使用等宽字体来减少格式问题,但这样就没有足够的文字适合标签,客户不满意。基本上是格式化文本。
我的下一个版本使用 TABLE、DIV、CSS 和一些 javascript 计算来使用比例字体格式化标签。它仍然需要一些调整(用户必须正确设置打印边距并关闭打印页眉和页脚),但它似乎工作。
但是,不同的打印机呈现文本的方式似乎存在一些差异(WYS 不是 WYG),因此即使我们使用至少两种不同的打印机(喷墨打印机和激光打印机)在不同的浏览器上进行了测试,一些用户的标签不对齐。可以通过调整页面设置对话框上的边距来调整轻微的边距变化,但更难的问题是标签间的间距可以偏离一英寸的一小部分,所以如果第一个标签很好地居中,通过标签文本和图像已从标签顶部或底部爬出的页面末尾。
我们即将切换到生成 Word、Excel 或 PDF 输出,这将需要相当长的开发时间,并且可能会在打印过程中添加额外的步骤。
那么,对于如何在不同类型的打印机上精确呈现的 html/CSS 布局,有人有什么建议吗?我真的不在乎换行/分词是否有点不同,但我需要能够可预测地定位每个标签区域的左上角。
现在标签在表格中顺着页面向下流动,我们一直在调整单元格和内部 DIV 的框模型以使它们具有统一的高度。我怀疑使用每个元素的绝对定位可能是最好的答案,但由于标签元素的 ASP.Net 生成,这也会很棘手。如果我确定这会起作用,我宁愿尝试它,也不愿放弃我们必须使用不同的生成方法的所有东西。
轻微更新: 现在我正在做一些绝对定位的测试——只设置包含块元素的顶部和左侧坐标。到目前为止,页面上的偏移量(页边距、纸张对齐方式等)存在细微变化,但所有测试的浏览器和打印机都将元素完全放在正确的位置相对于彼此。我很欣赏 PDF 提示,但有人知道以这种方式使用绝对定位的其他“陷阱”吗?
更新: 作为记录,我使用 iTextSharp 重写了标签打印部分,它运行良好 - 绝对是将来这样做的方式......
【问题讨论】:
【参考方案1】:忘记 HTML 并制作 PDF。 HTML 打印非常多变——不仅跨浏览器,而且跨同一浏览器的不同版本。 PDF 更容易。
即使您使用一个浏览器/字体设置/打印机/月相完全正确,它也将是您必须维护的最脆弱的东西。无论您认为制作 PDF 需要多长时间(而且这并不难,因为那里有一些免费的库),HTML 最终会占用您更多的时间。与 Word 文件相比,PDF 阅读器得到广泛部署和打印更一致。
【讨论】:
我必须同意。我们最近遇到了类似的问题,生成 PDF 是最快和最简单的解决方案。我们甚至提供了一个校准页来处理不同打印机的标签和打印校准 PDF 会比 Word 文档更难,更不灵活,不是吗? PDF 不如 Word 文件灵活,因为您不能(轻松)编辑 PDF 文件。我不认为这是一个考虑因素。 PDF 绝对比 Word 文件更容易生成。这篇***文章列出了一些方法:en.wikipedia.org/wiki/List_of_PDF_software【参考方案2】:Web 格式不能保证获得一致的打印结果。鉴于使用 MS Word 对标签打印的标准支持,以及相对容易的自动化和生成,我强烈建议走这条路。
我不知道有什么方法可以在使用 Web 内容时在所有类型的浏览器、操作系统和打印机上进行精确打印。
【讨论】:
你现在可能是正确的,但是下一个 FireFox 更新,下一个 IE 更新,你会回到原点。【参考方案3】:为您的应用添加一些选项,让用户可以根据他们的特定配置调整间距。如果您愿意,您可以在标签上包含此权利,并通过媒体选择器对其进行样式设置,但您可能也希望将它们保留在某个地方。
【讨论】:
我们不能让他们可靠地设置页边距和页眉和页脚的翻转,并且这些说明会直接显示在标签网页上(并在打印时被媒体选择器隐藏),所以要求他们对标签间的间距进行微调对我们来说是行不通的。【参考方案4】:“精确”和“打印”这两个词并不能很好地协同工作。大约一年前,我做了一个 OCR/OMR 应用程序,即使在构建 PDF 时,我也看到了不同打印驱动程序等之间的显着差异。因此,我的直觉是告诉你,你可能不会 100% 成功。
如果 CSS 和布局问题不适合您,您可能需要求助于使用 GDI+ 将标签构建为图像 - 至少这样您可以使用 GetFontMetrics() 等。
祝你好运!
【讨论】:
【参考方案5】:我有一个类似的问题,答案是你做不到。相反,我使用 iTextSharp 实时生成了一个 PDF 文件并将其传递给响应。
【讨论】:
【参考方案6】:Flash 也是推送可打印标签(如标签)的好方法,尽管实现和维护有点复杂。在大多数情况下,它的显示速度比 PDF 快得多,您可以将其嵌入到页面设计中,只需在 Flash 中添加一个“打印”按钮即可。
几年前,当我们使用 HTML 和 PDF 生成确认收据时,我就这样做了。 HTML 是“好的”,但受最终用户网络浏览器的支配,所以我们很快放弃了这种方法。只要有 PDF 阅读器,PDF 就很好,令我们惊讶的是,我们的很多客户都没有。因此,在我们使用包含一些动态文本区域和“打印”按钮的简单 Flash 电影切换到 FLASH 版本后,它也被转储了。我使用一些闪存变量在页面和闪存之间传递数据。您也可以使用网络服务。
当我需要的不仅仅是简单的文本时,我会使用来自DynamicPDF.com 的 PDF 生成器组件的免费社区版。效果很好,速度也很快。
【讨论】:
【参考方案7】:使用 SQL Server Reporting Services,我生成了一个 PDF 以发送到打印机,但使用可以包含在网页中的控件,它可以在屏幕上被视为 HTML。互联网上提供了 RDLC 文件,可打印为各种 Avery 格式。
【讨论】:
【参考方案8】:由于跨浏览器的打印行为不一致,我也对 HTML/CSS 方法感到困惑。
我创建了一个 C# 库来从 ASP.NET 生成 Avery 标签,希望对您有用:
https://github.com/wheelibin/SharpPDFLabel#readme
您可以在标签中添加图像和文本,并且可以轻松定义更多标签类型。
(我将它用于条形码标签,条形码生成为图像,然后使用此库添加到标签中。)
干杯
【讨论】:
我只是对此表示反对,因为代码现在已经过时了。不过,我确实将您的项目作为我回答的基础,所以我对您投反对票感到难过/尴尬。 哈哈,别担心 - 很高兴它对某人有用(如果你回馈原始版本以使其变得更好,而不是仅仅分叉它可能会很好,但是嘿嗬) 我曾错误地假设您并没有真正维护旧项目,所以我不想打扰您。我已经向你发送了一个拉取请求。【参考方案9】:我刚刚经历了同样的事情。最后切换并制作了一个简短的 JSF 应用程序(在 Glassfish 上运行),它使用 JasperReports 直接打印到标签打印机。按钮,打印机上的即时标签,如果您不想在屏幕上查看,甚至不必在屏幕上查看,因为 Jasper 可以直接输出到打印机(以及浏览器中的 PDF)。
【讨论】:
【参考方案10】:我重写了本周在 2011 年提到的 SharpPDFLabel 代码,因为我需要它更加灵活(并与当前的 iTextSharp 库一起使用)。
你可以在这里得到它: https://github.com/finalcut/SharpPDFLabel
如果您愿意,我添加了指定每个标签内容的功能(或者继续创建相同标签的工作表)。通过扩展 LabelDefinition
类,您可以非常轻松地指定标签的布局。
【讨论】:
我的头顶我不确定对不起。自从我进行更新以来,我并没有太多使用这个库。我不需要为我的任何人添加条形码;只是姓名和地址(邮寄标签)。我假设它是一个图像(条形码)所以可能是这样的:cs singleSheetLabelCreator.AddImage(myImageAsAStream);
以上是关于从网页打印条形码标签的主要内容,如果未能解决你的问题,请参考以下文章