所以我现在已经开始工作了几个小时而且我很接近,但是我一直在坚持这些特殊角色。
我的客户是类型代工厂。他们的大多数字体都有扩展字符。要求是每个字体上传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 ......
答案 0 :(得分:0)
终于明白了!
我记得看到fontforge也可以导出SVG文件。在wim上,我将OTF文件转换为SVG并在文本编辑器中打开它 - 它的简单的人类可读文本看起来像
<glyph glyph-name="ff" unicode="ff" horiz-adv-x="1001"
d="M26 496h74v58c0 67 56 114 139 114h267v-131h-101c-25 0 -37 -13 -37 -41h85v-135h-85v-361h-268v361h-74v135zM512 496h74v58c0 67 56 114 139 114h267v-131h-101c-25 0 -37 -13 -37 -41h85v-135h-85v-361h-268v361h-74v135z" />
在我看到之后,这是一个使用Simple HTML DOM Parser并回显该行中的unicode字符的问题。