Шрифты, устанавливаемые на компьютер вместе с продуктами Microsoft, плотно вошли в нашу жизнь. Их использование в документах – это давно уже не дань моде или привычке. Это требование, закрепленное в наших государственных стандартах. Например, шрифт Times New Roman упоминается в "инструкции по оформлению документов с использованием компьютерных технологий в органах государственного управления и иных государственных организациях". Дистрибутивы Linux не поставляется с проприетарными шрифтами Microsoft. Но, тогда как заставить исполняемую под Linux программу создавать в FastReport документы, соответствующие высоким государственным стандартам?
Получить TrueType шрифты Microsoft на законных основаниях можно установив из официального репозитория Linux пакет msttcorefonts. Например, на Ubuntu для этого необходимо выполнить команду:
О причине несовпадения можно догадаться если заглянуть внутрь этих файлов. В файле созданном под Windows шрифты соответствуют шаблону FastReport, а в файле созданном под Linux нет:
Будет еще хуже, если при экспорте возникнет желание уменьшить размер PDF-файла за счет отключения встраивания шрифтов. Например, тестовый файл с первого рисунка cо встроенными шрифтами – 323 КБ, а без них – 13.4 КБ. Разница существенная. Это значит желание возникло. Отключаем:
Создаем файл SubFonts.xml в папке программы под Linux:
Получить TrueType шрифты Microsoft на законных основаниях можно установив из официального репозитория Linux пакет msttcorefonts. Например, на Ubuntu для этого необходимо выполнить команду:
Главное в процессе установки согласиться с лицензионным соглашением (EULA) компании Microsoft. Если операционная система сразу не увидела установленные шрифты, то необходимо обновить кэш шрифтов:sudo apt-get install ttf-mscorefonts-installer
Нужные шрифты мы установили. Теперь генерируем отчет в FastReport FMX и экспортируем его в документ формата PDF. Как это делать под Linux я писал ранее (воспользуемся той же самой тестовой программой). Сравним PDF файлы, созданные тестовой программой под Windows: и под Linux: Как видите, они очень похожи. Но 100 процентного совпадения нет. Почему?sudo fc-cache -f -v
О причине несовпадения можно догадаться если заглянуть внутрь этих файлов. В файле созданном под Windows шрифты соответствуют шаблону FastReport, а в файле созданном под Linux нет:
Шрифт в шаблоне | Шрифт в PDF под Windows | Шрифт в PDF под Linux |
Arial | Arial | Liberation Sans |
Times New Roman | Times New Roman | Liberation Serif |
Courier New | Courier New | Liberation Mono |
Verdana | Verdana | DejaVu Sans |
frxPDFExport.EmbeddedFonts := False;Отключаем и получаем новую проблему. Созданный под Linux PDF файл без встроенных шрифтов может не открыться под Windows, если не установлены дополнительные шрифты: Итак, нужные шрифты в Linux у нас установлены, но FastReport FMX при создании документа их не использует. Очередной "Почему?". Ответ на него подскажет модуль FMX.frxLinuxFonts.pas:
unit FMX.frxLinuxFonts; ... const DefFontsSubs: String = '<?xml version="1.1" encoding="utf-8"?>' + '<SUBFONTS Clear="True">' + '<FONT NAME="Arial" SUBNAME="Liberation Sans"/>' + '<FONT NAME="MS Sans Serif" SUBNAME="Liberation Sans"/>' + '<FONT NAME="Arimo" SUBNAME="Liberation Sans"/>' + '<FONT NAME="Times New Roman" SUBNAME="Liberation Serif"/>' + '<FONT NAME="Tinos" SUBNAME="Liberation Serif"/>' + '<FONT NAME="Courier New" SUBNAME="Liberation Mono"/>' + '<FONT NAME="Tahoma" SUBNAME="DejaVu Sans"/>' + '<FONT NAME="Verdana" SUBNAME="DejaVu Sans"/>' + '</SUBFONTS>'; XMLConfName: String = 'SubFonts.xml'; ... constructor TfrxFontsList.Create; ... begin ... fName := ExtractFilePath(ParamStr(0)) + XMLConfName; if FileExists(fName) then FontCollection.LoadSubstitutionConfig(fName); ...Для обеспечения работоспособности программы разработчики FastReport реализовали механизм подмены шрифтов Windows на похожие шрифты Linux. Для особо придирчивых разработчиков и/или пользователей они предоставили возможность самим управлять подменой шрифтов через конфиг файл в формате XML. Думаю, что структура этого конфиг файла понятна. Скажу только, о теге "SUBFONTS". Если его атрибуту "Clear" присвоить значение "False" или не присвоить ничего, то при загрузке из файла существующие значения подмены не удаляются, а будут заменены или дополнены новыми.
Создаем файл SubFonts.xml в папке программы под Linux:
Запускам программу, открываем полученный PDF файл и наслаждаемся 100 процентным совпадением документов созданных под Windows и под Linux.<?xml version="1.1" encoding="utf-8"?> <SUBFONTS> <FONT NAME="Arial" SUBNAME="Arial"/> <FONT NAME="Times New Roman" SUBNAME="Times New Roman"/> <FONT NAME="Courier New" SUBNAME="Courier New"/> <FONT NAME="Tahoma" SUBNAME="Tahoma"/> <FONT NAME="Verdana" SUBNAME="Verdana"/> </SUBFONTS>
Не подскажите, работают ли в FastReport.FMX под Linux HTML теги в тексте? Ну типа <b> или <u>. А то в VCL разрабы отказались от реализации данного функционала под Linux :(
ОтветитьУдалитьРаботает, если AllowHTMLTags = True
Удалить