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





0/5 (0投票)
将 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 日:初始版本