Печать чека с помощью LazReport

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
AlexDanilov
новенький
Сообщения: 17
Зарегистрирован: 24.10.2016 14:11:46
Откуда: Kiev

Печать чека с помощью LazReport

Сообщение AlexDanilov »

Привет, друзья.

Пожалуйста, подскажите мне, подойдет ли компонент LazReport для печати чеков.

Основные требования
1. Выставление ширины бумаги 40 или 80 символов
2. Возможность расширять высоту по контенту, не по странице.
3. Возможность программно создавать/менять шаблон.
4. Возможность писать по центру (учитывая размер бумаги)
5. Возможность печатать жирным, менять размер шрифта
6. Возможность рисовать линии разной жирности

Вот пример чека.

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

|-------------------------------------|
|               Заказ №4              |
|                                     |
| Стол №10, Главный зал               |
|-------------------------------------|
| Салат греческий         1  100  100 |
|                                     |
|-------------------------------------|
|                          Итого: 100 |
|-------------------------------------|

Сейчас пытаюсь рисовать чек в canvas, но выходит не очень.

Буду признателен, если поделитесь примером, как программировать шаблон отчета в run-time.

Также думаю, может лучше создавать PDF и его отправлять на печать?
wadman
постоялец
Сообщения: 122
Зарегистрирован: 18.10.2016 14:54:28
Контактная информация:

Сообщение wadman »

Всё это возможно. Но приводить пример, это написать бОльшую часть работы. Если не всю...
AlexDanilov
новенький
Сообщения: 17
Зарегистрирован: 24.10.2016 14:11:46
Откуда: Kiev

Сообщение AlexDanilov »

wadman писал(а):это написать бОльшую часть работы. Если не всю...

Мне будет достаточно примера из одной строки по центру, например.
wadman
постоялец
Сообщения: 122
Зарегистрирован: 18.10.2016 14:54:28
Контактная информация:

Сообщение wadman »

AlexDanilov писал(а):Мне будет достаточно примера из одной строки по центру, например.

Опишу логику: в отчете должен быть бэнд (MasterData). Либо вставить его в шаблон в дизайнере, либо кодом. А уже в него вставляется строка (вроде TfrMemoView).
Позиция и размеры задаются кодом.

Примеры: https://www.google.com/search?q=lazrepo ... pascal.org
tema
постоялец
Сообщения: 376
Зарегистрирован: 24.03.2011 19:19:27

Сообщение tema »

Я вот так чек печатаю:

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

        with Printer do
        begin
          try
            BeginDoc;
            Canvas.Font.Name := 'Courier New';
            Canvas.Font.Size := 8;
            Canvas.Font.Color := clBlack;
            LineHeight := Round(1.2 * Abs(Canvas.TextHeight('I')));
            u := 0;
            for i := 0 to pechat.Count - 1 do
            begin
              if i = 5 then
                Canvas.Font.Size := 16;
              if i = 6 then
                Canvas.Font.Style := [fsBold];
              if i = 7 then
              begin
                Canvas.Font.Size := 8;
                Canvas.Font.Style := [];
              end;
              Canvas.TextOut(5, 5 + (i + u) * LineHeight, pechat.Strings[i]);
              if i in [5, 6] then
                Inc(u);
            end;

            Canvas.Brush.Style := bsClear;
            Canvas.Rectangle(5, (pechat.Count + u) * LineHeight, 500,
              (pechat.Count + u + 4) * LineHeight);
            Canvas.TextOut(5, 5 + (pechat.Count + u + 5) * LineHeight,
              '------------------------');
          finally
            EndDoc;
          end;
        end;

pechat - это у меня массив строк striglist
Deimos
постоялец
Сообщения: 174
Зарегистрирован: 16.01.2010 23:31:30

Сообщение Deimos »

Я решил проблему печатью на принтере чеков и ширину подобрал экспериментальным путем ))) Если нужна конкретика, то какая конкретно? (стандартная печать лазрепорта)
Ответить