65.9K
CodeProject 正在变化。 阅读更多。
Home

将 ASP.NET 应用程序迁移到容器中的挑战 #2 – Windows 字体

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2024 年 3 月 4 日

CPOL

4分钟阅读

viewsIcon

2842

将 Windows 字体移植到 Linux。

引言

在最近的一个项目中,有一个将托管在 Windows 上的现有 ASP.NET 应用程序迁移到 Linux Docker 容器的要求。在整个迁移过程中,出现了许多挑战,并且花费了大量时间来完成迁移。在这篇文章以及后续同类标题的文章中,我将简要概述遇到的一些关键挑战。其中一个挑战是 Windows 字体,这篇文章就专门介绍这个方面。

简而言之

在目标运行时容器中,在运行应用程序入口点之前,请在 Dockerfile 中添加以下几行以安装 Microsoft Core Fonts。

RUN apt update
RUN apt -y install fontconfig
RUN apt -y install ttf-mscorefonts-installer
RUN fc-cache -f

一点历史

早在 1996 年,微软就开始了“Web 核心字体”项目,旨在为互联网及其 Windows 操作系统创建一套标准的字体。这套字体包括 Arial、Comic Sans MS、Courier New、Times New Roman 等字体。多年来,这些字体在微软 Windows 和 Office 用户中广受欢迎。不幸的是,它们并没有随 Linux 一起提供。

Microsoft Core Fonts

在将 Windows ASP.NET Core 应用程序移植到 Linux 时,如果您使用了 Microsoft Windows 的某个核心字体,您的应用程序可能会遇到问题。幸运的是,在 Linux 上安装 Microsoft Office 字体并非难事。请按照以下步骤在 Linux 上下载并安装 Microsoft Core Fonts。

打开终端窗口,输入以下命令刷新您的软件包列表。

apt update

现在,使用以下命令安装 `fontconfig` 实用程序。

apt install fontconfig

(可选) 您可以通过执行以下命令来列出已安装的字体。

fc-list

执行后,您应该会看到类似以下的输出。

/usr/share/fonts/truetype/dejavu/DejaVuSerif-Bold.ttf: DejaVu Serif:style=Bold
/usr/share/fonts/truetype/dejavu/DejaVuSansMono.ttf: DejaVu Sans Mono:style=Book
/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf: DejaVu Sans:style=Book
/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf: DejaVu Sans:style=Bold
/usr/share/fonts/truetype/dejavu/DejaVuSansMono-Bold.ttf: DejaVu Sans Mono:style=Bold
/usr/share/fonts/truetype/dejavu/DejaVuSerif.ttf: DejaVu Serif:style=Book

从上面的列表中可以看出,列表中没有可用的 Windows 字体。

(可选) 您可以通过执行以下命令来测试任何字体是否可用。

fc-match Arial

您可以看到类似以下的输出,表示与模式“Arial”匹配的字体,而在我们的情况下,它是不可用的。

DejaVuSans.ttf: "DejaVu Sans" "Book"

现在,通过执行以下命令安装“Windows Fonts Installer”软件包。

apt install ttf-mscorefonts-installer

接下来,通过执行以下命令刷新并重建字体缓存。

fc-cache -f -v

(可选) 再次通过执行以下命令查看字体列表。

fc-list

这将输出一个非常长的可用字体列表(为清晰起见,输出已截断)。

/usr/share/fonts/truetype/msttcorefonts/Times_New_Roman_Italic.ttf: Times New Roman:style=Italic,ursive,kurzíva,kursiv,Πλάγια,Kursivoitu,Italique,Dőlt,Corsivo,Cursief,kursywa,Itálico,Курсив,İtalik,Poševno,nghiêng,Etzana
/usr/share/fonts/truetype/msttcorefonts/georgiaz.ttf: Georgia:style=Bold Italic,Negreta ursive,tučné kurzíva,fed kursiv,Fett Kursiv,Έντονα Πλάγια,Negrita Cursiva,Lihavoitu Kursivoi,Gras Italique,Félkövér dőlt,Grassetto Corsivo,Vet Cursief,Halvfet Kursiv,Pogrubiona kursywa,Negrito Itálico,Полужирный Курсив,Tučná kurzíva,Fet Kursiv,Kalın İtalik,Krepko poševno,Lodi etzana

