PowerPDF и русские символы

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

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

Ответить
Аватара пользователя
VirtUX
энтузиаст
Сообщения: 880
Зарегистрирован: 05.02.2008 09:52:19
Откуда: Крым, Алушта

PowerPDF и русские символы

Сообщение VirtUX »

Как оказалось в FPC 2.6.2 не реализована функция определения типа символа в sysstr.inc :( А именно используемая непосредственно в PowerPDF:

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

Function ByteType(const S: string; Index: Integer): TMbcsByteType;

begin
  Result:=mbSingleByte;
end;

Как видим она всегда возвращает значение однобайтного символа. Т.о. функция из модуля PdfTypes всегда возвращает ложь:

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

function _HasMultiByteString(const Value: string): boolean;
var
  i: integer;
begin
  result := false;
  for i := 1 to Length(Value) do
    if ByteType(Value, i) <> mbSingleByte then // Здесь и происходят все неприятности
    begin
      result := true;
      Break;
    end;
end;       

Т.о. процедура вывода текста на канву обрабатывает русский текст в UTF-8 как однобайтный.
Видится два выхода: или преобразовывать текст из UTF-8 в OEM-866 или CP-1251 (что крайне не приемлемо); или дописать функцию Function ByteType(const S: string; Index: Integer): TMbcsByteType;.
Патчи писать и выкладывать на freepascal.org думаю не стоит, т.к. это очевидный трабл по каким-то причинам не решаемый принципиально разрабами FPC.
От сюда следует вопрос: в новых версиях FPC решена эта проблема или нет?

Добавлено спустя 1 час 27 минут 40 секунд:
Заплатка

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

function _HasMultiByteString(const Value: string): boolean;
var
  i: integer;
begin
  Result := true;
  exit;
  //========================================================
  result := false;
  for i := 1 to Length(Value) do
    if ByteType(Value, i) <> mbSingleByte then
    begin
      result := true;
      Break;
    end;
end;       

Не помогла :( Теперь выдает вместо набора занков "?" абракадабру... Как победить абракадабру?

Добавлено спустя 25 минут 59 секунд:
Кстати. Ни TPRLabel, ни NPRText во время разработки и во время выполнения не отображают русский текст корректно. Только рисование на TPRImage.Canvas с помощью TextOut выводит текст по русски, но в pdf-файл этот текст не попадает :(

Добавлено спустя 53 минуты 57 секунд:
Проблемы с отображением русских символов в компоненте связаны с некорректной работой функции:

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

function TPRCustomLabel.InternalTextout(APdfCanvas: TPdfCanvas;
                       S: string; X, Y: integer): Single;

Внутри нее рассчитывается позиция следующего символа. Так вот функция:

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

function TextWidth(Text: string): Single;

всегда возвращает нуль в случае кириллицы. Связано это с тем, что разработчик использовал свою функцию перекодировки UTF8 в Ansi:

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

function _UTF8ToWinAnsi(const value:string; InvalidChar:char='?'): string;

которая, в принципе, перекодировать не умеет. Пришлось заменить ее на:

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

function UTF8ToCP1251(const s: string): string;
из модуля LConvEncoding. Но ширина символа так и не определяется в некоторых случаях правильно :(

Вывод: использовать PowerPDF - не возможно, лечить его - долгий процесс.

P.S. Посему жду предложений на тему: "Как экспортировать отчет в PDF?"

Добавлено спустя 23 минуты 20 секунд:
Как и ожидалось - из LazReport экспортируется в PDF кракозябриками :(
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Re: PowerPDF и русские символы

Сообщение alexs »

Последние комиты в LazReport были связаны с экспортом в PDF и PS через CairoCanvas. Должно работать.
Но у меня подозрение насчёт работы этого дела в Windows.
Аватара пользователя
VirtUX
энтузиаст
Сообщения: 880
Зарегистрирован: 05.02.2008 09:52:19
Откуда: Крым, Алушта

Re: PowerPDF и русские символы

Сообщение VirtUX »

В последней версии LazReport frTNPDFExport не имеет реализации

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

TfrTNPDFExport = class(TComponent) // fake component
    end;
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Re: PowerPDF и русские символы

Сообщение alexs »

Скорее всего - не туда смотрите.
Это компонент-пустышка. Предназначен только для регистрации модуля.
Надо смотреть - что этот модуль подключает.
Аватара пользователя
VirtUX
энтузиаст
Сообщения: 880
Зарегистрирован: 05.02.2008 09:52:19
Откуда: Крым, Алушта

Re: PowerPDF и русские символы

Сообщение VirtUX »

alexs писал(а):Это компонент-пустышка. Предназначен только для регистрации модуля.


Дело в том, что даже пункта меню экспорта в PDF теперь нет. Да и в зависимостях пакета все тот же PowerPDF.
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Re: PowerPDF и русские символы

Сообщение alexs »

Компонент называется lrCairoExport. Но что-то он ещё не работает... В винде, кстати, в итоге должно работать - только потребует libcairo-2.dll.
Аватара пользователя
VirtUX
энтузиаст
Сообщения: 880
Зарегистрирован: 05.02.2008 09:52:19
Откуда: Крым, Алушта

Re: PowerPDF и русские символы

Сообщение VirtUX »

Ссылку можно узнать на компонент? Гугл ничего не дает...
ssadragon
постоялец
Сообщения: 148
Зарегистрирован: 03.12.2012 20:21:35

Re: PowerPDF и русские символы

Сообщение ssadragon »

VirtUX писал(а):Ссылку можно узнать на компонент? Гугл ничего не дает...

..lazarus\components\lazreport\source\addons\cairoexport
Вроде оно!
Аватара пользователя
VirtUX
энтузиаст
Сообщения: 880
Зарегистрирован: 05.02.2008 09:52:19
Откуда: Крым, Алушта

Re: PowerPDF и русские символы

Сообщение VirtUX »

При компиляции компонента:
lr_e_cairo.pas(9,58) Fatal: Can not find unit CairoCanvas used by lr_e_cairo.
Аватара пользователя
VirtUX
энтузиаст
Сообщения: 880
Зарегистрирован: 05.02.2008 09:52:19
Откуда: Крым, Алушта

Re: PowerPDF и русские символы

Сообщение VirtUX »

во вчерашнем SVN Lazarus cairoexport не установился из-за ошибки в перекрестных ссылках в uses LMessages и Messages (баг Lazarus). В общем так я и не смог посмотреть этот экспортер. Под текущим Lazarus тоже не собирается из-за зависимостей.
Все еще надеюсь, что под Lazarus есть возможность корректного экспорта в PDF...
Аватара пользователя
Little_Roo
энтузиаст
Сообщения: 639
Зарегистрирован: 27.02.2009 18:56:36
Откуда: Санкт-Петербург

Re: PowerPDF и русские символы

Сообщение Little_Roo »

VirtUX писал(а):о вчерашнем SVN Lazarus cairoexport не установился из-за ошибки в перекрестных ссылках в uses LMessages и Messages (баг Lazarus).


А уже alexs напряг :( Подобная хня проявилась при установке его библиотеки RxLib
Ждем завтрева ????
Аватара пользователя
VirtUX
энтузиаст
Сообщения: 880
Зарегистрирован: 05.02.2008 09:52:19
Откуда: Крым, Алушта

Re: PowerPDF и русские символы

Сообщение VirtUX »

Продолжение:
Windows 7 64-bit.
Пакет установился. Но Lazarus 1.1 FPC 2.7.1 отказался запускаться, т.к. не хватало библиотек libcairo. Скачал 1.10.2 версию. Кинул в System32. Ругается на отсутствие libfontconfig-1.dll. Не вопрос - скачал отсюда. Кинул в System32, и на всяк случай в SysWOW64 - хоть это и необязательно. Ребутимся. Теперь Ошибка "Ля-ля-ля 0xc000007b. Ля-ля-ля OK." Нас этим не удивить - мы же в Windows. Cmd -> sfc /scannow -> ждем -> делаем кофе -> пьем кофе -> ждем -> Ошибок много, но ничего не связано с libfontconfig-1.dll. Хм... пробуем regsvr32 libfontconfig-1.dll. Опля, оказывается не совместим с данной версией Windows. Хотя написано:
Для Windows XP, Vista, 7 - C:\Windows\System32
Если Вы используете 64-bit версию Windows, скопируйте файл libfontconfig-1.dll в C:\Windows\SysWOW64\

Если кто в теме, помогите решить проблему....
Аватара пользователя
VirtUX
энтузиаст
Сообщения: 880
Зарегистрирован: 05.02.2008 09:52:19
Откуда: Крым, Алушта

Re: PowerPDF и русские символы

Сообщение VirtUX »

апну тему... Очень нужен экспорт в PDF с поддержкой кириллицы.
grot
новенький
Сообщения: 82
Зарегистрирован: 13.02.2010 15:33:03

Re: PowerPDF и русские символы

Сообщение grot »

Посмотри :
- Morfik (качни - там есть их вывод в PDF (a-ля PowerPDF) ...)
- LibreOffice - он работает из Консоли - выводит PDF из чего угодно !
java73
постоялец
Сообщения: 257
Зарегистрирован: 21.11.2013 09:08:10

Re: PowerPDF и русские символы

Сообщение java73 »

На windows 32 пакет Cairo очень нормально установился, скачал последние библиотеки GTK+ полным комплектом, кинул в system32 и теперь уапще без всяких проблем русский PDF получаю)))
Ответить