2010-05-21 18 views
8

मैं एक वेब सेवा विकसित कर रहा हूं जो उपयोगकर्ता द्वारा चयनित टीटीएफ फ़ॉन्ट का उपयोग करके PHP जीडी एक्सटेंशन का उपयोग कर वर्ण प्रस्तुत करता है।PHP-GD: यूनिकोड वर्णों से निपटना

यह ASCII-देश में ठीक काम करता है, लेकिन वहाँ कुछ समस्याएं हैं:

  1. स्ट्रिंग प्रदान करने की UTF-8 के रूप में आता है। मैं उपयोगकर्ता-चयन योग्य फोंट की सूची को केवल उन लोगों के लिए सीमित करना चाहता हूं जो स्ट्रिंग को सही तरीके से प्रस्तुत कर सकते हैं, क्योंकि कुछ फ़ॉन्ट्स में केवल ASCII वर्णों, आईएसओ 8601, आदि के लिए ग्लाइफ होते हैं

  2. ऐसे मामले में जहां कुछ सजावटी पात्र शामिल हैं, चयनित फ़ॉन्ट में अधिकांश पात्रों को प्रस्तुत करना और एरियल में सजावटी पात्रों को प्रस्तुत करना ठीक होगा (या जो भी फ़ॉन्ट विस्तारित ग्लिफ होता है)।

यह प्रतीत नहीं होता की तरह पीएचपी-जीडी पर्याप्त फ़ॉन्ट मेटाडाटा से क्वेरी यह पता लगाने की अगर एक चरित्र एक दिया फ़ॉन्ट में गाया जा सकता है के लिए समर्थन हासिल है। PHP में फ़ॉन्ट मेट्रिक्स प्राप्त करने का एक अच्छा तरीका क्या है? क्या कोई कमांड-लाइन उपयोगिता है जो एक्सएमएल या अन्य पारदर्शी प्रारूप में डंप कर सकती है?

+0

बस अपने आप को एक यूनिकोड फॉन्ट मिलता है। –

उत्तर

0

मैं फ़ॉन्ट मेट्रिक्स डंप करने के लिए TTX उपयोगिता का उपयोग कर समाप्त हुआ। इसके बाद मैं परिणामस्वरूप .ttx फ़ाइलों का निरीक्षण कर सकता हूं और चरित्र-> ग्लिफ़ मानचित्र देख सकता हूं। मैंने इसे मैन्युअल रूप से किया है, लेकिन एक्सएमएल फाइलों का स्वचालित पार्सिंग संभव है।

एक उदाहरण जीएनयू Makefile जो एक ही निर्देशिका में ट्रू टाइप फोंट का एक सेट से .ttx फ़ाइलें उत्पन्न

:

all: fontmetrics 

fontmetrics: $(patsubst %.ttf,%.ttx,$(wildcard *.ttf)) 
.PHONY: fontmetrics 

clean: 
    rm -f *.ttx 

%.ttx: %.ttf 
    ttx -t cmap $< 
2

PHP-Cairo पेंगो और फ़ॉन्ट कॉन्फिग के खिलाफ निर्मित उचित होने पर फ़ॉन्ट प्रतिस्थापन करने के लिए पर्याप्त दिमाग होना चाहिए।

1

आप एक यूनिकोड फॉन्ट की जरूरत नहीं है, तो आप

<?php 
$trans = new Latin1UTF8(); 

$mixed = "MIXED TEXT INPUT"; 

print "Original: ".$mixed; 
print "Latin1: ".$trans->mixed_to_latin1($mixed); 
print "UTF-8: ".$trans->mixed_to_utf8($mixed); 

class Latin1UTF8 { 

    private $latin1_to_utf8; 
    private $utf8_to_latin1; 
    public function __construct() { 
     for($i=32; $i<=255; $i++) { 
      $this->latin1_to_utf8[chr($i)] = utf8_encode(chr($i)); 
      $this->utf8_to_latin1[utf8_encode(chr($i))] = chr($i); 
     } 
    } 

    public function mixed_to_latin1($text) { 
     foreach($this->utf8_to_latin1 as $key => $val) { 
      $text = str_replace($key, $val, $text); 
     } 
     return $text; 
    } 

    public function mixed_to_utf8($text) { 
     return utf8_encode($this->mixed_to_latin1($text)); 
    } 
} 
?> 

से http://php.net/manual/en/function.utf8-decode.php

लिया की तरह कुछ कोशिश करनी होगी मिश्रित और UTF-8 वर्णों बराबर हैं तो आप इसका उपयोग कर सकते हैं। यदि नहीं, तो आप नहीं कर सकते।

संबंधित मुद्दे