jbtronics/dompdf-font-loader-bundle

一个用于在缓存预热时轻松加载自定义字体(dompdf)的symfony插件

v1.1.2 2024-06-06 17:42 UTC

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 或更高版本

安装

  1. 安装插件 composer require jbtronics/dompdf-font-loader-bundle
  2. 在您的 config/bundles.php 中启用插件(通常由Symfony flex自动完成)
  3. 将您要使用的字体TTF文件放置在Web服务器可以访问的目录中(最好放在您的项目文件夹中某个位置)
  4. 添加一个配置文件 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

致谢