Search in sources :

Example 1 with OpenTypeFont

use of com.tom_roush.fontbox.ttf.OpenTypeFont in project PdfBox-Android by TomRoush.

the class FileSystemFontProvider method addTrueTypeFont.

/**
 * Adds an OTF or TTF font to the file cache. To reduce memory, the parsed font is not cached.
 */
private void addTrueTypeFont(File ttfFile) throws IOException {
    try {
        if (ttfFile.getPath().endsWith(".otf")) {
            OTFParser parser = new OTFParser(false, true);
            OpenTypeFont otf = parser.parse(ttfFile);
            addTrueTypeFontImpl(otf, ttfFile);
        } else {
            TTFParser parser = new TTFParser(false, true);
            TrueTypeFont ttf = parser.parse(ttfFile);
            addTrueTypeFontImpl(ttf, ttfFile);
        }
    } catch (// TTF parser is buggy
    NullPointerException e) {
        Log.e("PdfBox-Android", "Could not load font file: " + ttfFile, e);
    } catch (IOException e) {
        Log.e("PdfBox-Android", "Could not load font file: " + ttfFile, e);
    }
}
Also used : TrueTypeFont(com.tom_roush.fontbox.ttf.TrueTypeFont) OTFParser(com.tom_roush.fontbox.ttf.OTFParser) OpenTypeFont(com.tom_roush.fontbox.ttf.OpenTypeFont) IOException(java.io.IOException) TTFParser(com.tom_roush.fontbox.ttf.TTFParser)

Example 2 with OpenTypeFont

use of com.tom_roush.fontbox.ttf.OpenTypeFont in project PdfBox-Android by TomRoush.

the class FontMapperImpl method findFontBoxFont.

/**
 * Finds a font with the given PostScript name, or a suitable substitute, or null.
 *
 * @param postScriptName PostScript font name
 */
private FontBoxFont findFontBoxFont(String postScriptName) {
    Type1Font t1 = (Type1Font) findFont(FontFormat.PFB, postScriptName);
    if (t1 != null) {
        return t1;
    }
    TrueTypeFont ttf = (TrueTypeFont) findFont(FontFormat.TTF, postScriptName);
    if (ttf != null) {
        return ttf;
    }
    OpenTypeFont otf = (OpenTypeFont) findFont(FontFormat.OTF, postScriptName);
    if (otf != null) {
        return otf;
    }
    return null;
}
Also used : TrueTypeFont(com.tom_roush.fontbox.ttf.TrueTypeFont) OpenTypeFont(com.tom_roush.fontbox.ttf.OpenTypeFont) Type1Font(com.tom_roush.fontbox.type1.Type1Font)

Example 3 with OpenTypeFont

use of com.tom_roush.fontbox.ttf.OpenTypeFont in project PdfBox-Android by TomRoush.

the class PDCIDFontType2 method getPath.

@Override
public Path getPath(int code) throws IOException {
    if (ttf instanceof OpenTypeFont && ((OpenTypeFont) ttf).isPostScript()) {
        // we're not supposed to have CFF fonts inside PDCIDFontType2, but if we do,
        // then we treat their CIDs as GIDs, see PDFBOX-3344
        int cid = codeToGID(code);
        Type2CharString charstring = ((OpenTypeFont) ttf).getCFF().getFont().getType2CharString(cid);
        return charstring.getPath();
    } else {
        int gid = codeToGID(code);
        GlyphData glyph = ttf.getGlyph().getGlyph(gid);
        if (glyph != null) {
            return glyph.getPath();
        }
        return new Path();
    }
}
Also used : Type2CharString(com.tom_roush.fontbox.cff.Type2CharString) Path(android.graphics.Path) GlyphData(com.tom_roush.fontbox.ttf.GlyphData) OpenTypeFont(com.tom_roush.fontbox.ttf.OpenTypeFont)

Example 4 with OpenTypeFont

use of com.tom_roush.fontbox.ttf.OpenTypeFont in project PdfBox-Android by TomRoush.

the class FontMapperImpl method getCIDFont.

/**
 * Finds a CFF CID-Keyed font with the given PostScript name, or a suitable substitute, or null.
 * This method can also map CJK fonts via their CIDSystemInfo (ROS).
 *
 * @param fontDescriptor FontDescriptor
 * @param cidSystemInfo the CID system info, e.g. "Adobe-Japan1", if any.
 */
@Override
public CIDFontMapping getCIDFont(String baseFont, PDFontDescriptor fontDescriptor, PDCIDSystemInfo cidSystemInfo) {
    // try name match or substitute with OTF
    OpenTypeFont otf1 = (OpenTypeFont) findFont(FontFormat.OTF, baseFont);
    if (otf1 != null) {
        return new CIDFontMapping(otf1, null, false);
    }
    // try name match or substitute with TTF
    TrueTypeFont ttf = (TrueTypeFont) findFont(FontFormat.TTF, baseFont);
    if (ttf != null) {
        return new CIDFontMapping(null, ttf, false);
    }
    if (cidSystemInfo != null) {
        // "In Acrobat 3.0.1 and later, Type 0 fonts that use a CMap whose CIDSystemInfo
        // dictionary defines the Adobe-GB1, Adobe-CNS1 Adobe-Japan1, or Adobe-Korea1 character
        // collection can also be substituted." - Adobe Supplement to the ISO 32000
        String collection = cidSystemInfo.getRegistry() + "-" + cidSystemInfo.getOrdering();
        if (collection.equals("Adobe-GB1") || collection.equals("Adobe-CNS1") || collection.equals("Adobe-Japan1") || collection.equals("Adobe-Korea1")) {
            // try automatic substitutes via character collection
            PriorityQueue<FontMatch> queue = getFontMatches(fontDescriptor, cidSystemInfo);
            FontMatch bestMatch = queue.poll();
            if (bestMatch != null) {
                FontBoxFont font = bestMatch.info.getFont();
                if (font instanceof OpenTypeFont) {
                    return new CIDFontMapping((OpenTypeFont) font, null, true);
                } else if (font != null) {
                    return new CIDFontMapping(null, font, true);
                }
            }
        }
    }
    // last-resort fallback
    return new CIDFontMapping(null, lastResortFont, true);
}
Also used : TrueTypeFont(com.tom_roush.fontbox.ttf.TrueTypeFont) OpenTypeFont(com.tom_roush.fontbox.ttf.OpenTypeFont) FontBoxFont(com.tom_roush.fontbox.FontBoxFont)

Aggregations

OpenTypeFont (com.tom_roush.fontbox.ttf.OpenTypeFont)4 TrueTypeFont (com.tom_roush.fontbox.ttf.TrueTypeFont)3 Path (android.graphics.Path)1 FontBoxFont (com.tom_roush.fontbox.FontBoxFont)1 Type2CharString (com.tom_roush.fontbox.cff.Type2CharString)1 GlyphData (com.tom_roush.fontbox.ttf.GlyphData)1 OTFParser (com.tom_roush.fontbox.ttf.OTFParser)1 TTFParser (com.tom_roush.fontbox.ttf.TTFParser)1 Type1Font (com.tom_roush.fontbox.type1.Type1Font)1 IOException (java.io.IOException)1