LazReport TlrPdfExportFilter принцип работы со шрифтами?

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

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

LazReport TlrPdfExportFilter принцип работы со шрифтами?

Сообщение jsa » 08.10.2020 11:42:16

Здравствуйте какой в TlrPdfExportFilter принцип работы со шрифтами?
Столкнулся с тем, что документ сохраненный в PDF из fastreport 5.* который встроен в один проект и документ сделанный с помощью LazReport TlrPdfExportFilter в разных просмотрщиках открывается по разному.
файлы PDF из LazReport открывается во всех просмотрщиках (по умолчанию) на смартфонах разных производителей (Asus, Samsung, Xiaomi, iPhone)
а вот такой же отчет сохраненный в PDF из FastReport открывается нормально только в iPhone , на Андроидах букв нет, есть только символы (точки , слэши, двоеточия и т.д.)
А Asus даже ругнулся на отсутсвие шрифтов Arial

Я так понимаю LazReport использует какие-то очень распространенные шрифты, поэтому с файлом нет проблем. Или вообще шрифты в файл встраиваются?
Как вообще это работает? Есть опыт?
jsa
постоялец
 
Сообщения: 282
Зарегистрирован: 28.11.2017 13:46:04

Re: LazReport TlrPdfExportFilter принцип работы со шрифтами?

Сообщение Снег Север » 08.10.2020 12:56:46

В формате PDF есть два варианта - текст вставлен как изображение, созданное экспортером, и текст представлен символами определенного в документе шрифта. Просмотрщик пытается использовать или указанный шрифт, или подставить на его место "похожий". Если это "похожий" не имеет нужной кодовой страницы, выходит абракадабра.
Варианты борьбы - 1) использовать только самые стандартные юникодовские шрифты 2) печатать в картинку, а картинку уже конвертировать в PDF.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 3039
Зарегистрирован: 27.11.2007 16:14:47

Re: LazReport TlrPdfExportFilter принцип работы со шрифтами?

Сообщение alexs » 08.10.2020 14:42:53

Снег Север
Добавлю свои 5 копеек. В PDF можно встраивать либо весь шрифт, либо только используемые глифы.
jsa
Когда делал TlrPdfExportFilter столкнулся с тем, что если не вставлять веcь шрифт, а только используемые глифы - как раз и проявляется описанный вами эффект. Потому там встраивается весь шрифт.
В FR по умолчанию, кажется, используется встраиваение только используемых глифов.
Размер кончено меньше - но проблема есть.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: LazReport TlrPdfExportFilter принцип работы со шрифтами?

Сообщение jsa » 08.10.2020 14:52:22

alexs писал(а):Когда делал TlrPdfExportFilter столкнулся с тем, что если не вставлять веcь шрифт, а только используемые глифы - как раз и проявляется описанный вами эффект. Потому там встраивается весь шрифт.

Я правильно понимаю, что TlrPdfExportFilter это твоя разработка?
jsa
постоялец
 
Сообщения: 282
Зарегистрирован: 28.11.2017 13:46:04

Re: LazReport TlrPdfExportFilter принцип работы со шрифтами?

Сообщение alexs » 09.10.2020 11:05:17

jsa писал(а):Я правильно понимаю, что TlrPdfExportFilter это твоя разработка?

Ну, надеюсь, помидорами кидать не будешь :-)
Там в качестве генератора pdf использую штатный fpc-pdf.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: LazReport TlrPdfExportFilter принцип работы со шрифтами?

Сообщение jsa » 09.10.2020 12:41:44

Да нет, хочу выразить благодарность. Твоя работа когда-то, очень помогла мне сейчас, облегчить работу сотрудников. Спасибо.
jsa
постоялец
 
Сообщения: 282
Зарегистрирован: 28.11.2017 13:46:04

Re: LazReport TlrPdfExportFilter принцип работы со шрифтами?

Сообщение Tolik » 27.10.2020 16:24:48

Доброго дня, может ни совсем в тему но по выгрузке в pdf. Возникает проблема с QR при экспорте в pdf он игнорирует его. Возможно решен данный момент? Или может я что то ни учел при построение отчета?
Tolik
незнакомец
 
Сообщения: 3
Зарегистрирован: 01.04.2019 16:56:49

Re: LazReport TlrPdfExportFilter принцип работы со шрифтами?

Сообщение jsa » 24.12.2021 08:12:56

День добрый.
Поднимаю тему.
Почему-то в экспортированном в PDF отчете не срабатывает установка на жирные шрифты.
в Дизайнере макета на предпросмотре шрифты отображаются жирными
LazReport_Preview.png

а в файле уже нет.
LazReport_pdf.png


пробовал Arial и Time New Roman
Экспорт делаю так
Код: Выделить всё
FormMain.frReport_restests.ExportTo(TlrPDFExportFilter, fname);

Может нужна какая-то настройка компонент?

