使用TVS点阵打印机的.NET PrintDocument动态纸张高度

时间:2017-05-03 08:37:05

标签: .net vb.net printing point-of-sale printdocument

我的要求是我需要打印发票,它可能包含10行或者可能包含20行。每件事都应该在一张发票中。

例如如果你去任何超市,如果你买3件物品,你可能会收到小额账单。如果您购买30件商品,您可能会收到大笔账单。我想在我的vb.NET应用程序中实现相同的功能。

我确实需要根据账单的性质通过程序增加打印机页面长度。

我正在使用点阵打印机和图形模式打印。

我尝试过:

截至目前,我已创建了文本文件,并使用以下命令

通过命令行打印进行打印
Type Printfile.txt > prn

但是,问题是我无法使用不同的字体,重量或大小格式化我的文本文件,因为我将其写为文本文件(记事本)。

我正在使用streamwriter从VB.NET编写文件,截至目前我正在尝试将其格式化为文本文件。

我想将一些单词格式化为粗体或斜体和字体大小变化,但由于我使用文本文件进行格式化,因此我无法这样做。

以下是格式:

Store Name
Store Address
----------------------------------------      
Gift Receipt

Transaction #:          105
Date: 11/10/2009     Time: 6:10:10
Cashier:  2          Register: 5
----------------------------------------      
Item           Description       Quantity
----------------------------------------   
567577         xyz                2
687687         abc                4
–  –           – –                –
----------------------------------------  
                     Net Amount : 6

Thank You for shopping
XYZ StoreName
We hope you’ll come back soon!

2 个答案:

答案 0 :(得分:4)

您可以使用WebBrowser控件来打印html格式的发票。您仍然需要根据需要了解如何从文本文件中填充发票。这可以自动化。例如,创建一个循环来添加每个表行。你甚至可以使用css。

将WebBrowser控件添加到表单,然后运行此代码

Dim html =
    "<html>" &
        "<head>" &
            "<style>" &
                "table, th" &
                "{" &
                    "border: 1px solid black;" &
                    "table-layout: fixed;" &
                    "width: 100px;" &
                    "border-collapse: collapse;" &
                "}" &
                ".title" &
                "{" &
                    "color: blue;" &
                "}" &
            "</style>" &
        "</head>" &
        "<body>" &
            "<p><b><div class=""title"">Store Name</div></b></p>" &
            "<p>Store Address</p>" &
            "<p><hr/></p>" &
            "<p><b>Gift Receipt</b></p>" &
            "<p>Transaction #:          105</p>" &
            "<p>Date: 11/10/2009     Time: 6:10:10</p>" &
            "<p>Cashier:  2          Register: 5</p>" &
            "<p><hr/></p>" &
            "<table>" &
                "<tr>" &
                    "<th>Item</th>" &
                    "<th>Description</th>" &
                    "<th>Quantity</th>" &
                "</tr>" &
                "<tr>" &
                    "<th>567577</th>" &
                    "<th>xyz</th>" &
                    "<th>2</th>" &
                "</tr>" &
                "<tr>" &
                    "<th>687687</th>" &
                    "<th>abc</th>" &
                    "<th>4</th>" &
                "</tr>" &
                "<tr>" &
                    "<th>- -</th>" &
                    "<th>- -</th>" &
                    "<th>-</th>" &
                "</tr>" &
                "<tr>" &
                    "<th colspan=""2"">Net Amount</th>" &
                    "<th>6</th>" &
                "</tr>" &
            "</table>" &
            "<p><hr/></p>" &
            "<p>Thank You for shopping</p>" &
            "<p>XYZ StoreName</p>" &
            "<p>We hope you’ll come back soon!</p>" &
        "</body>" &
    "</html>"

Me.WebBrowser1.DocumentText = html

您需要一个文件管理处理程序(或单独的打印按钮,但在文档完成之前无法调用ShowPrintDialog()点。)

Private Sub WebBrowser1_DocumentCompleted(sender As Object, e As WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
    Me.WebBrowser1.ShowPrintDialog()
End Sub

以上代码生成了这个基本格式的收据。

enter image description here

答案 1 :(得分:0)

在点式打印机中,谁可以打印所有行(无论多少行),最后发送ascii代码以使用原始打印来剪切纸张。

您可以发送FF(换页,从打印机后部弹出纸张),但不能退出ESC O(从打印机前面弹出纸张),ESC 0 / ESC 1(初始化打印机/复位)错误)甚至是铃声/蜂鸣器:转义码是BEL

代码在品牌之间变化,有时在打印机型号中变化。您也可以使用多种模式或Page description languages (PDL)。惠普也将其称为打印机命令语言(PCL)。最常见的是Epson PDL。

example in C#win32 api

的文档