Search in sources :

Example 1 with FontName

use of org.apache.pdfbox.pdmodel.font.Standard14Fonts.FontName in project pdfbox by apache.

the class PDTrueTypeFont method readEncodingFromFont.

@Override
protected Encoding readEncodingFromFont() throws IOException {
    if (!isEmbedded() && getStandard14AFM() != null) {
        // read from AFM
        return new Type1Encoding(getStandard14AFM());
    } else {
        // which will override this anyway
        if (getSymbolicFlag() != null && !getSymbolicFlag()) {
            return StandardEncoding.INSTANCE;
        }
        // normalise the standard 14 name, e.g "Symbol,Italic" -> "Symbol"
        FontName standard14Name = Standard14Fonts.getMappedFontName(getName());
        // likewise, if the font is standard 14 then we know it's Standard Encoding
        if (isStandard14() && standard14Name != FontName.SYMBOL && standard14Name != FontName.ZAPF_DINGBATS) {
            return StandardEncoding.INSTANCE;
        }
        // synthesize an encoding, so that getEncoding() is always usable
        PostScriptTable post = ttf.getPostScript();
        Map<Integer, String> codeToName = new HashMap<>();
        for (int code = 0; code <= 256; code++) {
            int gid = codeToGID(code);
            if (gid > 0) {
                String name = null;
                if (post != null) {
                    name = post.getName(gid);
                }
                if (name == null) {
                    // GID pseudo-name
                    name = Integer.toString(gid);
                }
                codeToName.put(code, name);
            }
        }
        return new BuiltInEncoding(codeToName);
    }
}
Also used : PostScriptTable(org.apache.fontbox.ttf.PostScriptTable) Type1Encoding(org.apache.pdfbox.pdmodel.font.encoding.Type1Encoding) HashMap(java.util.HashMap) BuiltInEncoding(org.apache.pdfbox.pdmodel.font.encoding.BuiltInEncoding) FontName(org.apache.pdfbox.pdmodel.font.Standard14Fonts.FontName) UniUtil.getUniNameOfCodePoint(org.apache.pdfbox.pdmodel.font.UniUtil.getUniNameOfCodePoint)

Example 2 with FontName

use of org.apache.pdfbox.pdmodel.font.Standard14Fonts.FontName in project pdfbox by apache.

the class PDSimpleFont method readEncoding.

/**
 * Reads the Encoding from the Font dictionary or the embedded or substituted font file.
 * Must be called at the end of any subclass constructors.
 *
 * @throws IOException if the font file could not be read
 */
protected void readEncoding() throws IOException {
    COSBase encodingBase = dict.getDictionaryObject(COSName.ENCODING);
    if (encodingBase instanceof COSName) {
        COSName encodingName = (COSName) encodingBase;
        this.encoding = Encoding.getInstance(encodingName);
        if (this.encoding == null) {
            LOG.warn("Unknown encoding: " + encodingName.getName());
            // fallback
            this.encoding = readEncodingFromFont();
        }
    } else if (encodingBase instanceof COSDictionary) {
        COSDictionary encodingDict = (COSDictionary) encodingBase;
        Encoding builtIn = null;
        Boolean symbolic = getSymbolicFlag();
        COSName baseEncoding = encodingDict.getCOSName(COSName.BASE_ENCODING);
        boolean hasValidBaseEncoding = baseEncoding != null && Encoding.getInstance(baseEncoding) != null;
        if (!hasValidBaseEncoding && Boolean.TRUE.equals(symbolic)) {
            builtIn = readEncodingFromFont();
        }
        if (symbolic == null) {
            symbolic = false;
        }
        this.encoding = new DictionaryEncoding(encodingDict, !symbolic, builtIn);
    } else {
        this.encoding = readEncodingFromFont();
    }
    // normalise the standard 14 name, e.g "Symbol,Italic" -> "Symbol"
    FontName standard14Name = Standard14Fonts.getMappedFontName(getName());
    assignGlyphList(standard14Name);
}
Also used : DictionaryEncoding(org.apache.pdfbox.pdmodel.font.encoding.DictionaryEncoding) COSName(org.apache.pdfbox.cos.COSName) COSDictionary(org.apache.pdfbox.cos.COSDictionary) FontName(org.apache.pdfbox.pdmodel.font.Standard14Fonts.FontName) COSBase(org.apache.pdfbox.cos.COSBase) MacRomanEncoding(org.apache.pdfbox.pdmodel.font.encoding.MacRomanEncoding) DictionaryEncoding(org.apache.pdfbox.pdmodel.font.encoding.DictionaryEncoding) WinAnsiEncoding(org.apache.pdfbox.pdmodel.font.encoding.WinAnsiEncoding) Encoding(org.apache.pdfbox.pdmodel.font.encoding.Encoding) StandardEncoding(org.apache.pdfbox.pdmodel.font.encoding.StandardEncoding)

Aggregations

FontName (org.apache.pdfbox.pdmodel.font.Standard14Fonts.FontName)2 HashMap (java.util.HashMap)1 PostScriptTable (org.apache.fontbox.ttf.PostScriptTable)1 COSBase (org.apache.pdfbox.cos.COSBase)1 COSDictionary (org.apache.pdfbox.cos.COSDictionary)1 COSName (org.apache.pdfbox.cos.COSName)1 UniUtil.getUniNameOfCodePoint (org.apache.pdfbox.pdmodel.font.UniUtil.getUniNameOfCodePoint)1 BuiltInEncoding (org.apache.pdfbox.pdmodel.font.encoding.BuiltInEncoding)1 DictionaryEncoding (org.apache.pdfbox.pdmodel.font.encoding.DictionaryEncoding)1 Encoding (org.apache.pdfbox.pdmodel.font.encoding.Encoding)1 MacRomanEncoding (org.apache.pdfbox.pdmodel.font.encoding.MacRomanEncoding)1 StandardEncoding (org.apache.pdfbox.pdmodel.font.encoding.StandardEncoding)1 Type1Encoding (org.apache.pdfbox.pdmodel.font.encoding.Type1Encoding)1 WinAnsiEncoding (org.apache.pdfbox.pdmodel.font.encoding.WinAnsiEncoding)1