Форум » [x]Harbour » Вывод на принтер в Linux » Ответить

Вывод на принтер в Linux

КСС: Привет всем. Поделитесь, пожалуйста, опытом вывода отчетов и прочего на печать под Linux и Windows. Желательно, чтобы это было универсально. Очевидно, что проще всего формировать отчет в текстовый файл и затем открывать подходящим редактором, но, если для Win есть win32prn, то чем формировать отчеты в Linux ?

Ответов - 12

КСС: Хочу уточнить: речь идёт о печатных формах с использованием разных системных шрифтов.

alkresin: HwGUI. Наверное, и FiveWin. Из HwGUI вы можете взять только те модули, что работают на печать, тогда печатать в графике можно даже из консольных программ. Так же из консоли можно печатать и отчеты, подготовленные Дизайнером отчетов из HwGUI. У меня так оно и работает, одни и те же формы ( счета-фактуры, например, платежки, ... ) печатаются из GUI и консольных, Linux и Windows программ.

КСС: Спасибо.


kia: alkresin пишет: Так же из консоли можно печатать и отчеты, подготовленные Дизайнером отчетов из HwGUI. У меня так оно и работает, одни и те же формы ( счета-фактуры, например, платежки, ... ) печатаются из GUI и консольных, Linux и Windows программ. Как правильно определять строковые константы в prg-файле для клавиш, заголовков окна/отчета, лейблов и т.д. если кодировка в Linux utf-8 а в виндовозе 1251? Например: INIT WINDOW oMainWindow MAIN TITLE "Пример заголовка" ; AT 200,0 SIZE 400,150 Можно ли сделать чтобы один и тотже код работал и в Linux и виндовозе?

alkresin: Как правильно определять строковые константы в prg-файле для клавиш, заголовков окна/отчета, лейблов и т.д. если кодировка в Linux utf-8 а в виндовозе 1251? В консольном режиме Harbour, если я что-то не упустил, пока не поддерживает utf8. Я обычно ставлю на Linux машинах koi8-r. В GUI другая ситуация. Utf8 - родная кодировка для GTK, т.е. все строки, передающиеся в gtk-функции, должны предварительно перекодироваться в utf8. HwGUI это делает сама, но при этом предполагает, что строки - в той кодировке, что установлена в системе. Т.е., поскольку у меня стоит koi8-r, то и строки в программах - в koi8-r, и HwGUI, используя GTK функцию g_locale_to_utf8(), преобразует их в utf8. По-хорошему, надо конечно использовать не g_locale_to_utf8(), а g_convert() и указывать, в какой кодировке исходный текст, но я это писал под свои нужды, а времени переписать не было. Короче, если у вас локаль - utf8, то с русским текстом будут проблемы. Можно ли сделать чтобы один и тотже код работал и в Linux и виндовозе? Да. У меня, собственно, так и есть. Но все строки я держу в ini-файле: aStrings := { "Пример заголовка", ... } ... INIT WINDOW oMainWindow MAIN TITLE aStrings[1] AT 200,0 SIZE 400,150 и эти ini - в разной кодировке для Windows и Linux ( или на другом языке, если надо ). Это в GUI режиме. В консольном все проще. Там тексты программ обычно в дос-кодировке 866 и чтобы все автоматически перекодировалось в koi8 ( или 1251 ) в gtcrs предусмотрены специальные файлы с таблицами перекодировки - hb_charmap.def.

Andrey: kia пишет: Можно ли сделать чтобы один и тотже код работал и в Linux и виндовозе? Да конечно можно, нужно просто сделать чтоб препроцессор сам определял где Windows, а где Linux. Типа как используем одни и те же исходники для Клипера и Харбора. #ifndef __HARBOUR__ // код для клипера #else // код для Харбора #endif // общий код для Клипера и Харбора. А вообще-то я попробовал делать отчеты под FastReport (смотри об нем в этой ветке), и просто получил удовольствие от этой штуки. Проковырялся 1,5 часа чтоб разобраться и теперь формы делать одно УДОВОЛЬСТВИЕ и БЫСТРО ! Делать свою печать НЕ БУДУ, там есть все, а тратить свое время на создание подобной штуки - это всеравно что "изобретать велосипед" !!! Надо бы спросить Спирина, есть ли этот FastReport для Linux ?

