Lazreport Выравнивание русского текста (решено) (костыль)

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

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

Lazreport Выравнивание русского текста (решено) (костыль)

Сообщение Deimos » 18.12.2013 16:56:04

Просмотрел все темы на форуме. Ответа не нашел.

При выравнивании текста по правому (либо по центру)(memo) краю выравнивается черти-как. Русский шрифт. Исключительно под Nix. Понимаю, что проблема с разными размерами шрифтов и обработкой ghostscript. Но может кто-то как-то решил такой косяк? куда копать?


Любопытная закономерность (выравнивание по правому краю). Отступ от края приблизительно равен длине текста.

НЕ зависимо от выбранного шрифта pdffonts и другие показывают, что встроены шрифты

name type emb sub uni object ID
------------------------------------ ----------------- --- --- --- ---------
RGVTEH+Helvetica Type 1C yes yes yes 12 0
FVMZJU+Helvetica Type 1C yes yes no 14 0
NCGIML+Helvetica-Bold Type 1C yes yes yes 8 0
EYUIKL+Helvetica-Bold Type 1C yes yes no 10 0


P.S.

Или уже есть ответ, да я не нашел?


Получатся, что надо использовать шрифты Type 1, я правильно понял? Добавив их соответственно в директорию шрифтов gs.

Не свосем понял, что значит Type 1.
Последний раз редактировалось Deimos 14.01.2014 13:44:13, всего редактировалось 4 раз(а).
Deimos
постоялец
 
Сообщения: 169
Зарегистрирован: 17.01.2010 00:31:30

Re: Lazreport Выравнивание русского текста

Сообщение Лекс Айрин » 18.12.2013 17:34:23

Deimos писал(а):Не свосем понял, что значит Type 1.

http://www.paratype.ru/help/formats/postscript.asp
Шрифт формата Type 1 — специальная форма программы PostScript и особый формат файла, который ориентирован на описание шрифта. В языке PostScript существуют и другие стандарты описания шрифтов — Type 0, Type 2, Type 3, ..., однако сейчас они почти не используются или используются для специальных целей. В последние годы язык PostScript был расширен, чтобы обеспечить поддержку шрифтовых возможностей стандартов TrueType и OpenType. Новые устройства с языком Adobe PostScript сейчас поддерживают все 3 шрифтовых стандарта.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Lazreport Выравнивание русского текста (почти решено)

Сообщение Deimos » 31.12.2013 22:00:40

Братья Рассеяне уже вовсю празднуют Новый Год (Кстати, с праздничком искренне всех вас!!!) а я еще нет, ибо...

Было:

Просмотр
Изображение

Печать
Изображение

Стало:

Просмотр
Изображение

Печать
Изображение

Результат не идеален, но я буду его допилить...

P.S. Работа велась под Linux. Под виндой модифицированную Версию Не проверял (Сам пойду отмечать).

P.P.S. Косяк был не в настройках postscript. Допиливался lazreport.
Deimos
постоялец
 
Сообщения: 169
Зарегистрирован: 17.01.2010 00:31:30

Re: Lazreport Выравнивание русского текста (решено) (костыль

Сообщение Deimos » 14.01.2014 13:48:59

костыль конечно, но рабочий...

Скину "дляпатомкаф", может кому-еще пригодится...

Есть ДВА пути рещения (три. Но фиксить нужно postscriptcanvas.pas ноги уходят в получение метрики двухбайтовых символов и вшитые шрифты)

Код: Выделить всё
{$ENDIF}
        case Alignment of
          Classes.taLeftJustify : CurX :=x+gapx;
         //fixed by Logos
          Classes.taRightJustify:
            begin
              {$IFDEF MSWindows}
              CurX :=x+dx-1-gapx-Canvas.TextWidth(St);
              {$ENDIF}
              {$IFDEF UNIX}
              if length(st)=utf8length(st)
              then CurX :=x+dx-1-gapx-Canvas.TextWidth(St)
              else CurX :=x+dx-1-gapx-nw;
              {$ENDIF}
            end;
          Classes.taCenter:
            begin
              {$IFDEF MSWindows}
              CurX :=x+gapx+(dx-gapx-gapx-Canvas.TextWidth(St)) div 2;
              {$ENDIF}
              {$IFDEF UNIX}
              if length(st)=utf8length(st)
              then CurX :=x+gapx+(dx-gapx-gapx-Canvas.TextWidth(St)) div 2
              else  CurX :=x+gapx+(dx-gapx-gapx-  (Canvas.TextWidth(St) div 2 -utf8length(st) div 2 - 6)  ) div 2
              {$ENDIF}
            end;
      //fixed by Logos END
        end;           


файл LR_CLASS.pas

строки начиная с 2928 функция outline

потом можно либо поставить pdf-принтер и выводить в pdf а потом на печать из него (наиболее-корректное выравнивание)

либо ввести переменную DELTA в строке
Код: Выделить всё
else CurX :=x+dx-1-gapx-nw-DELTA;
и с ее помощью подобрать выравнивание по собственным нуждам.

Кстати у Хесуса была подобная конструкция до патча, но что-то у них там не корректно было с выравниванием, и он заменил на то, что есть сейчас... ( :D еще-менее корректное)

Добавлено спустя 7 минут 16 секунд:
Re: Lazreport Выравнивание русского текста (решено) (костыль)
актуально для Linux Mint 13 (на коем и проверял). Скорее-всего (99%) будет рабочим под любым из форков Гнома
Deimos
постоялец
 
Сообщения: 169
Зарегистрирован: 17.01.2010 00:31:30


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google Adsense [Bot] и гости: 141

Рейтинг@Mail.ru