【问题标题】:Printing HTML in A4 and A5 paper format以 A4 和 A5 纸张格式打印 HTML
【发布时间】:2013-01-16 15:17:33
【问题描述】:

显然,关于以 A4 和 A5 格式打印 HTML 的问题与询问打印 RTF 格式文本的问题完全相同,所以这里有另一个问题,有点详细更布局。

我正在开发一个应该打印订单的 C# (WinForms) 程序。该程序是为 .NET 2.0 框架编写的。该程序必须能够以 A4 和 A5 纸张格式打印,没有任何用户干扰(无对话框)。打印的订单应该看起来与在网络浏览器中的完全一样。如果您想看看它应该是什么样子,可以查看 this sample。如您所见,非常基本的东西。

这是我迄今为止尝试过的:

  • 询问question on StackOverflow,因重复而被关闭。从未找到重复项。
  • 使用 WebBrowser 元素进行打印。无法打印 A5,所以没有解决办法。
  • 将 HTML 放入 RichTextBox 并打印出来。它有效,但它没有像在网络浏览器中查看的那样显示 HTML,这是一项要求。代码可以在here找到。
  • 我曾考虑在打印前转换为 PDF,但这要么很昂贵,要么根本无法使用(对我来说,作为一个几乎没有 C# 经验的程序员)。这些工具通常依赖于安装在用户计算机上的软件(例如用于打印的 Acrobat Reader),我试图避免这种情况。
  • 在 Google 中查看了每个相关链接至少 13 页,但运气不佳。我已经在这里呆了大约 2 天半了。

如果有人有(免费)更好的方式来打印格式化的 HTML,就像在浏览器中查看一样,无需用户干预或外部依赖,请分享。我真的需要这个来工作。

请不要关闭此问题,当我说我积极搜索描述我的问题的解决方案或文章时,请相信我。有些是相关的,但没有解决我遇到的问题。我也使用了这个网站上的高级搜索,没有运气。

感谢您抽出宝贵时间阅读本文。

注意:当我说我从未找到重复的内容时,我的意思是我从未找到真正描述我的问题的文章。

【问题讨论】:

  • "从未找到副本?"在封闭的问题中有一个链接。 stackoverflow.com/questions/7399842/… 无论如何,如果您认为问题不应该被关闭,或者在提出一般问题时遇到问题,您应该在 Meta SO 上发帖,而不是 SO。
  • 问题是网络浏览器对打印的支持非常有限,并且无法控制纸张选择、打印分辨率、双面打印等。
  • 当我说我从未找到重复项时,我的意思是我从未找到真正描述我的问题的文章。它链接到的文章是关于打印我已经拥有的 RichTextBox 内容,正如我在问题中描述的那样。
  • @Pointy 我不介意忘记通过网络浏览器进行打印,任何打印 HTML 就像在浏览器中查看的方式都是一种礼物。

标签: c# html printing


【解决方案1】:

您将不得不咬紧牙关并使用 PDF 库,您将无法完全控制具有如此多不同用户、浏览器和打印机的 HTML 的最终打印结果。我为内部业务应用程序打印到 A4,我们的用户群非常有限(可能 5 个)并且所有打印到特定打印机,即使那样它充其量也是片状的。我不相信有一种方法可以在没有用户干预的情况下区分 A4 和 A5,即他们必须从打印选项中选择纸张尺寸。

建议你看看PDF SharpSharp PDFiTextSharp,它们都是开源的。

这一切都可以从服务器完成,即不需要在用户机器上安装任何东西。应该可以使用它来选择纸张尺寸(我不是 100% 确定),但最终用户打印它最终取决于他们。

【讨论】:

  • 在使用 PrintDocument 方法时,有一种方法可以区分 A4 和 A5,但到目前为止,这对我来说还没有奏效。我将研究这些库并尝试实现它们。感谢您的回复!
  • 我已经浏览了您建议的库,并且能够生成 PDF 文件,但似乎我需要调用 Acrobat reader 才能实际打印 PDF。如前所述,我试图避免使用客户计算机上可能不存在的软件。您对此事有什么建议吗?
  • 嗯,好的。我总是有一些用户交互,即弹出打开默认打印模式。我是一名网络开发人员,回溯了一些 winforms 工作,并记住它是一个 PITA 来打印。就我而言,我创建了一个 .xls 文件并让用户处理打印。
  • 它确实打印了 HTML,但它没有显示如何让它以 A4 和 A5 格式打印,所以虽然我很欣赏你的努力,但这不是一个解决方案。
【解决方案2】:

我已经使用 here 描述的 PrintHelper 方法成功完成了这项工作。我使用它使多个位置的用户能够从 CMS 系统打印条形码标签。标签对布局、字体大小和定位有严格的要求,所有这些都使用 HTML 和 CSS 进行管理。

PrinterHelper 类的工作原理是向其传递一个填充了打印数据的 web 控件(我使用了一个中继器来允许多个标签),并且 helper 类在内存中构建一个页面并打开打印对话框。你像这样注册你的 CSS:

pg.ClientScript.RegisterStartupScript(pg.GetType(),"LabelCSS","<link href=\"Styles/labelPrint.css\" rel=\"stylesheet\" type=\"text/css\" />");

但需要注意的是,它仅适用于 Firefox,并且必须更改某些设置,例如边距设置为零,但由于 CMS 需要使用该浏览器,所以这不是问题。

【讨论】:

  • 不知道 - 这就是你要问的吗?有误读问题吗?对不起,如果是这样!从 winforms 应用程序打印应该比从 Web 打印容易得多,所以我不知道您为什么选择以同样的方式进行打印。
  • 显然它并不像人们想象的那么容易,至少不要打印格式化的 HTML。我会更新我的问题,我很抱歉不清楚。
猜你喜欢
  • 2012-11-16
  • 1970-01-01
  • 2012-09-04
  • 1970-01-01
  • 2019-06-07
  • 1970-01-01
  • 2019-08-18
  • 1970-01-01
  • 2017-10-19
相关资源
最近更新 更多