웹 페이지 에 임의의 웹 글꼴 솔 루 션 삽입

프로젝트 1:
css 3 사용 하기 font - face, 상세 참조:http://www.w3cplus.com/content/css3-font-face
 
프로젝트 2:
텍스트 svg path, html 에서 svg 태그 로 텍스트 그리 기
 
String fontPath="D:/IdeaProjects/text2svg/fonts/    .TTF";
String text="  ";
try {
            ResultData  resultData = Text2SvgUtils.toConvert(fontPath, text);
            System.out.println(resultData);
} catch (Exception e) {
            e.printStackTrace();
}
  Font  :172
   :179ms
ResultData{fontFace=FontFace{fontFamily='HuXiaoBo_KuHei', unitsPerEm=1000, panose='2 1 6 0 3 1 1 1 1 1', ascent=859, descent=-141}, charGlyphList=[CharGlyph{source= , glyphName='uni6211', unicode=' ', horizAdvX=1000, arabicForm='', d='M36 212V319L245 338V432H31V517L63 500H245V558L64 555L35 538V635L491 644Q500 644 511 647T526 664V563L373 560V500H580L567 648H722L704 629L715 500H836L828 633L810 652H945L953 500H970V412Q965 425 955 428T935 432H720L732 286L944 339L967 369V255L740 199L746 124H936L966 141V57H729H727H619L609 166L547 151Q538 146 531 138T519 115V233L601 253L586 432H373V350L513 364L542 399V274L373 260V57H278H277H39V141L70 124H245V249L67 234L36 212Z', missing=false}, CharGlyph{source= , glyphName='uni4EEC', unicode=' ', horizAdvX=1000, arabicForm='', d='M957 55Q952 65 941 69T921 73H680V159L712 142H829V568H571V654L602 637H957V55ZM242 75H113V438H43L136 647L118 666H267L202 512H242V75ZM426 74H298V477L280 496H426V74ZM552 532H414L342 647L309 666H470L552 532Z', missing=false}]}

html 중 svg:

그 속 transform="translate(0, 860) scale(1, -1)"  // 860 참조: ResultData 의 ascent
 
JAVA 코드: 참조 https://github.com/ahdshao/text-to-svg  
프로젝트 3:
        프로젝트 2 가 실 행 될 때마다 100 + ms 가 필요 합 니 다. 너무 오래 걸 립 니 다.사용 시 문 제 를 해결 하고 텍스트 path 데 이 터 를 Redis (글꼴 아래 의 텍스트 path 는 거의 변 하지 않 고 새로 추 가 됩 니 다) 로 지속 적 으로 조회 서 비 스 를 제공 합 니 다.
실행 효율 10ms 이내, 명중 jvm 0ms 이내
1 、 아파 치 사용 batik 도 구 는 TTF 파일 을 SVG 파일 로 변환 합 니 다.
java - jar batik - ttf2svg. jar C: \ \ Users \ \ zhaodahao \ \ Desktop \ 글꼴 패키지 \ 역 쿨 해 피 체. ttf  -l 32 - h 65374 - o C: \ \ Users \ \ zhaodahao \ \ Desktop \ \ test \ 역 쿨 해 피 체. svg
2. SAX 로 SVG 파일 분석
           log.info("    svg  :" + xmlPath);
            //  SAX        ,      SAXParser   
            SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
            //  SAXParser      
            SAXParser saxParser = saxParserFactory.newSAXParser();
            XmlSAXHandler saxHandler = new XmlSAXHandler();
            saxParser.parse(new File(xmlPath), saxHandler);
            log.info("   " + name + ".svg   :" + (System.currentTimeMillis() - start));
            log.info("WebIcon  :" + saxHandler.getWebIcons().size());

            long ss = System.currentTimeMillis();
            //         
            jimClient.del(RedisTypeEnum.FONT_DATA.getCode() + webFontId);
            //     path    
            batchAddWebIcon(webFontId, saxHandler.getWebIcons(), 10000);
            log.info("         :" + (System.currentTimeMillis() - ss));

            WebFont webFont=new WebFont();
            webFont.setId(webFontId);
            webFont.setDescName(name);
            webFont.setFontFace(saxHandler.getFontFace());
            //        
            jimClient.hSet(RedisTypeEnum.FONT_TYPE.getCode(),webFontId+"",gson.toJson(webFont));
            return true;

 
package com.zdh.xml.handler;

import com.zdh.webfont.common.entity.WebIcon;
import com.zdh.webfont.common.util.UnicodeConverter;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 *   SVG   
 * Date: 16-10-25
 * Time:   10:56
 */
public class XmlSAXHandler extends DefaultHandler {
    private List webIcons = new ArrayList();
    private Map fontFace=new HashMap();

    @Override
    public void startDocument() throws SAXException {
        System.out.println("---->startDocument() is invoked...");
    }

    @Override
    public void endDocument() throws SAXException {
        System.out.println("---->endDocument() is invoked...");
    }
    @Override
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
        if (qName.equalsIgnoreCase("font-face")){
            for (int i=0;i*/
            String code = attributes.getValue("unicode");
            if (code !=null){
                if (code.startsWith("")){    //   code = ò
                    code=code.substring(3,code.length()-1);
                }else{
                    code= UnicodeConverter.charToUnicode(code.charAt(0));
                }
                WebIcon icon = new WebIcon();
                icon.setName(attributes.getValue("glyph-name"));
                icon.setUnicode(code);
                icon.setPath(attributes.getValue("d"));
                webIcons.add(icon);
            }
        }
    }

    public List getWebIcons() {
        return webIcons;
    }

    public Map getFontFace() {
        return fontFace;
    }
}

 
 
 

좋은 웹페이지 즐겨찾기