⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cjkfont.java

📁 一个java操作pdf文件的开发包,很好用的.
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
        return Integer.parseInt((String)fontDesc.get(name));    }        private float getBBox(int idx) {        String s = (String)fontDesc.get("FontBBox");        StringTokenizer tk = new StringTokenizer(s, " []\r\n\t\f");        String ret = tk.nextToken();        for (int k = 0; k < idx; ++k)            ret = tk.nextToken();        return Integer.parseInt(ret);    }        /** Gets the font parameter identified by <CODE>key</CODE>. Valid values     * for <CODE>key</CODE> are <CODE>ASCENT</CODE>, <CODE>CAPHEIGHT</CODE>, <CODE>DESCENT</CODE>     * and <CODE>ITALICANGLE</CODE>.     * @param key the parameter to be extracted     * @param fontSize the font size in points     * @return the parameter in points     */    public float getFontDescriptor(int key, float fontSize) {        switch (key) {            case AWT_ASCENT:            case ASCENT:                return getDescNumber("Ascent") * fontSize / 1000;            case CAPHEIGHT:                return getDescNumber("CapHeight") * fontSize / 1000;            case AWT_DESCENT:            case DESCENT:                return getDescNumber("Descent") * fontSize / 1000;            case ITALICANGLE:                return getDescNumber("ItalicAngle");            case BBOXLLX:                return fontSize * getBBox(0) / 1000;            case BBOXLLY:                return fontSize * getBBox(1) / 1000;            case BBOXURX:                return fontSize * getBBox(2) / 1000;            case BBOXURY:                return fontSize * getBBox(3) / 1000;            case AWT_LEADING:                return 0;            case AWT_MAXADVANCE:                return fontSize * (getBBox(2) - getBBox(0)) / 1000;        }        return 0;    }        public String getPostscriptFontName() {        return fontName;    }        /** Gets the full name of the font. If it is a True Type font     * each array element will have {Platform ID, Platform Encoding ID,     * Language ID, font name}. The interpretation of this values can be     * found in the Open Type specification, chapter 2, in the 'name' table.<br>     * For the other fonts the array has a single element with {"", "", "",     * font name}.     * @return the full name of the font     */    public String[][] getFullFontName() {        return new String[][]{{"", "", "", fontName}};    }        /** Gets the family name of the font. If it is a True Type font     * each array element will have {Platform ID, Platform Encoding ID,     * Language ID, font name}. The interpretation of this values can be     * found in the Open Type specification, chapter 2, in the 'name' table.<br>     * For the other fonts the array has a single element with {"", "", "",     * font name}.     * @return the family name of the font     */    public String[][] getFamilyFontName() {        return getFullFontName();    }        static char[] readCMap(String name) {        try {            name = name + ".cmap";            InputStream is = getResourceStream(name);            char c[] = new char[0x10000];            for (int k = 0; k < 0x10000; ++k)                c[k] = (char)((is.read() << 8) + is.read());            return c;        }        catch (Exception e) {            e.printStackTrace();        }        return null;    }        static IntHashtable createMetric(String s) {        IntHashtable h = new IntHashtable();        StringTokenizer tk = new StringTokenizer(s);        while (tk.hasMoreTokens()) {            int n1 = Integer.parseInt(tk.nextToken());            h.put(n1, Integer.parseInt(tk.nextToken()));        }        return h;    }        static String convertToHCIDMetrics(int keys[], IntHashtable h) {        if (keys.length == 0)            return null;        int lastCid = 0;        int lastValue = 0;        int start;        for (start = 0; start < keys.length; ++start) {            lastCid = keys[start];            lastValue = h.get(lastCid);            if (lastValue != 0) {                ++start;                break;            }        }        if (lastValue == 0)            return null;        StringBuffer buf = new StringBuffer();        buf.append('[');        buf.append(lastCid);        int state = FIRST;        for (int k = start; k < keys.length; ++k) {            int cid = keys[k];            int value = h.get(cid);            if (value == 0)                continue;            switch (state) {                case FIRST: {                    if (cid == lastCid + 1 && value == lastValue) {                        state = SERIAL;                    }                    else if (cid == lastCid + 1) {                        state = BRACKET;                        buf.append('[').append(lastValue);                    }                    else {                        buf.append('[').append(lastValue).append(']').append(cid);                    }                    break;                }                case BRACKET: {                    if (cid == lastCid + 1 && value == lastValue) {                        state = SERIAL;                        buf.append(']').append(lastCid);                    }                    else if (cid == lastCid + 1) {                        buf.append(' ').append(lastValue);                    }                    else {                        state = FIRST;                        buf.append(' ').append(lastValue).append(']').append(cid);                    }                    break;                }                case SERIAL: {                    if (cid != lastCid + 1 || value != lastValue) {                        buf.append(' ').append(lastCid).append(' ').append(lastValue).append(' ').append(cid);                        state = FIRST;                    }                    break;                }            }            lastValue = value;            lastCid = cid;        }        switch (state) {            case FIRST: {                buf.append('[').append(lastValue).append("]]");                break;            }            case BRACKET: {                buf.append(' ').append(lastValue).append("]]");                break;            }            case SERIAL: {                buf.append(' ').append(lastCid).append(' ').append(lastValue).append(']');                break;            }        }        return buf.toString();    }        static String convertToVCIDMetrics(int keys[], IntHashtable v, IntHashtable h) {        if (keys.length == 0)            return null;        int lastCid = 0;        int lastValue = 0;        int lastHValue = 0;        int start;        for (start = 0; start < keys.length; ++start) {            lastCid = keys[start];            lastValue = v.get(lastCid);            if (lastValue != 0) {                ++start;                break;            }            else                lastHValue = h.get(lastCid);        }        if (lastValue == 0)            return null;        if (lastHValue == 0)            lastHValue = 1000;        StringBuffer buf = new StringBuffer();        buf.append('[');        buf.append(lastCid);        int state = FIRST;        for (int k = start; k < keys.length; ++k) {            int cid = keys[k];            int value = v.get(cid);            if (value == 0)                continue;            int hValue = h.get(lastCid);            if (hValue == 0)                hValue = 1000;            switch (state) {                case FIRST: {                    if (cid == lastCid + 1 && value == lastValue && hValue == lastHValue) {                        state = SERIAL;                    }                    else {                        buf.append(' ').append(lastCid).append(' ').append(-lastValue).append(' ').append(lastHValue / 2).append(' ').append(V1Y).append(' ').append(cid);                    }                    break;                }                case SERIAL: {                    if (cid != lastCid + 1 || value != lastValue || hValue != lastHValue) {                        buf.append(' ').append(lastCid).append(' ').append(-lastValue).append(' ').append(lastHValue / 2).append(' ').append(V1Y).append(' ').append(cid);                        state = FIRST;                    }                    break;                }            }            lastValue = value;            lastCid = cid;            lastHValue = hValue;        }        buf.append(' ').append(lastCid).append(' ').append(-lastValue).append(' ').append(lastHValue / 2).append(' ').append(V1Y).append(" ]");        return buf.toString();    }        static HashMap readFontProperties(String name) {        try {            name += ".properties";            InputStream is = getResourceStream(name);            Properties p = new Properties();            p.load(is);            is.close();            IntHashtable W = createMetric(p.getProperty("W"));            p.remove("W");            IntHashtable W2 = createMetric(p.getProperty("W2"));            p.remove("W2");            HashMap map = new HashMap();            for (Enumeration enum = p.keys(); enum.hasMoreElements();) {                Object obj = enum.nextElement();                map.put(obj, p.getProperty((String)obj));            }            map.put("W", W);            map.put("W2", W2);            return map;        }        catch (Exception e) {            e.printStackTrace();        }        return null;    }    public char getUnicodeEquivalent(char c) {        if (cidDirect)            return translationMap[c];        return c;    }        public char getCidCode(char c) {        if (cidDirect)            return c;        return translationMap[c];    }        /** Checks if the font has any kerning pairs.     * @return <CODE>true</CODE> if the font has any kerning pairs     */        public boolean hasKernPairs() {        return false;    }    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -