얼룩말 프린터 (TTP2030
) 텍스트 및 바코드에 인쇄해야하는 .net
c#
웹 응용 프로그램에서 작업 중입니다. RawPrinterHelper
클래스 from here 사용 나는 유니 코드 문자열처럼 프린터에 명령을 거의 가지고있다.Zebra TTP 2030 프린터로 원시 데이터 보내기 및 상태 가져 오기
그래서, 바코드를 인쇄 할 내가 할 :
string enq = Convert.ToChar(5).ToString();
string esc = Convert.ToChar(27).ToString();
string nul = Convert.ToChar(0).ToString();
string rs = Convert.ToChar(30).ToString();
string lf = Convert.ToChar(10).ToString();
string cr = Convert.ToChar(13).ToString();
StringBuilder sb = new StringBuilder();
sb.Append(esc + "BS" + nul + nul + Convert.ToChar(72).ToString() + nul + nul);
sb.Append(nul + nul + Convert.ToChar(64).ToString() + nul + Convert.ToChar(2).ToString() + Convert.ToChar(2).ToString());
sb.Append(esc + "BW" + nul + "733104000099" + nul);
sb.Append(lf + rs);
RawPrinterHelper.SendStringToPrinter(printerName, sb.ToString());
그 명령에 대한 니모닉은 내가 < 시간처럼 제대로 일을 보낸다 경우
< ESC>BS<0><0>< h 48><0><0>
<00><0>< h 40><0><2><2>
< ESC>BW<00>733104000099<00>
< LF>< RS>
내가 모르는 것은 48>. 매뉴얼에서 선두에 h
다음에 공백이 있으면 16 진수 값을 나타냅니다. 이 경우이 값은 바코드의 X
좌표 (하위 바이트 - 이것이 무엇인지는 알 수 없음)를 나타냅니다.
이 값이 픽셀 (또는 mm) 인 경우 16 진수로 변환 한 다음 유니 코드로 변환하면 어떻게됩니까?
을 전송해야하는 소수 값을 어떻게 변환합니까?
통치자 라인을 인쇄하는 예를 들어 내가 보내< ESC>r<0><0><0><0><1><230><0><24><3>
모두 내가 그렇게이 명령을 내가 할 수 변환하려면 어떻게 등
를 중지, 시작 위치를 의미 진수 값입니다 프린터로 보내시겠습니까?
내가 작업 할 수없는 또 다른 사항은 프린터에서 데이터를 가져 오는 것입니다. 사용할 수있는 여러 가지 명령이 달성하려고 용지 상태, 일련 번호, 펌웨어 등을 받고 같은 있습니다 먼저 나는 RawPrinterHelper
클래스
[DllImport("winspool.drv", CharSet = CharSet.Ansi, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
public static extern int ReadPrinter(IntPtr hPrinter, StringBuilder data, int buf, out int pcRead);
을 추가했다. 그럼 난
SendFileToPrinter
을 사용하여 명령과 나는 얼룩말 웹 사이트
에서 가져온 kiosk printer toolbox
라는 작은 응용 프로그램에서 저장 한 .prn
파일을 보내려고 (I 대신 내가 위에서 잘 때문에 기술 SendStringToPrinter
접근 방식의 파일을 전송하기로 결정했습니다 나는 거기에 옳은 일을하고 있다는 것을 믿지 않으며, 또한 몇 가지 다른 명령을 사용하여 명령 파일을 프린터에 보내 테스트했다.
ReadPrinter(hPrinter, sb, 6, out dwWritten);
이라고하지만 sb
은 비어 있습니다. 이 메서드는 0을 반환합니다. 프린터에서 데이터를 읽는 방법을 알고 있습니까?? 인쇄 (텍스트 및 바코드)와 프린터 상태를 고려해야 할 완전히 다른 접근 방식이 있습니까?
업데이트에 관해서는 winspool을 버렸습니다.drv는 LibUsbDotNet을 사용하여 USB 포트에 직접 읽고 쓸 수 있습니다. winspool을 사용하면 ReadPrinter 나 GetPrinterData를 사용하여 프린터에서 데이터를 가져올 수 없었습니다 (가장 많이 사용하는 방법을 모를 가능성이 있으므로 해당 항목에 유용한 정보는 찾을 수 없습니다). LibUsbDotNet은 훌륭한 라이브러리이며 위의 설명과 같은 방법으로 프린터에 명령을 보내고 데이터를 가져올 수 있습니다. 지금 직면하고있는 유일한 문제는 프린터 명령에 대한 10 진수 및 16 진수 값을 변환하고 출력을 읽을 수있는 것으로 변환하는 것입니다. – bfi