Добавлено спустя 24 минуты 14 секунд:
Еще странности и интересности.
Все Memo лежат на бендах в данном макете.
А в одном тестовом макете бендов нет, и все шрифты в Memo выгружаются корректно, там где Bold там жирые , там где нет то нет.
Решил проверить в целевом макете, бросил Memo на Page (не на бенд) сделал шрифт жирным
И в выгруженном pdf вообще весь текст стал жирным.

потом положил еще один Memo рядом и попробовал различные комбинации.
Т.е. получается, что при выгрузке Bold на шрифтах считывается только для объектов вне бендов.
И первая установка Bold становится установкой по умолчанию для всех объектов и на бендах и вне бендов.

Т.е. видимо это ошибка в компоненте.

Т.е. при наличии бендов на странице, всегда есть проблема со шрифтами, когда бендов нет, то и проблемы нет
У вас нет необходимых прав для просмотра вложений в этом сообщении.
jsa
постоялец
 
Сообщения: 282
Зарегистрирован: 28.11.2017 13:46:04

Re: LazReport TlrPdfExportFilter принцип работы со шрифтами?

Сообщение alexs » 24.12.2021 12:05:32

Проверь с другими шрифтами.
Просто укажи для мемо другой шрифт.
Я проверил сейчас с Liberation Sans - всё норм.
Там есть одна тонкость что старые виндовые шрифты могут не верно обрабатываться.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: LazReport TlrPdfExportFilter принцип работы со шрифтами?

Сообщение jsa » 24.12.2021 15:59:52

попробовал, ситуация не изменилась. Да и сам шрифт в винде выглядит не очень.
слова "Область исследования", "Номер карты"
предпросмотр в дизайнере
LazReport_preview_02.png

выгрузка в файл
LazReport_pdf_02.png


Добавлено спустя 33 минуты 15 секунд:
В общем диагноз такой.
Не передается весь Style в PDF и именно при наличии на Page бендов
У вас нет необходимых прав для просмотра вложений в этом сообщении.
jsa
постоялец
 
Сообщения: 282
Зарегистрирован: 28.11.2017 13:46:04

Re: LazReport TlrPdfExportFilter принцип работы со шрифтами?

Сообщение alexs » 24.12.2021 16:33:23

Тогда нужен пример.
У меня были проблемы со стандартными Arial и Time New Roman - fcl-pdf не хочет их пережевывать хорошо.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: LazReport TlrPdfExportFilter принцип работы со шрифтами?

Сообщение jsa » 24.12.2021 18:34:50

пример это файл lrf ?
jsa
постоялец
 
Сообщения: 282
Зарегистрирован: 28.11.2017 13:46:04

Re: LazReport TlrPdfExportFilter принцип работы со шрифтами?

Сообщение alexs » 27.12.2021 15:31:48

ну да
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: LazReport TlrPdfExportFilter принцип работы со шрифтами?

Сообщение jsa » 28.12.2021 09:35:42

Кажется я ошибся с оценкой происходящего.
Без бендов тоже проблема со шрифтами.
в архиве два макета (без бендов) со шрифтами Liberation Sans и Times_New_Roman
Там только тексты, поля выборки из базы убрал.
результирующий пример только для Liberation Sans потому что для Таймс файл получился более 600Кб и тут не прикрепляется. Но и в нем Bold не отрабатывается
У вас нет необходимых прав для просмотра вложений в этом сообщении.
jsa
постоялец
 
Сообщения: 282
Зарегистрирован: 28.11.2017 13:46:04

Re: LazReport TlrPdfExportFilter принцип работы со шрифтами?

Сообщение alexs » 29.12.2021 15:50:22

Проблема именено в виндовой версии.
В лине поведение нормально - а вот под виндой - не находится информация о шрифте. Сейчас смотрю под win10x64.

Добавлено спустя 43 минуты 26 секунд:
Понятно
Ручная установка шрифтов в винде стала выглядеть по другому - не так как раньше
шрифты стали в папке C:\Documents and Settings\alexs\Local Settings\Microsoft\Windows\Fonts
Надо читать документацию - какая константа отвечает за эту папку в винде.
Пока чтобы быстро проблему решить - всего лишь надо добавить эту папку в список обрабатываемых каталогов для объекта gTTFontCache

После добавления кода:
Код: Выделить всё
procedure TForm1.FormCreate(Sender: TObject);
  procedure InitFonts;
  procedure CreateFontDirList;
  var
    s: String;
  begin
    s := SHGetFolderPathUTF8(20); // CSIDL_FONTS = 20
    if s <> '' then
      gTTFontCache.SearchPath.Add(s);
    gTTFontCache.SearchPath.Add('C:\Documents and Settings\alexs\Local Settings\Microsoft\Windows\Fonts');
  end;
  var
    C: Integer;
  begin
    if gTTFontCache.Count = 0 then
    begin
      gTTFontCache.BuildFontCacheIgnoresErrors:=true;
      CreateFontDirList;
      gTTFontCache.BuildFontCache;
    end;
  end;
begin
  InitFonts;
end;


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

След.

Вернуться в Lazarus

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 26

Рейтинг@Mail.ru