2015-06-22 134 views
1

我在SVG中创建了基于ASCII码的字母。每个字符在一个单独的文件中。这是用于绘图应用程序中的剪贴画。以下是我用来生成SVG脚本的例子:生成阿拉伯字母SVG

cat <<EOF > f.svg 
<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<svg 
    xmlns:dc="http://purl.org/dc/elements/1.1/" 
    xmlns:cc="http://creativecommons.org/ns#" 
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
    xmlns:svg="http://www.w3.org/2000/svg" 
    xmlns="http://www.w3.org/2000/svg" 
    xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" 
    xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" 
    version="1.1" 
    width="512" 
    height="512" 
    id="svg3834" 
    inkscape:version="0.48.4 r9939" 
    sodipodi:docname="Perspective1.svg"> 
    <g id="board"> 
EOF 

mkdir letters 

i=32 
while [ $i -lt 400 ]; do 
    let "i++" 

    OUT=$(printf "letters/%03d.svg" $i) 
    echo $OUT 
    cat f.svg > $OUT 
    cat <<EOF >> $OUT 
    <text x="32" y="256" 
     font-family="Verdana" font-size="256" fill="red" > 
EOF 
    printf "&#%d;" $i >> $OUT 
    cat <<EOF >> $OUT 
    </text> 
    </g> 
</svg> 
EOF 
done 

echo "" 
echo " Now convert $(cygpath -w `pwd`)/letters/*.svg on http://www.fileformat.info/convert/image/svg2raster.htm " 
echo 

ls letters 

我该怎么办相同/相近,以获得阿拉伯字母/数字?

回答

1

您可以查找Unicode代码范围。从Wikipedia,我得到:

  • 阿拉伯语(0600-06FF)
  • 阿拉伯语补充(0750-077F)
  • 阿拉伯语扩展-A(08A0-08FF)
  • 阿拉伯表达形式-A(FB50 -FDFF)
  • 阿拉伯表达形式-B(FE70-FEFF)
  • 阿拉伯字母数学符号(1EE00-1EEFF)
  • 鲁米标号符号(10E60-10E7F)

如果你想,例如,阿拉伯语0600-06FF,你的循环更改为:

for ((i=0x600;i<=0x6FF;i++)); do 

,一切都应该工作,除了您的字体。 Verdana似乎只支持拉丁文脚本,因此您最好将font-family="Verdana"更改为font-family="Verdana,sans-serif",这样您就可以有一个很好的回退。

P.S.您目前对字形度量的处理可能会在阿拉伯文脚本中使用更宽的字形看起来被破坏。

P.P.S.由于范围$i,您的文件命名为3位小数可能会被破坏。

+0

太棒了!谢谢。 – TenG