13

我正在开发一个 ASP.Net Web 应用程序,该应用程序必须在标准 Avery 样式的标签表上打印动态创建的标签(一种特定的尺寸,所以只有一种整体布局)。标签具有可变数量的行 (3-6),可能包含文本行或图形条形码图像。

我继承的第一个剪裁使用等宽字体来减少格式问题,但这不允许足够的文本适合标签,客户不满意。基本上它是格式化的文本。

我的下一个版本使用 TABLE、DIV、CSS 和一些 JavaScript 计算来使用比例字体格式化标签。它仍然需要一些调整(用户必须正确设置打印边距并关闭打印页眉和页脚),但它似乎工作。

然而,不同的打印机如何呈现文本似乎存在一些差异(WYS 不是 WYG),所以即使我们使用至少两种不同的打印机(喷墨打印机和激光打印机)在不同的浏览器上进行测试,一些用户的标签不要排队。可以通过调整页面设置对话框上的边距来调整轻微的边距变化,但更难的问题是标签间的间距可能会偏离一英寸的一小部分,所以如果第一个标签居中很好,通过页面末尾标签文本和图像已从标签的顶部或底部爬出。

我们即将切换到生成 Word、Excel 或 PDF 输出,这将需要相当多的开发时间,并且可能会在打印过程中添加额外的步骤。

那么,是否有人对如何在不同类型的打印机上精确呈现 HTML/CSS 布局有任何建议?我真的不在乎换行符/分词符是否有点不同,但我需要能够可预测地定位每个标签区域的左上角。

现在,标签在表格中顺着页面向下流动,我们一直在调整单元格和内部 DIV 的框模型,以使它们具有统一的高度。我怀疑使用每个元素的绝对定位可能是最好的答案,但由于标签元素的 ASP.Net 生成,这也会很棘手。如果我确定这会起作用,我宁愿尝试它,也不愿放弃我们必须采用不同的生成方法的所有东西。

轻微更新:现在我正在做一些绝对定位的测试 - 只设置包含块元素的顶部和左侧坐标。到目前为止,页面上的偏移量(页边距、纸张对齐方式等)有细微的变化,但所有测试的浏览器和打印机都将元素放在相对于彼此的正确位置我很欣赏 PDF 提示,但有人知道以这种方式使用绝对定位的其他“陷阱”吗?

更新: 作为记录,我使用 iTextSharp 重写了标签打印部分,它运行良好 - 绝对是将来这样做的方式......

4

10 回答 10

29

忘记 HTML 并制作 PDF。HTML 打印非常多变——不仅跨浏览器,而且跨同一浏览器的不同版本。PDF更容易。

即使您使用一个浏览器/字体设置/打印机/月相完全正确,它也将是您必须维护的最脆弱的东西。无论您认为制作 PDF 需要多长时间(而且这并不难,因为那里有一些免费的库),HTML 最终会花费您更多的时间。与 Word 文件相比,PDF 阅读器被广泛部署和打印更一致。

于 2008-10-02T19:48:13.723 回答
5

网络不是保证获得一致打印结果的格式。鉴于使用 MS Word 对标签打印的标准支持,以及自动化和生成的相对简单性,我强烈建议采用这条路线。

在使用 Web 内容时,我不知道有任何方法可以在所有类型的浏览器、操作系统和打印机上进行精确打印。

于 2008-10-02T19:48:53.957 回答
3

“精确”和“打印”这两个词并不能很好地协同工作。大约一年前,我做了一个 OCR/OMR 应用程序,即使在构建 PDF 时,我也看到了不同打印驱动程序等之间的显着差异。正因为如此,我的直觉是告诉你,你可能不会有 100% 的成功。

如果 CSS 和布局问题不适合您,您可能需要使用 GDI+ 将标签构建为图像——至少这样您可以使用 GetFontMetrics() 等。

祝你好运!

于 2008-10-02T19:51:00.957 回答
3

我有一个类似的问题,答案是你不能这样做。相反,我使用 iTextSharp 实时生成了一个 PDF 文件并将其传递给响应。

于 2008-10-02T19:52:17.863 回答
2

使用 SQL Server Reporting Services,我生成了一个 PDF 以发送到打印机,但它可以在屏幕上显示为 HTML,使用您可以包含在网页中的控件。互联网上提供了 RDLC 文件,可打印为各种 Avery 格式。

于 2008-10-16T04:03:07.990 回答
2

我重写了本周在 2011 年提到的 SharpPDFLabel 代码,因为我需要它更加灵活(并与当前的 iTextSharp 库一起使用)。

你可以在这里得到它: https ://github.com/finalcut/SharpPDFLabel

如果需要,我添加了指定每个标签内容的功能(或者继续创建一张相同的标签)。通过扩展LabelDefinition类,您可以很容易地指定标签的布局。

于 2015-11-12T21:10:57.180 回答
1

由于跨浏览器的打印行为不一致,我还为 HTML/CSS 方法而苦苦挣扎。

我创建了一个 C# 库来从 ASP.NET 生成 Avery 标签,希望您会发现它有用:

https://github.com/wheelibin/SharpPDFLabel#readme

您可以将图像和文本添加到标签中,并且可以轻松定义更多标签类型。

(我将它用于条形码标签,条形码生成为图像,然后使用此库添加到标签中。)

干杯

于 2011-11-15T07:43:01.880 回答
0

向您的应用程序添加一些选项,让用户根据他们的特定配置调整间距。如果需要,您可以将其包含在标签上,并通过媒体选择器对其进行样式化,但您可能也希望将它们保留在某个地方。

于 2008-10-02T19:50:07.010 回答
0

Flash 也是推送可打印标签(如标签)的好方法,尽管实现和维护有点复杂。在大多数情况下,它的显示速度比 PDF 快得多,您可以将其嵌入到页面设计中,只需在 Flash 中添加一个“打印”按钮即可。

几年前,当我们使用 HTML 和 PDF 生成确认收据时,我这样做了。HTML 是“好的”,但受最终用户网络浏览器的支配,所以我们很快放弃了这种方法。只要有 PDF 阅读器,PDF 就很好,令我们惊讶的是,我们的很多客户都没有。因此,在我们使用包含一些动态文本区域和“打印”按钮的简单 Flash 电影切换到 FLASH 版本后,它也被转储了。我使用一些闪存变量在页面和闪存之间传递数据。您还可以使用网络服务。

当我需要的不仅仅是简单的文本时,我会使用来自DynamicPDF.com的 PDF 生成器组件的免费社区版。它工作得很好而且非常快。

于 2008-10-03T16:23:15.630 回答
0

我刚刚经历了同样的事情。最后切换并制作了一个简短的 JSF 小应用程序(在 Glassfish 上运行),它使用 JasperReports 直接打印到标签打印机。按钮,打印机上的即时标签,如果您不想,甚至不必在屏幕上查看它,因为 Jasper 可以直接输出到打印机(以及浏览器中的 PDF)。

于 2011-12-16T21:07:41.843 回答