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();
}
}
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;
}
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);
}
}
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);
}
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;
}
Aggregations