从网页上打印条形码标签
我正在使用ASP.Net Web应用程序,该应用程序必须在标准Avery样式标签纸上打印动态创建的标签(一种特定尺寸,因此只有一种总体布局)。标签具有可变的行数(3-6),并且可以包含文本行或者图形条形码图像。
我继承的第一个剪切使用了等宽字体来减少格式问题,但是这种文本不允许在标签上放置足够的文本,客户对此感到不满意。基本上,它是格式化的文本。
我的下一个版本使用TABLEs,DIV,CSS和一些JavaScript计算来使用比例字体设置标签格式。仍然需要进行一些调整(用户必须正确设置打印边距并关闭打印页眉和页脚),但这似乎可以正常工作。
但是,不同的打印机呈现文本的方式似乎有所不同("所见即所得",不是"所见即所得"),因此即使我们在使用至少两种不同打印机(喷墨打印机和激光打印机)的不同浏览器上进行了测试,但仍有一些用户标签不要排队。可以通过调整页面设置对话框上的页边距来调整少量页边距变化,但是更棘手的问题是标签间的间距可以缩小一英寸,因此,如果第一个标签居中对齐,则可以页面末尾,标签文本和图像已从标签的顶部或者底部爬出。
我们即将切换到生成Word,Excel或者PDF输出,这将花费大量的开发时间,并可能在打印过程中增加额外的步骤。
因此,对于如何进行将在不同类型的打印机上精确呈现的HTML / CSS布局,是否有人有任何建议?我不太在乎换行符/换行符是否有点不同,但是我需要能够预测每个标签区域的左上角。
现在,标签沿着表格的表格向下流动,我们一直在调整单元格和内部DIV的盒子模型,以使它们的高度一致。我怀疑对每个元素使用绝对定位可能是最好的答案,但是由于标签元素的ASP.Net生成,这也将很棘手。如果我确定会行得通,那么我宁愿尝试一下,也不要舍弃我们必须采用其他生成方法的所有内容。
轻微更新:
现在,我正在使用绝对定位仅对包含块元素的顶部和左侧坐标进行设置的一些测试。到目前为止,页面上的偏移量存在细微的变化(页边距,纸张对齐等),但是经过测试的所有浏览器和打印机都将元素放置在相对于彼此正确的位置。我感谢PDF技巧,但是有人知道使用绝对定位的其他"陷阱"吗?
更新:
作为记录,我使用iTextSharp重写了标签打印部分,并且肯定可以在将来实现此目的的完美方式...
解决方案
忘记HTML并制作PDF。 HTML打印不仅在浏览器之间而且在同一浏览器的不同版本中都具有极大的可变性。 PDF容易得多。
即使我们使用一个浏览器/字体设置/打印机/月相完全正确,它也将是我们必须维护的最脆弱的东西。不管我们认为制作PDF需要多长时间(而且实际上并没有那么困难,因为那里有一些免费的库),HTML最终将花费我们更多的时间。 PDF阅读器被广泛部署,甚至比Word文件更一致地打印。
网络不是保证获得一致的打印结果的格式。鉴于MS Word对标签打印的标准支持,以及自动化和生成的相对简便性,我强烈建议我们采用这种方法。
我不知道使用Web内容时能在所有类型的浏览器,操作系统和打印机上进行精确打印的任何方法。
在应用程序中添加一些选项,使用户可以调整其特定配置的间距。我们可以根据需要在标签上包含此权限,并通过媒体选择器对其进行样式设置,但我们可能也希望将其保留在某个位置。
"精确地"和"印刷"并不是两个可以很好地协同工作的词。大约一年前,我进行了OCR / OMR应用程序,即使在构建PDF时,我也看到了不同的打印驱动程序之间的显着差异。因此,我的直觉是告诉我们我们可能不会100%成功。
如果CSS和布局问题不能很好地解决问题,则可能需要诉诸使用GDI +将标签构建为图像的方式-至少可以使用GetFontMetrics()等方式。
祝你好运!
我有一个类似的问题,答案是你做不到。相反,我使用iTextSharp实时生成了PDF文件,并将其传递给响应。
Flash也是推送可打印内容(如标签)的好方法,尽管实现和维护起来稍微复杂一些。在大多数情况下,它的显示比PDF快得多,我们可以将其嵌入到页面的设计中,只需在Flash中添加"打印"按钮即可。
几年前,当我们使用HTML和PDF生成确认收据时,我就这样做了。 HTML是可以的,但受最终用户Web浏览器的支配,因此我们迅速转储了该方法。只要具有PDF阅读器,PDF就会很好,令我们惊讶的是,许多客户都没有。因此,在我们使用包含一些动态文本区域和"打印"按钮的简单Flash电影切换到FLASH版本之后,也将其转储。我使用一些Flash变量在页面和Flash之间传递了数据。我们也可以使用Web服务。
当我需要的不仅仅是简单的文本时,我可以使用DynamicPDF.com的PDF Generator组件的免费社区版。它的工作原理非常好,而且很快。
使用SQL Server Reporting Services,我生成了要发送到打印机的PDF,但是使用可以包含在网页中的控件,它可以在屏幕上显示为HTML。 Internet上提供了RDLC文件,可以将它们打印为各种Avery格式。