delphi 在TWebBrowser中呈现自定义字体时出现问题

vsaztqbk  于 2023-05-22  发布在  其他
关注(0)|答案(1)|浏览(282)

我使用TWebBrowser组件来呈现TinyMCE富文本编辑器。
这很好用,但是,我发现TinyMCE编辑器中的一些字体没有按照它们应该的方式呈现。
这是字体在另一个浏览器中的呈现方式:

这是TWebBrowser如何呈现它们:

TinyMCE编辑器在我们的一个服务器上,但字体是从亚马逊的云存储中下载的。
我不明白为什么这个TWebBrowser不能正确地呈现字体。
是否有方法可以使用OnDownloadBegin/OnDownloadComplet方法查看字体下载是否失败?
我做了一个小的HTML例子

<!DOCTYPE html>
<html>
    <head>
        <link rel="stylesheet" href="https://htmleditor-fonts.s3.eu-central-1.amazonaws.com/NA/NA.css">
        <style>    
            @font-face {
              font-family: 'N-Bold';
              src: url('http://htmleditor-fonts.s3.eu-central-1.amazonaws.com/NA/Narobial-Bold.ttf') format('truetype');
            }
            p.nb    { font-family: N-Bold }
            p.nb2   { font-family: Narobial-Bold }
        </style>
    </head>
    <body>
        <p>This is a normal paragraph.</p>
        <p class="nb">If this is bold I've successfully downloaded the TTF.</p>
        <p class="nb2">If this is bold I've successfully downloaded the CSS and the TTF.</p>
    </body>
</html>

链接的CSS文件看起来像这样:

@font-face {
  font-family: 'Narobial-Bold';
  src: url('Narobial-Bold.ttf') format('truetype');
}

和一个小的 Delphi 项目来加载这个HTML

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, OleCtrls, SHDocVw;

type
  TForm1 = class(TForm)
    WebBrowser1: TWebBrowser;
    procedure FormShow(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormShow(Sender: TObject);
begin
  WebBrowser1.Navigate(url to the html example);
end;

end.

这是 Delphi 和另一个浏览器(本例中为Mozilla Firefox)的输出:

jqjz2hbq

jqjz2hbq1#

最终解决这个问题,需要双管齐下。
主要问题是组件使用的基础Internet Explorer 7。此浏览器不支持我试图显示的TTF字体。
较新版本的IE支持WOFF字体,因此我切换了字体类型,然后使用此答案强制TWebBrowser在IE8兼容模式下运行:
https://stackoverflow.com/a/12488739/4105601

相关问题