【问题标题】:Is it possible to install fonts on an Azure App Service?是否可以在 Azure 应用服务上安装字体?
【发布时间】:2016-08-09 18:44:40
【问题描述】:

我们正在使用 MigraDoc/PDFsharp GDI+,它依赖于将字体安装到系统中以进行渲染。我们尝试过嵌入字体,但 GDI+ 版本的 MigraDoc 似乎不支持这一点。

尝试将此组件移动到 Azure 应用服务时,它找不到字体。有没有办法将字体“安装”到应用服务本地,以便 GDI 可以看到它们?

【问题讨论】:

  • PDFsharp 不依赖于将字体安装到系统中,但字体支持在 1.32 版和 1.50 版之间发生了变化。使用 XPrivateFontCollection 应该适用于版本 1.32。如我的回答中所述,我将使用 1.50 beta 3 或更高版本的 WPF 构建。

标签: azure fonts azure-web-app-service pdfsharp migradoc


【解决方案1】:

MigraDoc 使用 PDFsharp 生成 PDF 文件,并且 PDFsharp 可以使用来自嵌入资源或应用程序读取的文件的字体。

我会使用 PDFsharp/MigraDoc 1.50 或更高版本的 WPF 版本,并使用 IFontResolver 接口。

如果适合您的需要,您可以使用通用 EZFontResolver 实现:
http://forum.pdfsharp.net/viewtopic.php?f=8&t=3244

【讨论】:

  • 不幸的是,我们不能在 Azure Web 应用程序中使用 GDI,如答案所示。但是,我们依赖 GDI,因为它比 WPF 快 40% 左右。您知道这种性能差异吗?我们是否可以采取任何措施来缓解这种差异?由于我们生成的 PDF 数量众多,性能是我们的首要任务。
  • “快 40% 左右”是否适用于版本 1.50 beta 3b 或者您是否使用版本 1.32 或更早版本进行了测试?如果您要为 GDI+ 比 WPF 快 40% 左右的测试用例提供 MCVE(使用版本 1.50 beta 3b),那么我们可以看看这种差异的来源。 stackoverflow.com/help/mcve
  • 有 1.50 的 nuget 包吗?我只能找到不包含 migradoc 的 pdfsharp 1.50。
  • 有包含 MigraDoc 的 NuGet 包。 WPF 包:nuget.org/packages/PDFsharp-MigraDoc-WPF/1.50.4000-beta3b 在 Visual Studio 中勾选“包含预发布”。
【解决方案2】:

这有点晚了 - 但迟到总比没有好!

我发现这实际上很容易 - 我们都知道怎么做!

web.config 添加到应用服务的 WWWROOT 添加以下内容

你可能不需要 部分,除非你想要 CORS

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.webServer>
        <directoryBrowse enabled="false" />
        <httpProtocol>
            <customHeaders>
                <add name="Access-Control-Allow-Origin" value="*" />
            </customHeaders>
        </httpProtocol>
        <staticContent>
            <mimeMap fileExtension=".eot" mimeType="application/vnd.ms-fontobject" />
            <mimeMap fileExtension=".ttf" mimeType="application/octet-stream" />
            <mimeMap fileExtension=".svg" mimeType="image/svg+xml" />
            <mimeMap fileExtension=".woff" mimeType="application/font-woff" />
            <mimeMap fileExtension=".woff2" mimeType="application/font-woff2" />
        </staticContent>
    </system.webServer>
</configuration>

【讨论】:

  • 我没有在 PDF 活动上尝试过这个 - 理论上是一样的
【解决方案3】:

您可以使用应用服务上的 Windows 容器来安装自定义字体。方法如下:

https://docs.microsoft.com/en-us/azure/app-service/app-service-web-tutorial-windows-containers-custom-fonts

在应用服务上开始使用 Windows 容器:

https://docs.microsoft.com/en-us/azure/app-service/app-service-web-get-started-windows-container

【讨论】:

    【解决方案4】:

    据我所知,依赖 GDI API 的组件可能无法在 Azure Web APP 上运行。我们可以在以下位置找到这个已知问题:https://social.msdn.microsoft.com/Forums/en-US/6ed5c738-390a-4ca7-81d0-370124a4fc88/azure-websites-faq?forum=windowsazurewebsitespreview。目前,请尝试改用 Azure Web 角色或 Azure VM。请在 Azure 反馈论坛上投票this idea

    【讨论】:

      猜你喜欢
      • 2011-01-04
      • 1970-01-01
      • 2021-12-15
      • 1970-01-01
      • 1970-01-01
      • 2016-11-18
      • 1970-01-01
      • 1970-01-01
      • 2021-12-02
      相关资源
      最近更新 更多