in src/java/org/apache/fop/render/pdf/pdfbox/MergeCFFFonts.java [67:131]
public void readFont(InputStream is, String name, FontContainer fontContainer,
Map<Integer, Integer> subsetGlyphs, boolean cid) throws IOException {
this.embeddedName = name;
FontFileReader fontFile = new FontFileReader(is);
CFFParser p = new CFFParser();
CFFFont ff = p.parse(fontFile.getAllBytes()).get(0);
Map<String, byte[]> stringsMap = getStrings(ff);
if (used.containsAll(stringsMap.keySet())) {
return;
}
fontFileSize += fontFile.getFileSize();
this.fontFile = fontFile;
used.addAll(stringsMap.keySet());
if (fileFont == null) {
fileFont = ff;
}
Map<Integer, Integer> sg = new LinkedHashMap<Integer, Integer>();
for (int i = 0; i < ff.getNumCharStrings() + 1; i++) {
sg.put(i, i);
}
subsetGlyphsList.add(sg);
cffReader = new CFFDataReader(fontFile);
for (int sid : getSids(ff.getCharset())) {
if (sid >= NUM_STANDARD_STRINGS) {
int index = sid - NUM_STANDARD_STRINGS;
if (index <= cffReader.getStringIndex().getNumObjects()) {
String data = new String(cffReader.getStringIndex().getValue(index), "US-ASCII");
if (!strings.contains(data)) {
strings.add(data);
}
}
}
}
if (ff instanceof CFFType1Font) {
encoding = ((CFFType1Font)ff).getEncoding();
if (!(encoding instanceof CFFStandardEncoding)) {
for (int c : encoding.getCodeToNameMap().keySet()) {
if (!chars.contains(c) && c != 0) {
chars.add(c);
}
}
}
}
setupMapping(ff.getCharset(), sg);
for (Map.Entry<String, byte[]> s : stringsMap.entrySet()) {
if (!added.contains(s.getKey())) {
subsetCharStringsIndex.add(s.getValue());
added.add(s.getKey());
}
}
CFFCharset cSet = ff.getCharset();
String cClass = cSet.getClass().getName();
if (cClass.equals("org.apache.fontbox.cff.CFFParser$Format1Charset")
|| cClass.equals("org.apache.fontbox.cff.CFFParser$Format0Charset")) {
for (int sid : getSids(cSet)) {
range.put(sid, 0);
}
}
noOfFonts++;
}