(可选) 再次尝试通过执行以下命令匹配 Arial 字体。

fc-match Arial

现在您可以看到以下匹配结果,这在我们的情况下表示成功。

Arial.ttf: “Arial” “Regular”

您已成功在 Linux 机器上安装了 Microsoft Core Fonts,太棒了!您可以立即在应用程序中使用它们了!

Calibri 的高昂代价!探索昂贵的解决方案

不幸的是,上述解释并未涵盖 Calibri 的安装,因为它不属于核心软件包。这款字体于 2007 年在 Microsoft Office 中推出,并非免费提供。幸运的是,我们有两种(或三种!)选择可以考虑。

选择 1:Carlito,真正的 bargain!

您可以安装 Carlito,它是由 Google 设计的免费字体,并且在**拉丁文、希腊文和西里尔文**字形方面与 Calibri 非常相似。

要安装 Carlito,请执行以下命令。

apt install -y fonts-crosextra-carlito

选择 2:Calibri,必胜!

不建议为拉丁文以外的字形使用 Carlito。但是,有一种合法的方法可以获得 Calibri,即安装免费提供的旧版仅供查看的 PowerPoint。但请注意,此选项是有代价的,因为它需要总共约 60MB 的软件包大小,并涉及额外的挑战步骤。

首先,请仔细按照以下步骤操作。

安装 `wget` 工具以下载所需的应用程序。

apt install wget

下载 Microsoft PowerPoint Viewer(总长度约 60M)。

wget https://archive.org/download/PowerPointViewer_201801/PowerPointViewer.exe

安装 `cabextract` 工具以解压缩下载的 PowerPoint 软件包。

apt install cabextract

现在,使用以下命令解压缩软件包。

cabextract PowerPointViewer.exe -F ppviewer.cab

字体位于已解压缩的 `CAB` 文件中,创建一个用于存储字体的文件夹,然后将 TTF 和 TTF 文件提取到新目录。

mkdir -p ~/.fonts/ppviewer/
cabextract ppviewer.cab -F '*.TTC' -d ~/.fonts/ppviewer/
cabextract ppviewer.cab -F '*.TTF' -d ~/.fonts/ppviewer/

您可以看到以下输出,这在我们的情况下表示成功。

Extracting cabinet: ppviewer.cab
  extracting /root/.fonts/ppviewer//CAMBRIA.TTC
  extracting /root/.fonts/ppviewer//MEIRYO.TTC
  extracting /root/.fonts/ppviewer//MEIRYOB.TTC
All done, no errors.
Extracting cabinet: ppviewer.cab
  extracting /root/.fonts/ppviewer//CALIBRI.TTF
  extracting /root/.fonts/ppviewer//CALIBRIB.TTF
  extracting /root/.fonts/ppviewer//CALIBRII.TTF
(truncated)

现在,您可以通过执行以下命令来查看已安装字体的列表。

fc-list

此外,您可以通过执行以下命令匹配 Calibri 或 Microsoft 字体中的任何其他字体。

fc-match Calibri

输出为

CALIBRI.TTF: "Calibri" "Regular"

完成后,您可以通过删除下载的软件包以及已解压缩的 CAB 文件来进行清理。

rm PowerPointViewer.exe
rm ppviewer.cab

Windows Vista 字体安装程序

通过使用“Windows Vista Fonts Installer”脚本,可以更快地执行选项 2 中的相同步骤,该脚本在此处有完整的解释。

卸载 Microsoft Core Fonts

最后,要卸载 Microsoft Core Fonts,您可以使用以下脚本。执行后,请务必刷新并清除字体缓存。

apt autoremove ttf-mscorefonts-installer --purge

然后,我们到了结尾!

“尽管如此沮丧,却没有人放弃。”所以,请保持微笑,保持好奇心,并记住知识在共享时呈指数级增长。

祝您愉快!

历史

  • 2024 年 3 月 4 日:初始版本
© . All rights reserved.