Динамическая высота бумаги с .NET PrintDocument с использованием матричного принтера TVS

Мое требование состоит в том, что мне нужно распечатать счет-фактуру, он может содержать 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!


person Vignesh Kumar A    schedule 03.05.2017    source источник
comment
У вас есть простой текстовый файл, и вы хотите получить отформатированный счет на листе бумаги. Каков формат текста (столбцы, строки и т. Д.)? Какую технологию вы используете для его форматирования (Excel, pdf и т. Д.)? Как вы отправляете на принтер? От начала до конца, есть способ слишком много работы, и в нынешнем виде этот вопрос слишком широкий. Я бы проголосовал за закрытие, если бы мог.   -  person djv    schedule 09.05.2017
comment
Нам нужно увидеть ваши попытки кода. Как сказано выше, это кажется слишком широким. Еще многое предстоит сделать, но нам будет сложно понять, с чего начать.   -  person Bugs    schedule 10.05.2017
comment
пусть они тоже обновят код   -  person Vignesh Kumar A    schedule 10.05.2017
comment
обычно для этого вам следует посмотреть, есть ли у принтера какой-либо язык управления принтером (например, epson ESC / P2 или что-то еще), то вы можете отправить эти команды на принтер так же, как вы это сделали с командой type. ESC / P2 не так уж и сложно освоить ...   -  person    schedule 12.05.2017


Ответы (2)


Вместо этого вы можете использовать элемент управления 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

Приведенный выше код создает эту элементарную, хотя и отформатированную, квитанцию.

введите описание изображения здесь

person djv    schedule 11.05.2017
comment
Спасибо за Ваш ответ. Позвольте мне попробовать и сообщить вам. Между тем, будет ли он поддерживать нестандартную длину бумаги? он может содержать 10 строк или 20 строк. Все должно быть в одной накладной. - person Vignesh Kumar A; 12.05.2017
comment
Конечно, в пределах разумного. Вы можете уменьшить размер таблицы и шрифт, когда есть много строк. Чтобы подобрать нужный размер, потребуется несколько попыток. Если у вас было 100 элементов, конечно, вы не захотите уместить их на одной странице. Так что в программу нужно вписать некоторую логику. - person djv; 12.05.2017
comment
Не думаю, что все пойдет хорошо, проблема в том, как окна обрабатывают страницу. для этого вам следует тщательно настроить драйвер, чтобы не переходить к следующей странице после завершения печати. - person ; 12.05.2017
comment
Дело в том, как с этим справляется драйвер принтера. Некоторые принтеры умещаются на одной странице, некоторые - нет. - person djv; 12.05.2017

В точечных принтерах, которые могут печатать все строки (не важно сколько) и в конце отправляют код ascii, чтобы вырезать бумагу с использованием необработанной печати.

Вы можете отправить FF (Form Feed, для вывода бумаги из задней части принтера), но не ESC O (для выброса бумаги из передней части принтера), ESC 0 / ESC 1 (для инициализации принтера / сброса ошибок) или даже звонок / зуммер: escape-коды BEL

Коды меняются от производителя к бренду, а иногда и от модели принтера. Также у вас может быть несколько режимов или Языки описания страниц (PDL) . HP также называет это языком команд принтера (PCL). Самый распространенный - Epson PDL.

Заголовок пример на C #, документация для win32 api

person Pedro Polonia    schedule 16.05.2017