Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как печатать на рулонную бумагу?

1.9K
15 марта 2009 года
George22
91 / / 09.12.2007
Такая проблема: нужно печатать счета на рулонную бумагу с
помощью принтера Epson LX-300. Счета маленькие - на формат А4
помещается 4 штуки. По тех. требованиям я должен печатать на
рулонную бумагу, так вот когда я вывожу на печать принтер печатает
маленький счет и стемится выкинуть лист и весь рулон крутит и крутит.
Может есть простое решение?
294
15 марта 2009 года
Plisteron
982 / / 29.08.2003
Где-то в dip-переключателях принтера настраивается, что у него рулон, а не листы (см. букварик принтера), плюс отдельный dip на пропуск перфораций. IMHO, эту проблему только так можно решить.
1.9K
25 марта 2009 года
George22
91 / / 09.12.2007
Проблему решил только следующим образом:
На форме Button и ListBox с нужным текстом:
Код:
HANDLE hLpt;
char buf[64];
BOOL res;
DWORD ret;

void __fastcall TForm1::Button1Click(TObject *Sender)
{
 hLpt = CreateFile( "LPT1", GENERIC_READ | GENERIC_WRITE,
           0, NULL, OPEN_EXISTING, 0, NULL );

 buf[0] =27; //ESC-последовательность
 buf[1] ='@';//Initialize printer
 buf[2] =17; //Select printer -этого может и не надо
 buf[3] =0x0D;//перевод строки
 buf[4] =0x0A;//возврат каретки
 WriteFile(hLpt, buf, 5, &ret, NULL);

  for(int i =0; i<ListBox1->Items->Count; i++)
   {
 AnsiString Str = ListBox1->Items->Strings+"\n";
 Str =AnsiString(AToB(Str.c_str()));//Перекодировка в русские буквы
 WriteFile(hLpt, Str.c_str(), Str.Length(), &ret, NULL);
   }
  for(int i =0; i<14;i++)//прогнать бумагу до линии отрыва
  {
 buf[0] =0x0D;
 buf[1] =0x0A;
 WriteFile(hLpt, buf, 2, &ret, NULL);
  }
 CloseHandle(hLpt);//закрыть, чтобы сразу напечатал, а не хранил в
                          //в буфере
}


Пришлось перекодировать из ANSI:
Код:
//---Перекодировка-----------------------------------------------------------
 char* AToB(char*Str)
 {
 unsigned char*str =Str;
 while(*str)
  {
   if(*str>=0xC0)
   if(*str<=0xEF)
   *str-=0x40;
   else *str-=0x10;
   str++;
  }
 return Str;
 }

Понимаю, что еще нужны всякие проверки состояния принтера,
но пока работает, а проблемы решим после их появления.:)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог