Описание < /strong> < /p>
У меня есть приложение .NET 8 /c# Консольное приложение, которое печатает метки с использованием принтера TSC TTP-225 через команды RAW. При первом исполнении печатная метка имеет неверные координаты, вызывая смещение. Однако, если я немедленно запускаю приложение снова, метка отлично напечатает без каких -либо проблем.
симптомы
При первом пробеге:
Текст и положения штрих -положения не совсем. /> < /ul>
В последующих прогонах: < /p>
Правильно отпечатки метки с правильным выравниванием и координатами.
Обеспечить, чтобы буфер принтера очищается перед каждой печатной
Ни один из этих шагов не решал проблему. Проблема последовательно возникает только при первой печати после запуска приложения. /> [*] Модель принтера: TSC TTP-225 < /li>
Язык /Платформа: .net 8, C#, Windows < /li>
Метод связи: Raw Thancs через Win32 API (
[b] Описание < /strong> < /p> У меня есть приложение .NET 8 /c# Консольное приложение, которое печатает метки с использованием принтера TSC TTP-225 через команды RAW. При первом исполнении печатная метка имеет неверные координаты, вызывая смещение. Однако, если я немедленно запускаю приложение снова, метка отлично напечатает без каких -либо проблем. симптомы [/b] При первом пробеге: [list] [*] Текст и положения штрих -положения не совсем. /> < /ul> В последующих прогонах: < /p>
PrinterHelper.SendStringToPrinter("TSC TTP-225", command); < /code> Полный код: < /p> using Lib.Logging; using Microsoft.Extensions.DependencyInjection; using Serilog; using System.Diagnostics; using System.Runtime.InteropServices;
// Content (FONT005 is a custom font that has been previously downloaded (uploaded) to the printer’s memory.) command += "TEXT 10,25,\"FONT005\",0,1,1,\"S04-19-8948589-46\"\r\n"; command += "BARCODE 1,70,\"EAN13\",60,0,0,3,3,0,\"3200000004634\"\r\n"; command += "TEXT 90,145,\"FONT005\",0,1,1,\"46042081\"\r\n"; command += "TEXT -30,180,\"FONT005\",0,1,1,\"п.4 ч.1 ст.46\"\r\n"; command += "TEXT 165,180,\"FONT005\",0,1,1,\"27.12.2023\"\r\n";
// Print command += "PRINT 1,1\r\n";
Log.Information("Sending commands to printer: {{Commands}}", command);
var success = PrinterHelper.SendStringToPrinter("TSC TTP-225", command);
if (success) { Log.Information("Commands successfully sent to printer"); // Short pause to allow printer to process commands await Task.Delay(500); } else { Log.Error("Failed to send commands to printer"); } } }
public class PrinterHelper { // Structure and API declarions: [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] public class DOCINFOA { [MarshalAs(UnmanagedType.LPStr)] public string pDocName; [MarshalAs(UnmanagedType.LPStr)] public string pOutputFile; [MarshalAs(UnmanagedType.LPStr)] public string pDataType; } [DllImport("winspool.Drv", EntryPoint = "OpenPrinterA", SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)] public static extern bool OpenPrinter([MarshalAs(UnmanagedType.LPStr)] string szPrinter, out IntPtr hPrinter, IntPtr pd);
// SendBytesToPrinter() // When the function is given a printer name and an unmanaged array // of bytes, the function sends those bytes to the print queue. // Returns true on success, false on failure. public static bool SendBytesToPrinter(string szPrinterName, IntPtr pBytes, Int32 dwCount) { Int32 dwError = 0, dwWritten = 0; IntPtr hPrinter = new IntPtr(0); DOCINFOA di = new DOCINFOA(); bool bSuccess = false; // Assume failure unless you specifically succeed.
try { // Open the printer if (!OpenPrinter(szPrinterName.Normalize(), out hPrinter, IntPtr.Zero)) { dwError = Marshal.GetLastWin32Error(); Log.Error($"Failed to open printer '{szPrinterName}'. Error code: {dwError}"); return false; }
// Send data bSuccess = WritePrinter(hPrinter, pBytes, dwCount, out dwWritten);
if (!bSuccess) { dwError = Marshal.GetLastWin32Error(); Log.Error($"Error writing data to printer. Error code: {dwError}"); } else if (dwWritten != dwCount) { Log.Warning($"Wrote {dwWritten} bytes out of {dwCount} during sticker print"); }
// End page EndPagePrinter(hPrinter);
// End document EndDocPrinter(hPrinter);
} catch (Exception ex) { Log.Error(ex, "Exception while sending data to printer"); bSuccess = false; } finally { // Close printer if (hPrinter != IntPtr.Zero) { ClosePrinter(hPrinter); } }
return bSuccess; }
public static bool SendStringToPrinter(string szPrinterName, string szString) { if (string.IsNullOrEmpty(szString)) { Log.Warning("Attempt to send empty string to printer"); return false; }
if (string.IsNullOrEmpty(szPrinterName)) { Log.Error("Printer name not specified"); return false; }
var pBytes = IntPtr.Zero;
bool result;
try { // Convert string to ANSI for TSC printer pBytes = Marshal.StringToCoTaskMemAnsi(szString);
var dwCount = szString.Length;
result = SendBytesToPrinter(szPrinterName, pBytes, dwCount); } catch (Exception ex) { Log.Error(ex, "Error preparing data for printer"); result = false; } finally { // Free memory if (pBytes != IntPtr.Zero) { Marshal.FreeCoTaskMem(pBytes); } }
Added delays before sending commands (до 500 мс) < /li> Проверенные команды инициализации принтера ([code]SIZE[/code], gap , cls ) [*] Обеспечить, чтобы буфер принтера очищается перед каждой печатной [/list] Ни один из этих шагов не решал проблему. Проблема последовательно возникает только при первой печати после запуска приложения. /> [*] Модель принтера: TSC TTP-225 < /li> Язык /Платформа: .net 8, C#, Windows < /li> Метод связи: Raw Thancs через Win32 API ([code]winspool.drv[/code])
[b]Update:[/b] Based on the suggestions in the comments: [list] [*]I moved the CLS command to the very beginning of the command sequence to ensure the buffer is cleared before any other commands. [*]The printer был включен и простаивал перед тестом. С момента питания ничего не было напечатано. any errors. [/list] I've attached photos to illustrate each case. [img]https://i.sstatic.net/HiaPGmOy.png[/img]
Описание:
У меня есть приложение .NET 8 C# Консольное приложение, которое печатает метки с использованием принтера TSC TTP-225 через команды RAW. При первом исполнении печатная метка имеет неверные координаты, вызывая смещение. Однако, если я...
Описание
У меня есть приложение .NET 8 /c# Консольное приложение, которое печатает метки с использованием принтера TSC TTP-225 через команды RAW. При первом исполнении печатная метка имеет неверные координаты, вызывая смещение. Однако, если я...
Недавно я приобрел POS-устройство Sunmi V2S Plus. Это устройство работает под управлением Android 11 и имеет встроенный 80-мм принтер. Причина, по которой я хочу использовать это устройство, заключается в том, что мне не нужны отдельные планшет и...
Я работаю над печати простой HTML-страницы, используя принтер TSC TTP-244 Pro. Размер метки составляет 40 мм x 60 мм. Я уже правильно установил размер страницы в настройке принтера, но когда я печатаю страницу, контент переполняет и распространяется...
Я работаю над печати простой HTML-страницы, используя принтер TSC TTP-244 Pro. Размер метки составляет 40 мм x 60 мм. Я уже правильно установил размер страницы в настройке принтера, но когда я печатаю страницу, контент переполняет и распространяется...