Search in sources :

Example 1 with OpenTypeFont

use of org.apache.fontbox.ttf.OpenTypeFont in project pdfbox by apache.

the class PDCIDFontType2 method getPath.

@Override
public GeneralPath 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 GeneralPath();
    }
}
Also used : Type2CharString(org.apache.fontbox.cff.Type2CharString) GlyphData(org.apache.fontbox.ttf.GlyphData) GeneralPath(java.awt.geom.GeneralPath) OpenTypeFont(org.apache.fontbox.ttf.OpenTypeFont)

Example 2 with OpenTypeFont

use of org.apache.fontbox.ttf.OpenTypeFont in project pdfbox by apache.

the class FileSystemFontProvider method getOTFFont.

private OpenTypeFont getOTFFont(String postScriptName, File file) {
    try {
        // todo JH: we don't yet support loading CFF fonts from OTC collections
        OTFParser parser = new OTFParser(false, true);
        OpenTypeFont otf = parser.parse(file);
        if (LOG.isDebugEnabled()) {
            LOG.debug("Loaded " + postScriptName + " from " + file);
        }
        return otf;
    } catch (IOException e) {
        LOG.error("Could not load font file: " + file, e);
    }
    return null;
}
Also used : OTFParser(org.apache.fontbox.ttf.OTFParser) OpenTypeFont(org.apache.fontbox.ttf.OpenTypeFont) IOException(java.io.IOException)

Example 3 with OpenTypeFont

use of org.apache.fontbox.ttf.OpenTypeFont in project pdfbox by apache.

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 (NullPointerException | IOException e) {
        // NPE due to TTF parser being buggy
        LOG.error("Could not load font file: " + ttfFile, e);
    }
}
Also used : TrueTypeFont(org.apache.fontbox.ttf.TrueTypeFont) OTFParser(org.apache.fontbox.ttf.OTFParser) OpenTypeFont(org.apache.fontbox.ttf.OpenTypeFont) IOException(java.io.IOException) TTFParser(org.apache.fontbox.ttf.TTFParser)

Example 4 with OpenTypeFont

use of org.apache.fontbox.ttf.OpenTypeFont in project pdfbox by apache.

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(org.apache.fontbox.ttf.TrueTypeFont) OpenTypeFont(org.apache.fontbox.ttf.OpenTypeFont) FontBoxFont(org.apache.fontbox.FontBoxFont)

Example 5 with OpenTypeFont

use of org.apache.fontbox.ttf.OpenTypeFont in project pdfbox by apache.

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(org.apache.fontbox.ttf.TrueTypeFont) OpenTypeFont(org.apache.fontbox.ttf.OpenTypeFont) Type1Font(org.apache.fontbox.type1.Type1Font)

Aggregations

OpenTypeFont (org.apache.fontbox.ttf.OpenTypeFont)5 TrueTypeFont (org.apache.fontbox.ttf.TrueTypeFont)3 IOException (java.io.IOException)2 OTFParser (org.apache.fontbox.ttf.OTFParser)2 GeneralPath (java.awt.geom.GeneralPath)1 FontBoxFont (org.apache.fontbox.FontBoxFont)1 Type2CharString (org.apache.fontbox.cff.Type2CharString)1 GlyphData (org.apache.fontbox.ttf.GlyphData)1 TTFParser (org.apache.fontbox.ttf.TTFParser)1 Type1Font (org.apache.fontbox.type1.Type1Font)1