Laravel Vapor + Docker,DomPDF 不渲染自定义字体,在本地工作,而不是在登台上

问题描述 投票:0回答:1

我在使用 DomPDF 和 Laravel Vapor 获取自定义字体时遇到一些问题。 (本地字体有效)

这些是我的 CSS 字体定义(字体存储在 public/fonts 中)

@font-face {
            font-family: caveat;
            font-style: normal;
            font-weight: normal;
            src: url('{{ public_path('fonts/caveat.ttf') }}') format('truetype');
        }

        @font-face {
            font-family: Arial;
            font-style: normal;
            font-weight: normal;
            src: url('{{ public_path('fonts/Arial.ttf') }}') format('truetype');
        }

这是我的dockerfile

FROM laravelphp/vapor:php81

RUN apk add imagemagick imagemagick-dev php81-pecl-imagick \
&& pecl install imagick \
&& docker-php-ext-enable imagick

COPY . /var/task

本地这些字体

Arial
CaveAt
在 PDF 中渲染得很好。但是,部署到暂存后,PDF 中的字体会回退为
Helvetica

我可能需要向 dockerfile 添加一些命令才能使其正常工作。我的问题是:什么命令?

php laravel pdf dompdf laravel-vapor
1个回答
0
投票

关于vapor的事情是公共目录中的所有资产文件都将被移动到vapor创建的s3存储桶中,以将其与cloudfront一起用作CDN。因此,除非您在 Vapor 配置文件中的公共文件中定义文件,否则您无法在域中找到公共文件。

因此您有两种选择来解决此问题:

  1. 使用云端(推荐)。
  2. 将文件移至公共并更改资产 URL。

我强烈建议不要使用第二个选项,因为它会导致性能不一致的问题,因为

lambda function
冷启动会使网站变慢,因此花费更多的钱。

Cloudfront 也是一个 CDN,因此很高兴将其用于资产文件。

要使用 cloudfront 修复它,只需删除 url 中的

public_path
并检查该文件是否确实存在于您的存储桶中。

更多信息: https://docs.vapor.build/projects/deployments.html#urls-within-css

© www.soinside.com 2019 - 2024. All rights reserved.