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

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

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

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

Сообщение jsa » 02.01.2022 09:28:02

Спасибо за ответ.
Но, не сработало.

Код: Выделить всё
uses  fpTTF, LazFileUtils;
...

procedure TFormMain.FormCreate(Sender: TObject);
var s: String;
begin
     s := SHGetFolderPathUTF8(20); // CSIDL_FONTS = 20

     if (s <> '') and (gTTFontCache.Count=0) then
        begin
        gTTFontCache.BuildFontCacheIgnoresErrors:=true;
        gTTFontCache.SearchPath.Add(s);
        gTTFontCache.BuildFontCache;
        end;   
...
end;      


Делал вывод значений
s = 'C:\Windows\Fonts'
gTTFontCache.Count = 0

Пути 'C:\Documents and Settings\{пользователь}\Local Settings\Microsoft\Windows\Fonts' в моей Win8x64 не существует вообще


в результате изменений нет, BOLD не устанавливается.

P.S. попробовал на Win10x64
там существует путь
'C:\Users\test\AppData\Local\Microsoft\Windows\Fonts'
но папка пуста
И соответсвенно
gTTFontCache.SearchPath.Add('C:\Users\test\AppData\Local\Microsoft\Windows\Fonts');
ничего не дает.
jsa
постоялец
 
Сообщения: 261
Зарегистрирован: 28.11.2017 13:46:04

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

Сообщение alexs » 03.01.2022 09:45:38

А в какую папку установлены новые шрифты?
Объект gTTFontCache как раз и должен содержать список всех доступных шрифтов с системе. И в момент формирования PDF именно из него берётся информация о шрифтах. Если шрифт не находится - то тогда подставляется Arial по умолчанию.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

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

Сообщение jsa » 11.01.2022 12:29:03

Все шрифты установлены в стандартное место
C:\Windows\Fonts
jsa
постоялец
 
Сообщения: 261
Зарегистрирован: 28.11.2017 13:46:04

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

Сообщение alexs » 12.01.2022 09:42:21

Смотри - там логика такая:
перед началом формирования PDF сначала формируется массив доступных шрифтов в объекте gTTFontCache
потом идёт формирование самого образа документа - требуемый для конкретной ячейки шрифт берётся из коллекции gTTFontCache. Если там он не находится - то подставляется Arial.
Соответственно в твоём случае требуемый шрифт не найден на первом этапе.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

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

Сообщение jsa » 13.01.2022 14:58:48

Да я услышал это.
Только не понимаю как это с наблюдениями согласуется.
Шрифт однозначно Times New Roman , а по твоей схеме получается он должен замениться на Arial
проверил из Редактора LazReport на предпросмотре шрифты жирные, а сохраняются предпросмотра тоже так же без Bold
на скриншоте слева окно предпросмотра, справа сохраненный файл открытый в FoxitReader, (причем сохранить можно как программной компонентой так и кнопкой в самом предпросмотре)
В окне предпросмотра шрифт жирные , в окне файл нет.
И тут я еще заметил, что и линия тоже зависит , не только шрифт!
У вас нет необходимых прав для просмотра вложений в этом сообщении.
jsa
постоялец
 
Сообщения: 261
Зарегистрирован: 28.11.2017 13:46:04

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

Сообщение alexs » 14.01.2022 15:10:40

Ну тут тогда надо отладчиком смотреть - что подставляется? В принципе там всё находится в модуле lr_e_fclpdf
Шрифт по умолчанию подбирается в TlrPdfExportFilter.SetupFonts;
Экспорт линий - TlrPdfExportFilter.DrawLine
Экспорт текста - TlrPdfExportFilter.DoMemoView
в ней шрифт подбирается - FCurFont:=FFontItems.AddItem(View.Font.Name, View.Font.Style);
А уже в TExportFonts.AddItem идёт поиск шрифта и если не находится - то шрфит по умолчанию.
Если не сложно - посмотри как работает AddItem и что подбирает.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

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

Сообщение jsa » 28.06.2023 17:00:03

Установил Lazarus 2.2.6
При установке компонент LazReport была ругань на unit lr_e_pdf
В процедуре procedure TfrTNPDFExportFilter.OnText(X, Y: Integer; const Text: string;
пришлось закомментировать строки
//PRTAnno.SubType := asLink;
//PRTAnno.Action.URI := memo.URLInfo;
Только тогда они установились.

В новом Lazarus жирность шрифта работает в экспорте в PDF.
В файле выглядит так же как в Дизайнере макета на предпросмотре

P.S.
Поставил новый Lazarus потому что столкнулся с другой проблемой.
Опишу в отдельной теме. viewtopic.php?f=5&t=43588
jsa
постоялец
 
Сообщения: 261
Зарегистрирован: 28.11.2017 13:46:04

Пред.

Вернуться в Lazarus

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

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

Рейтинг@Mail.ru