【问题标题】:Printing using Template使用模板打印
【发布时间】:2013-07-21 07:07:20
【问题描述】:

对于一个简单的收据系统,我需要以某种方式定义一个具有简单格式的模板文档,用数据填充它并在标准 Windows 打印机上打印它。它必须在 Windows 服务上工作。我应该最好地使用什么技术?

编辑:

我尝试使用 PDF-Forms。我定义了几个文本框并用 iTextSharp 填充它们。它一直有效,直到我不得不打印它们,这真的很难,因为你必须直接使用阅读器可执行文件。

似乎更好地集成到 .NET 中的替代方法似乎是使用 XPS。 XPS 是否提供类似的功能?

【问题讨论】:

  • 从服务打印是一个非常糟糕的主意。打印机驱动程序是为桌面应用程序设计的。他们会告诉您碳粉盒是半空的以及在哪里订购另一个碳粉盒。如果这种情况发生在服务中,那么它就不会打印,你也不知道为什么。模板可以是任何东西,位图就可以。有很多具有填空功能的报告生成器程序,您需要自己去购买。
  • 我以编写打印机驱动程序为生,不得不同意 Hans Passant 的观点。从 Windows 服务打印几乎不是一个好主意。

标签: c# .net printing


【解决方案1】:

使用 html 或纯文本创建您自己的收据模板。

使用 html 的示例:

HTML

<html>
  <head>
    <title>Receipt</title>
  </head>
  <body>
    <div>The price: <%Price%></div>
    <div>The time: <%Time%></div>
    <div>Payment Method: <%PaymentMethod%></div>
  </body>
</html>

C#

    static void Main(string[] args)
    {
        CreateReceipt("€1.50", "09.30", "Cash");
    }

    private static void CreateReceipt(string price, string time, string paymentMethod)
    {
        string bodyFile;
        string template = System.IO.Directory.GetCurrentDirectory() + "\\template.html";
        using (StreamReader reader = new StreamReader(template))
        {
            bodyFile = reader.ReadToEnd();
            bodyFile = bodyFile.Replace("<%Price%>", price);
            bodyFile = bodyFile.Replace("<%Time%>", time);
            bodyFile = bodyFile.Replace("<%PaymentMethod%>", paymentMethod);
        }
        FileStream fs = File.OpenWrite(System.IO.Directory.GetCurrentDirectory() + "\\receipt.html");
        StreamWriter writer = new StreamWriter(fs, Encoding.UTF8);
        writer.Write(bodyFile);
        writer.Close();
    }
}

【讨论】:

  • 好吧,我真的不想自己写那些东西。另外我以后怎么打印这个?有没有办法使用 Razor 之类的东西然后打印出来?
  • 查看编辑。该方法现在将使用 template.html 创建一个名为receipt.html 的新文件,其中包含传递给它的任何参数。我不熟悉 Razor。
【解决方案2】:

使用Mustache 创建 HTML 模板并填充它们。

.Net interfaces 非常易于使用。

获得 HTML 后,you can use a WebBrowser control - 屏幕外 - 进行打印。

【讨论】:

    【解决方案3】:

    有多种方式;

    创建一个文本文件并搜索关键字并将其替换为适当的值。保存/打印。

    创建一个 html 文件并使用适当的值搜索和替换关键字。保存/打印。

    创建一个带有内置字段的 PDF 文件,并将其替换为适当的值。保存/打印。

    还有更多...

    【讨论】:

      【解决方案4】:

      如果你还没有看到这个,只是为了一个想法,你可以打印 HTML DIV

      How do I print part of a rendered HTML page in JavaScript?

      【讨论】:

        【解决方案5】:

        你可以试试 ActiveReports

        Link to ComponentOne

        它不是免费的.. 但它可以根据您的需要打印。 只需创建模板并将它们嵌入到您的代码中。

        【讨论】:

          【解决方案6】:

          我们最终使用 EPSON TM-Intelligent 系列的格式。

          【讨论】:

            猜你喜欢
            • 2010-11-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-05-23
            • 2015-08-09
            • 2013-06-04
            • 1970-01-01
            • 2011-12-25
            相关资源
            最近更新 更多