所以我已经为此工作了几个小时,我已经接近了,但我一直卡在这些特殊字符上。
我的客户是一家铸造厂。他们的大多数字体都有扩展字符。要求是为每种字体上传 1 个 OTF 文件,将其转换为 eot、woff 等……然后允许下载和购买字体。
我已经完成了所有这些,我注意到当我使用 fontforge 进行转换时,它会创建一个 .afm 文件,该文件似乎是一个 Adobe 文件。
经过一番戳戳后,这个 AFM 文件包含字体中所有字符的列表。惊人的!
现在我试图在页面中嵌入 OTF 文件以显示它附带的所有字符,但我不知道要使用哪种字符编码。
我的 AFM 文件示例:
C 251 ; WX 965 ; N ucircumflex ; B 90 -10 869 691 ;
C 252 ; WX 965 ; N udieresis ; B 90 -10 869 675 ;
C 253 ; WX 856 ; N yacute ; B 11 -182 845 678 ;
C 254 ; WX 947 ; N thorn ; B 96 -172 899 668 ;
C 255 ; WX 856 ; N ydieresis ; B 11 -182 845 675 ;
C -1 ; WX 1090 ; N Amacron ; B 0 0 1090 820 ;
C -1 ; WX 927 ; N amacron ; B 65 0 861 655 ;
C -1 ; WX 1090 ; N Abreve ; B 0 0 1090 851 ;
C -1 ; WX 927 ; N abreve ; B 65 0 861 686 ;
C -1 ; WX 1090 ; N Aogonek ; B 0 -182 1090 668 ;
C -1 ; WX 927 ; N aogonek ; B 65 -182 861 496 ;
C -1 ; WX 1093 ; N Cacute ; B 63 -10 1040 843 ;
C -1 ; WX 917 ; N cacute ; B 48 -10 883 678 ;
以及我如何尝试使用 PHP 显示字符
if($row['afm'])
{
$in = 0;
$file_handle = fopen($row['afm'], "r");
while (!feof($file_handle))
{
$line = fgets($file_handle);
if(substr($line, 0, 16) == "StartCharMetrics")
{
$in = 1;
}
if(substr($line, 0, 14) == "EndCharMetrics")
{
$in = 0;
}
if($in == 1)
{
list($c, $wx, $n, $b) = explode(";", $line);
list($a, $b) = explode(" ", trim($c));
echo "<div class='box' style='font-family: sample; width: 150px; height: 50px; border: 1px #c4c4c4 solid; float: left; padding: 10px; font-family: sample; font-size: 44px;'>";
//echo $b . "<br>";
if($b == "-1")
{
list($nn, $nnn) = explode(" ", trim($n));
//echo "<!ENTITY " . $nnn . " \&" . $nnn . ";>";
echo unichr($nnn);
//echo htmlspecialchars_decode("&" . $nnn . ";");
}
else
{
echo unichr($b);
}
// echo $line . "<br>";
echo "</div>";
}
}
fclose($file_handle);
}
function unichr($u) {
return mb_convert_encoding('&#' . intval($u) . ';', 'UTF-8', 'HTML_ENTITIES');
}
如果 $c 包含一个可识别的字符(即:不是 -1),则使用它,否则,使用 $n 中的内容 - 它是我无法正确显示的 $n - 像“aogonek”这样的字符
我在元数据和标题、各种 ISO 格式等中尝试过 UTF-8...