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

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

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

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

Сообщение VirtUX » 02.05.2013 15:14:52

Как оказалось в 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 кракозябриками :(
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

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

Сообщение alexs » 03.05.2013 00:26:51

Последние комиты в LazReport были связаны с экспортом в PDF и PS через CairoCanvas. Должно работать.
Но у меня подозрение насчёт работы этого дела в Windows.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

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

Сообщение VirtUX » 03.05.2013 15:34:32

В последней версии LazReport frTNPDFExport не имеет реализации
Код: Выделить всё
TfrTNPDFExport = class(TComponent) // fake component
    end;
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

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

Сообщение alexs » 03.05.2013 15:46:51

Скорее всего - не туда смотрите.
Это компонент-пустышка. Предназначен только для регистрации модуля.
Надо смотреть - что этот модуль подключает.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

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

Сообщение VirtUX » 03.05.2013 16:18:42

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


Дело в том, что даже пункта меню экспорта в PDF теперь нет. Да и в зависимостях пакета все тот же PowerPDF.
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

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

Сообщение alexs » 04.05.2013 15:42:40

Компонент называется lrCairoExport. Но что-то он ещё не работает... В винде, кстати, в итоге должно работать - только потребует libcairo-2.dll.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

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

Сообщение VirtUX » 06.05.2013 10:58:57

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

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

Сообщение ssadragon » 06.05.2013 12:14:17

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

..lazarus\components\lazreport\source\addons\cairoexport
Вроде оно!
ssadragon
постоялец
 
Сообщения: 148
Зарегистрирован: 03.12.2012 20:21:35

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

Сообщение VirtUX » 06.05.2013 16:54:02

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

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

Сообщение VirtUX » 22.05.2013 20:04:32

во вчерашнем SVN Lazarus cairoexport не установился из-за ошибки в перекрестных ссылках в uses LMessages и Messages (баг Lazarus). В общем так я и не смог посмотреть этот экспортер. Под текущим Lazarus тоже не собирается из-за зависимостей.
Все еще надеюсь, что под Lazarus есть возможность корректного экспорта в PDF...
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

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

Сообщение Little_Roo » 22.05.2013 22:21:22

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


А уже alexs напряг :( Подобная хня проявилась при установке его библиотеки RxLib
Ждем завтрева ????
Аватара пользователя
Little_Roo
энтузиаст
 
Сообщения: 638
Зарегистрирован: 27.02.2009 19:56:36
Откуда: Санкт-Петербург

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

Сообщение VirtUX » 03.06.2013 12:19:54

Продолжение:
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 10:52:19
Откуда: Крым, Алушта

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

Сообщение VirtUX » 20.06.2013 16:57:38

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

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

Сообщение grot » 05.08.2013 09:44:57

Посмотри :
- Morfik (качни - там есть их вывод в PDF (a-ля PowerPDF) ...)
- LibreOffice - он работает из Консоли - выводит PDF из чего угодно !
grot
новенький
 
Сообщения: 74
Зарегистрирован: 13.02.2010 16:33:03

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

Сообщение java73 » 05.06.2015 19:01:40

На windows 32 пакет Cairo очень нормально установился, скачал последние библиотеки GTK+ полным комплектом, кинул в system32 и теперь уапще без всяких проблем русский PDF получаю)))
java73
постоялец
 
Сообщения: 257
Зарегистрирован: 21.11.2013 09:08:10


Вернуться в Lazarus

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

Сейчас этот форум просматривают: Majestic-12 [Bot] и гости: 29

Рейтинг@Mail.ru