kia: Александр, спасибо за ответ. С консолью нет проблем, проблемы с GUI. Решение понятно, спасибо. Я думал что проглядел как это делать автоматом. Правильно ли я понял, что Короче, если у вас локаль - utf8, то с русским текстом будут проблемы. проблемы будут не только с самим GUI, но и с показом/редакцией текстовых данных из dbf-файла использую GUI и utf8?

alkresin: С консолью нет проблем, проблемы с GUI. Т.е., консольные программы работают с utf8 в качестве локали ? Или вы просто консоль не используете ? проблемы будут не только с самим GUI, но и с показом/редакцией текстовых данных из dbf-файла использую GUI и utf8? Вот это я не понял. В чем разница между самим GUI и "показом/редакцией текстовых данных из dbf-файла используя GUI" ? Чтобы показать текст из dbf или откуда-то еще в GUI (GTK) виджете ( label или edit ), надо его переконвертировать в utf8. Как я уже писал, HwGUI делает это автоматически с помошью g_locale_to_utf8(), т.е. из текущей локали. Поэтому надо предварительно конвертировать полученные из dbf данные в кодировку локали - в вашем случае - в utf8. Ну и, вообще-то, надо это дело в HwGUI продумать лучше. Я особенно не дергался насчет этого, т.к. у меня этой проблемы пока нет.

kia: alkresin пишет: Т.е., консольные программы работают с utf8 в качестве локали ? Или вы просто консоль не используете ? Я проверил в консоле с локалью utf8 такие комбинации: Исходный текст (строковые константы) в 866 и Hb_SetCodepage( "RU866" ) Исходный текст (строковые константы) в 1251 и Hb_SetCodepage( "RU1251" ) работает отлично. т.е. текст вида local cMsg866, cMsg1251 cMsg866 := '...' //текст в кодировке 866 cMsg1251 := '...' //текст в кодировке 1251 Hb_SetCodepage( "RU866" ) ? 'Hb_SetCodepage( "RU866" )' ? cMsg866 ? cMsg1251 ? '=====================' Hb_SetCodepage( "RU1251" ) ? 'Hb_SetCodepage( "RU1251" )' ? cMsg866 ? cMsg1251 выдаст на экран Hb_SetCodepage( "RU866" ) Проверка кодировки 866 ╧ЁютхЁър ъюфшЁютъш 1251 ===================== Hb_SetCodepage( "RU1251" ) Џа®ўҐаЄ Є®¤Ёа®ўЄЁ 866 Проверка кодировки 1251 Чтобы показать текст из dbf или откуда-то еще в GUI (GTK) виджете ( label или edit ), надо его переконвертировать в utf8. Как я уже писал, HwGUI делает это автоматически с помошью g_locale_to_utf8(), т.е. из текущей локали. Поэтому надо предварительно конвертировать полученные из dbf данные в кодировку локали - в вашем случае - в utf8. Я это и имел ввиду т.е. в этом случае весь ввод/вывод из dbf будет требовать дополнительной перекодировки из кодировки dbf в utf8. Было очень удобно если можно было задать исходную кодировку dbf/"текста строк" один раз в программе. А HwGUI делала бы автоматически дальнейшее преобразование.

alkresin: Я проверил в консоле с локалью utf8 такие комбинации: Исходный текст (строковые константы) в 866 и Hb_SetCodepage( "RU866" ) Исходный текст (строковые константы) в 1251 и Hb_SetCodepage( "RU1251" ) работает отлично. А какая GT библиотека ? И имеется ввиду чисто текстовая консоль или терминал из под GUI оболочки ? Было очень удобно если можно было задать исходную кодировку dbf/"текста строк" один раз в программе. А HwGUI делала бы автоматически дальнейшее преобразование. Согласен.. Может, сделаю.

kia: alkresin пишет: А какая GT библиотека ? И имеется ввиду чисто текстовая консоль или терминал из под GUI оболочки ? Пока проверил два варианта gttrm - работает, gtcrs - не работает. alkresin пишет: Согласен.. Может, сделаю. Спасибо.

alkresin: С некоторой задержкой :), но ... лучше поздно, чем никогда. Добавил в GTK версию HwGUI функцию hwg_SetAppLocale( cLocale ), которая устанавливает локаль приложения. Допустим, оно у вас было под Windows и все строки - в кодировке 1251. Тогда вы добавляете строчку: hwg_SetAppLocale( "WINDOWS-1251" ) и весь ваш экранный вывод и вывод на печать будет преобразовываться из 1251 в UTF8 и, соответственно, выглядеть как положено, независимо от того какая локаль установлена в системе.



полная версия страницы