jbtronics / dompdf-font-loader-bundle
一个用于在缓存预热时轻松加载自定义字体(dompdf)的symfony插件
Requires
- php: ^8.1
- ext-json: *
- dompdf/dompdf: ^1.0.0|^2.0.0|^3.0.0
- symfony/finder: ^6.0|^7.0
- symfony/framework-bundle: ^6.0|^7.0
Requires (Dev)
- phpunit/phpunit: ^9.5
- roave/security-advisories: dev-latest
- symfony/phpunit-bridge: ^6.0
This package is auto-updated.
Last update: 2024-09-06 18:32:18 UTC
README
此插件提供了一种简单的方法,在symfony项目中加载/安装dompdf库(https://github.com/dompdf/dompdf)所选择字体的字体。此插件提供在缓存预热时按程序或自动加载字体族的功能。您可以使用字体名称和字体文件路径指定每个字体族,或者让插件自动发现目录中的所有字体。
功能
- 提供字体族简单安装的服务
- 在配置文件中配置字体族,缓存预热时将自动加载
- 自动发现配置目录中的所有字体
需求
- Symfony 6
- PHP 8.1 或更高版本
安装
- 安装插件
composer require jbtronics/dompdf-font-loader-bundle
- 在您的
config/bundles.php
中启用插件(通常由Symfony flex自动完成) - 将您要使用的字体TTF文件放置在Web服务器可以访问的目录中(最好放在您的项目文件夹中某个位置)
- 添加一个配置文件
config/packages/jbtronics_dompdf_font_loader.yaml
,其内容如下(并根据您的需要修改)
配置
dompdf_font_loader: # Set this to true to enable the automatic font loading on cache warmup, without it you have to load the fonts # manually via the ConfiguredFontsInstaller service auto_install: true # You can specify font families here manually fonts: my_font: # The name of the font family (used to access it in dompdf later) # A font family consists of up to four font files (normal, bold, italic, bold_italic) normal: "%kernel.project_dir%/assets/fonts/my_font.ttf" bold: "%kernel.project_dir%/assets/fonts/my_font_bold.ttf" italic: "%kernel.project_dir%/assets/fonts/my_font_italic.ttf" bold_italic: "%kernel.project_dir%/assets/fonts/my_font_bold_italic.ttf" # But only the normal font file is required, the others can be omitted unifont: normal: "%kernel.project_dir%/assets/fonts/unifont.ttf" # Autodiscover allows you to specify directories, where all fonts will be loaded automatically autodiscovery: # Each of this directory will be scanned for font files paths: - "%kernel.project_dir%/assets/fonts" - "%kernel.project_dir%/vendor/fonts/package/ttfs" exclude_patterns: # You can exclude certain patterns from the autodiscovery if you want - "exclude_this_font.ttf"
字体和自动发现密钥都是可选的,但至少需要其中一个来加载字体。
使用方法
当您已启用 auto_install
选项时,您不需要做任何事情,字体将在缓存预热时自动加载(当运行 php bin/console cache:clear
时)。插件将复制字体文件到dompdf字体目录,创建字体度量并注册到dompdf库中。
自动发现
自动发现机制将扫描配置的目录中的TTF文件,并将它们注册为具有字体文件名称的字体族。它还尝试根据后缀检测字体类型:_bold
或 _b
被检测为粗体字体,_italic
或 _i
被检测为斜体字体,以及 _bold_italic
或 _bi
被检测为粗斜体。因此,my_font_bold.ttf
将被注册为 my_font
字体族的粗体字体,依此类推,而 my_font.ttf
将被注册为 my_font
字体族的标准字体。
原则上dompdf应该能够使用OTF文件,然而在我的测试中它没有工作,所以默认情况下自动发现仅检测TTF文件。您可以通过 autodiscovery.file_pattern
选项更改检测的文件类型。
指定DOMPDF字体位置
Dompdf有自己的字体目录,其中存储字体文件和度量。这是通过在dompdf对象上按实例配置的,使用 set_option('fontDir', $path)
方法。为了指定此插件使用的dompdf实例的字体目录,您必须装饰 DompdfFactoryInterface
并在 create()
方法中配置对象
#[AsDecorator(decorates: DompdfFactoryInterface::class)] class MyDompdfFactory implements DompdfFactoryInterface { public function create(): Dompdf { return new Dompdf(['fontDir' => '%kernel.project_dir%/var/dompdf/fonts']); } }
手动字体加载/安装
此插件提供了 DompdfFontLoader
服务,可用于手动安装字体族。您可以使用 installFontFamily()
方法安装单个字体族,或者使用 autodiscoverAndInstallFonts()
方法安装文件夹中找到的所有字体。
许可
此插件受MIT许可证的许可。有关详细信息,请参阅LICENSE
致谢
- dompdf
- 此插件受官方dompdf util脚本的启发load_font.php