2008-10-29 15 views
8

Próbuję drukować do drukarek Dot Matrix (różne modele) z C#, obecnie używam Win32 API (można znaleźć wiele przykładów online) wywołań, aby wysłać kody ucieczki bezpośrednio do drukarki z mojej aplikacji C# . Działa to świetnie, ale ...Drukowanie z matrycą punktową w języku C#?

Mój problem polega na tym, że generuję kody ucieczki i nie polegam na systemie drukowania okien, których wydruków nie można wysłać do "normalnych" drukarek lub takich rzeczy jak wydruk PDF sterowniki. (To jest teraz przyczyną problemu, ponieważ próbujemy użyć aplikacji na serwerze terminali 2008 przy użyciu Easy Print [Który opiera się na XPS])

Pytanie brzmi: Jak mogę wydrukować dokumenty w formacie (faktury drukowane stacjonarnie) do drukarek Dot Matrix (Epson, Oki i Panasonic ... różne modele) z C# bez użycia bezpośredniego drukowania, kodów ucieczkowych itp.

** Aby wyjaśnić, próbuję takich rzeczy jak GDI + (System.Drawing.Printing), ale problem polega na tym, że jest bardzo trudny, aby wszystko układało się jak stary kod. (Stary kod wysłał znaki bezpośrednio do drukarki, omijając sterownik Windows.) Jakieś sugestie, jak można ulepszyć rzeczy, aby mogły korzystać z GDI +, ale nadal układać się jak stary kod?

+0

możesz dać nam linki do przykładów drukować alfanumerycznych drukarek. –

Odpowiedz

10

Prawdopodobnie powinieneś używać narzędzia raportowania do tworzenia szablonów, które pozwalają Tobie lub użytkownikom poprawnie pozycjonować pola w odniesieniu do wstępnie zadrukowanej papeterii.

Korzystanie z drukarek igłowych, w zasadzie muszą pracować w jednym z 2 trybów:

  • prostego trybu typu autor tekstu wiersza/kolumny, gdzie wysłać sekwencje zarządzać małą liczbę czcionek są uwzględnione w sprzęcie drukarki i muszą zarządzać zwrotami linii itp.
  • wydruk graficzny, w którym strona jest zrasteryzowana, a sterownik drukarki po prostu napędza głowicę drukującą i kołki, aby wyprowadzić kropki.

Pierwsze użycie jest w większości przypadków przestarzałe w systemie Windows, ponieważ nie zapewnia zbyt wiele kontroli nad wydrukiem, a każda drukarka ma swoje własne cechy, dlatego trudno jest jej przewidzieć i ustawić pozycje na ekranie. strona (bez WYSIWYG).

Drugi używa tylko paradygmatu strony graficznej, który sprawia, że ​​tekst i grafika pozycjonowania są niezależne od rzeczywistych możliwości drukarki.
Podczas korzystania z wstępnie zadrukowanej papeterii, twoim zadaniem jest prawidłowe umieszczenie danych na stronie.
Wykonanie tego ręcznie wymaga dużego nakładu pracy, a tworzenie układu w kodzie jest zdecydowanie niewskazane, ponieważ utkniesz z kodem do zmiany w przypadku zmiany drukarki, formatu strony lub drukowanej papeterii.

Najlepiej po prostu użyć standardowego modelu drukowania oferowanego przez .Net i narzędzia do raportowania, które pozwala na zdefiniowanie modeli i szablonów, w których umieszczony zostanie właściwy tekst i grafika, a następnie przeniesienie tego z kodu.

Visual Studio jest dostarczane z wersją Crystal Reports, ale istnieją inne, lepsze systemy raportowania (na przykład korzystam z wersji developer express), niektóre z nich są nawet free.

+0

Dzięki, nie jestem pewien, czy rozwiąże to mój dokładny problem, ale prawdopodobnie jest to najlepsza odpowiedź/rozwiązanie, jakie dotychczas miałem. Również nie wiedziałem o FYIReporting. – Dale

0

Jeśli drukarka ma sterownik do zainstalowania, możesz użyć zwykłego systemu drukowania Windows. Większość drukarek, w tym POS, ma dostępne sterowniki Windows. (Większość drukarek igłowych jest zgodna z Epson). Niektóre sterowniki drukarek POS umożliwiają wysyłanie kodów ucieczki bezpośrednio do drukarki (przy użyciu specjalnych czcionek); prawdopodobnie nie potrzebujesz takiej funkcjonalności.

Jeśli tak nie jest, można dodać drukarkę (sterownik) Generic/Text Only za pomocą kreatora Add Printer Wizard. Po wykonaniu tej czynności możesz skonfigurować dla niego określone polecenia (sekwencje specjalne) - Rozmiar czcionki 10/12/17, Pogrubienie wł./Wył., Podkreślenie wł/wył, uruchomienie/zatrzymanie zadania, podawanie papieru i wybór rozmiaru.

