我正在开发一个 ASP.Net Web 应用程序,该应用程序必须在标准 Avery 样式的标签表上打印动态创建的标签(一种特定的尺寸,所以只有一种整体布局)。标签具有可变数量的行 (3-6),可能包含文本行或图形条形码图像。
我继承的第一个剪裁使用等宽字体来减少格式问题,但这不允许足够的文本适合标签,客户不满意。基本上它是格式化的文本。
我的下一个版本使用 TABLE、DIV、CSS 和一些 JavaScript 计算来使用比例字体格式化标签。它仍然需要一些调整(用户必须正确设置打印边距并关闭打印页眉和页脚),但它似乎工作。
然而,不同的打印机如何呈现文本似乎存在一些差异(WYS 不是 WYG),所以即使我们使用至少两种不同的打印机(喷墨打印机和激光打印机)在不同的浏览器上进行测试,一些用户的标签不要排队。可以通过调整页面设置对话框上的边距来调整轻微的边距变化,但更难的问题是标签间的间距可能会偏离一英寸的一小部分,所以如果第一个标签居中很好,通过页面末尾标签文本和图像已从标签的顶部或底部爬出。
我们即将切换到生成 Word、Excel 或 PDF 输出,这将需要相当多的开发时间,并且可能会在打印过程中添加额外的步骤。
那么,是否有人对如何在不同类型的打印机上精确呈现 HTML/CSS 布局有任何建议?我真的不在乎换行符/分词符是否有点不同,但我需要能够可预测地定位每个标签区域的左上角。
现在,标签在表格中顺着页面向下流动,我们一直在调整单元格和内部 DIV 的框模型,以使它们具有统一的高度。我怀疑使用每个元素的绝对定位可能是最好的答案,但由于标签元素的 ASP.Net 生成,这也会很棘手。如果我确定这会起作用,我宁愿尝试它,也不愿放弃我们必须采用不同的生成方法的所有东西。
轻微更新:现在我正在做一些绝对定位的测试 - 只设置包含块元素的顶部和左侧坐标。到目前为止,页面上的偏移量(页边距、纸张对齐方式等)有细微的变化,但所有测试的浏览器和打印机都将元素放在相对于彼此的正确位置。我很欣赏 PDF 提示,但有人知道以这种方式使用绝对定位的其他“陷阱”吗?
更新: 作为记录,我使用 iTextSharp 重写了标签打印部分,它运行良好 - 绝对是将来这样做的方式......