2017-05-03 68 views
6

Moim wymaganiem jest to, że muszę wydrukować fakturę, może ona zawierać 10 linii lub może zawierać 20 linii. Każda rzecz powinna znajdować się na jednej fakturze.Dynamiczna wysokość papieru z .NET PrintDocument przy użyciu drukarki TVS Dot Matrix

Dla np. jeśli pójdziesz do dowolnego supermarketu, jeśli kupisz 3 przedmioty, możesz otrzymać niewielki rachunek. Jeśli kupisz 30 sztuk, możesz otrzymać duży rachunek. Chcę zaimplementować to samo w mojej aplikacji vb.NET.

Dokładnie potrzebuję tego, jak zwiększyć długość strony drukarki poprzez program zgodnie z naturą rachunku.

Używam drukarki igłowej i trybu graficznego.

Co próbowałem:

Jak na razie stworzyłem plik tekstowy i wydrukować go za pomocą druku linii poleceń za pomocą poniższego polecenia

Type Printfile.txt > prn 

Ale problemem jest to, że nie jestem w stanie sformatuj mój plik tekstowy o innej czcionce, ciężarze lub rozmiarze, ponieważ piszę go jako plik tekstowy (notatnik).

Używam streamwritera do zapisywania plików z VB.NET i od tej pory próbuję sformatować go w plikach tekstowych.

Chcę sformatować niektóre wyrazy, które mają być pogrubione lub kursywa oraz zmiany rozmiaru czcionki, ale nie mogę tego zrobić, ponieważ formatuję pliki tekstowe.

Poniżej format:


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! 

+1

Masz pliku tekstowego, a chcesz dostać się do sformatowanej faktury na kawałku papieru. Jaki jest format tekstu (kolumny, wiersze itp.)? Jakiej technologii używasz do formatowania (Excel, pdf itp.)? Jak przesyłasz go do drukarki? Od początku do końca nie ma * za dużo pracy do zrobienia, a w obecnej formie pytanie to jest zbyt szerokie. Chciałbym głosować, aby zamknąć, gdybym mógł. – djv

+1

Musimy zobaczyć twoje próby kodowania. Jak wspomniano powyżej, wydaje się to być zbyt szerokie. Jest dużo do zrobienia, ale będziemy walczyć, aby wiedzieć, od czego zacząć. – Bugs

+0

Zezwalaj na aktualizację kodu em –

Odpowiedz

4

Można użyć formantu WebBrowser do wydrukowania w formacie HTML zamiast faktury. Nadal musisz dowiedzieć się, jak wypełnić fakturę z pliku tekstowego, zgodnie z Twoimi potrzebami. To może być zautomatyzowane. Na przykład utwórz pętlę, aby dodać każdy wiersz tabeli. Możesz nawet użyć css.

Dodawanie formantu WebBrowser do formularza i uruchomić ten kod

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 

Musisz obsługi dla kompletnego dokumentu (lub oddzielny przycisk drukowania, ale chodzi o to ShowPrintDialog() nie może zostać wezwany przed dokument jest kompletny).

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

Powyższy kod generuje ten prosty, choć sformatowany paragon.

enter image description here

+0

Dziękuję za odpowiedź. Pozwól mi spróbować i daj znać. W międzyczasie będzie obsługiwać niestandardową długość papieru? może zawierać 10 linii lub może zawierać 20 linii. Każda rzecz powinna znajdować się na jednej fakturze. –

+0

Oczywiście w granicach rozsądku. Możesz zmniejszyć rozmiar tabeli i czcionki, gdy jest wiele linii. Aby znaleźć odpowiedni rozmiar, trzeba by było kilku prób. Jeśli masz 100 przedmiotów, możesz oczywiście nie chcieć dopasować go do jednej strony. Więc pewna logika powinna być zapisana w programie. – djv

+0

Nie sądzę, że to pójdzie dobrze, problem leży w tym, jak okna obsługują stronę. w tym celu należy starannie skonfigurować sterownik, aby po zakończeniu drukowania nie przejść do następnej strony. –

0

W drukarek igłowych, które można wydrukować wszystkie linie (nr mater ilu) i na koniec, wyślij kod ASCII do cięcia papieru przy użyciu druku surowego.

Możesz wysłać FF (wysuw formularzy, aby wysunąć papier z tyłu drukarki), ale nie ESC O (aby wysunąć papier z przodu drukarki), ESC 0/ESC 1 (aby zainicjować drukarkę/reset błędów) lub nawet dzwonek/brzęczyk: kody ucieczkowe to BEL

Kody zmieniają się z marki na markę, a czasami w model drukarki. Możesz także mieć kilka trybów lub Page description languages (PDL). HP nazywa je także językiem poleceń drukarki (PCL).Najczęstszym jest Epson PDL.

example in C#, dokumentacja dla win32 api