Używam drukarki ogólnej związanej z portem PLIK do testowania różnych raportów dla drukarek POS - łatwo jest przejrzeć plik tekstowy, aby sprawdzić poprawność numerów na wydruku. Oczywiście do formatowania potrzebny jest określony sterownik drukarki.

+0

Próbuję to ... przy użyciu GDI + drukowania rzeczy w C# (System.Drawing.Printing), ale problem polega na tym, że nadal nie jest taki sam (tak dobry) jak wysyłanie tekstu bezpośrednio do drukarki ... Na przykład jakiej czcionki muszę użyć? – Dale

+0

Myślę, że jest to właściwa odpowiedź: nie chcesz kierować tylko jednej drukarki, chcesz kierować je wszystkie, więc lepiej drukować, niż ktokolwiek inny, zamiast wysyłać znaki do drukarki liniowej (LPT). W ten sposób twoja drukarka staje się urządzeniem graficznym. –

+0

Myślę, że sterownik drukarki Tekst jest najlepszym rozwiązaniem. Powinieneś także wziąć pod uwagę szybkość, drukowanie w trybie graficznym na drukarce matrycowej jest dużo wolniejsze niż używanie kodów ucieczki. Wadą jest niekompatybilność z drukarkami graficznymi, ale w przypadku formularzy z nadrukiem użycie innej drukarki jest mało przydatne. – Glenner003

0

Wygląda na to, że to, co chciałbym zrobić, nie jest możliwe.

Moje wybory do drukowania są niezarządzane bezpośrednio do drukowania drukarek (przy użyciu winspool.drv), co pozwala mi robić wszystko, co chcę, na drukarce i pozwala mi łatwo zestawiać rzeczy. VB.NET Example Lub Mogę użyć GDI + (System.Drawing.Printing), który jest skomplikowany, aby uzyskać rzeczy do linii, ale będzie działać z drukarkami bez matrycy punktowej, takich jak drukarki XPS i PDF.

5

Z mojego doświadczenia wynika, że ​​jest łatwiejszy w użyciu dwa rodzaje raportów dla tych samych danych:

wymagana jest
  • jeden raport dla drukarek igłowych wykorzystujących kody ucieczki i cokolwiek innego, co jest zapisane w pliku tekstowym a następnie drukowane przy użyciu różnych metod (type file.txt > lpt1 lub wybierając w kodzie domyślną drukarkę i używając NOTEPAD /P file.txt) - więcej informacji na temat metod drukowania można znaleźć w artykule this page.
  • kolejny raport dla laserowych/drukarek atramentowych za pomocą narzędzia Report Builder (Crystal Reports, Report Manager, RLIB ani nic dostępnych)

Ponieważ nie jest rzadkością, aby kupić odpowiedni rodzaj drukarki dla odpowiedniego rodzaju raportu Takie podejście ma tę zaletę, że pozwala klientowi decydować: drukarka igłowa dla raportów tekstowych w formacie A3/A4 (zwykle dla działu księgowości) lub drukarka laserowa/atramentowa do raportów graficznych.

4

Nie wiem, jak używać sekwencji Escape w języku C#. Ale mam całą sekwencję Escape for Generic/Text Only. Mam nadzieję, że to pomoże.

Generic Drukuj Ucieczka Sequence 1) Zestaw Interlinia a) 1/8 cala - 27,48 b) 1/6 cala - 27,50

2) Wybierz tryb draft a) 27120, 0/27,120,48

3) List Jakość ) 27,120,1/27,120,49

4) Podwójna wysokość a) 27119, n I) n = 1 na iI), n = 0 Wyłącz

5) Dwukierunkowe drukowanie a) 27,85, n i) 0 - Zarówno sposób ii) jedno - w jedną stronę

6) zwiększenie znak spacji a) 27,32, N (wzrost o n/12 cala)

7) wybrać pogrubioną czcionką ) 27,69

8) Anuluj pogrubioną czcionką ) 27,70

9) Wybór kursywą) 27,52

10) Anuluj kursywą a) 27,53

11) Należy wybrać a) 10CPI 27,8 b) 12cpi 27,77 c) 15cpi 27103 d) 18cpi 27.103

12) usytuowany marżę ) 27,81 n

13) ustawiona Left Margin a) 27,108, n

14) Wysuw ) 12

15) Skrócone Druk a) 0F Na b) 12 Off

16) Double Strike Printing ) 27,71

17) Anuluj Strike Drukowanie ) 27,72

18) W wierszu a) 27,45,0 Off b) 27,45,1 Na

19) Pokój Szerokość a) 27,84,0 Off b) 27,84,1 NA

4

najpierw przekonwertować Sekwencja poleceń do znaku następnie przekazać do drukarki

Przykład pogrubioną czcionką 27,69

string.Format ("{0} {1}", Convert.ToChar (27), Convert.ToChar (69));

Być może nieco krótszy niż:

ciąg.Format ("{0} {1}", (znakowany) (27), (znakowany) (69));