Печать напрямую в принтер (включая сетевой)

Обсуждение извечных проблем кларионовских (и не только) отчетов

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Аватара пользователя
Admin
Администратор
Сообщения: 3959
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 25 раз
Поблагодарили: 22 раза
Контактная информация:

Печать напрямую в принтер (включая сетевой)

Сообщение Admin »

Пользовался шаблоном LinePrint до определенного момента. На винтерминалах что то незаладилось... пришлось искать в инете инфу. Выводы ниже.

Код: Выделить всё

                  PROGRAM

TSA_DOC_INFO_1    GROUP,TYPE
pDocName            LONG
pOutputFile         LONG
pDatatype           LONG
                  END

                  MAP
                    MODULE('Printer API')
                      pbc_GetLastError(),SIGNED,PASCAL,NAME('GetLastError')
                      pbc_OpenPrinter(LONG pPrinterName, *LONG outhPrinter,LONG pDefault),BOOL,PASCAL,RAW,NAME('OpenPrinterA'),PROC
                      pbc_StartDocPrinter(LONG hPrinter, LONG Level, LONG pDocInfo),LONG,PASCAL,PROC,RAW,NAME('StartDocPrinterA')
                      pbc_EndDocPrinter(LONG hPrinter),BOOL,PASCAL,RAW,PROC,Name('EndDocPrinter')
                      pbc_StartPagePrinter(LONG hPrinter),BOOL,PASCAL,RAW,PROC,Name('StartPagePrinter')
                      pbc_EndPagePrinter(LONG hPrinter),BOOL,PASCAL,RAW,PROC,Name('EndPagePrinter')
                      pbc_WritePrinter(LONG hPrinter, *CSTRING pBuf, LONG cbBuf, *LONG pcBytesWritten),BOOL,RAW,PASCAL,PROC,Name('WritePrinter')
                      pbc_ClosePrinter ( LONG hPrinter ),BOOL,RAW,PASCAL,PROC,Name('ClosePrinter')
                    END
                    RawDataToPrinter(*CSTRING szPrinterName, *CSTRING lpData, LONG dwCount),BYTE
                  END

loc:Str           CSTRING(200)
loc:Printer       CSTRING(200)
loc:Goods         CSTRING(200)

  CODE
  !loc:Printer = '\\post\HP LaserJet 1100'
  loc:Printer = 'Brother HL-2070N series'
  loc:Str     = 'test data<12>'
  IF ~RawDataToPrinter(loc:Printer,loc:Str,LEN(loc:str))
    MESSAGE('Error on print')
  END

RawDataToPrinter  PROCEDURE(*CSTRING szPrinterName, *CSTRING lpData, LONG dwCount)!,BYTE
hPrinter          LONG
DocInfo           LIKE(TSA_DOC_INFO_1)
dwJob             LONG
dwBytesWritten    LONG

pDocName          CSTRING(200)
pOutputFile       CSTRING(200)
pDatatype         CSTRING(200)
  CODE
  ! Необходим дескриптор принтера.
  IF ~pbc_OpenPrinter(ADDRESS(szPrinterName), hPrinter, 0)
    RETURN FALSE
  END
  ! Заполняем структуру данными о документе
  pDocName    = 'My Document'
  pOutputFile = ''
  pDatatype   = 'RAW'
  DocInfo.pDocName    = ADDRESS(pDocName)
  DocInfo.pOutputFile = ADDRESS(pOutputFile)
  DocInfo.pDatatype   = ADDRESS(pDatatype)
  ! Информируем спулер о том, что печать документа начата.
  dwJob = pbc_StartDocPrinter(hPrinter, 1, ADDRESS(DocInfo))
  IF dwJob = 0
    pbc_ClosePrinter(hPrinter)
    RETURN FALSE
  END
  ! Начало страницы.
  IF ~pbc_StartPagePrinter(hPrinter)
    pbc_EndDocPrinter(hPrinter)
    pbc_ClosePrinter(hPrinter)
    RETURN FALSE
  END
  ! Посылаем данные на принтер.
  IF ~pbc_WritePrinter(hPrinter, lpData, dwCount, dwBytesWritten)
    pbc_EndPagePrinter(hPrinter)
    pbc_EndDocPrinter(hPrinter)
    pbc_ClosePrinter(hPrinter)
    RETURN FALSE
  END
  ! Конец страницы.
  IF ~pbc_EndPagePrinter(hPrinter)
    pbc_EndDocPrinter(hPrinter)
    pbc_ClosePrinter(hPrinter)
    RETURN FALSE
  END
  ! Информируем спулер о конце документа.
  IF ~pbc_EndDocPrinter(hPrinter)
    pbc_ClosePrinter(hPrinter)
    RETURN FALSE
  END
  ! Закрываем дескриптор принтера.
  pbc_ClosePrinter(hPrinter)
  ! Проверяем правильность количества записанных байт.
  IF dwBytesWritten <> dwCount
    RETURN FALSE
  END
  RETURN TRUE
Использовал для печати наклеек на Godex EZ-2
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Ответить