in src/java/org/apache/fop/render/pdf/pdfbox/MergeFontsPDFWriter.java [160:205]
private String getUniqueFontName(COSDictionary fontData) throws IOException {
FontContainer fontContainer = getFont(fontData);
PDFont font = fontContainer.font;
if (font.getName() != null) {
String extra = "";
String name = getName(font.getName()) + "_" + ((COSName)fontData.getItem(COSName.SUBTYPE)).getName();
if (font instanceof PDType0Font) {
PDCIDFont descendantFont = ((PDType0Font) font).getDescendantFont();
if (descendantFont instanceof PDCIDFontType0) {
CFFFont cffFont = ((PDCIDFontType0) descendantFont).getCFFFont();
if (cffFont instanceof CFFCIDFont
&& ((CFFCIDFont) cffFont).getFdSelect().getClass().getName()
.equals("org.apache.fontbox.cff.CFFParser$Format0FDSelect")) {
extra += "format0";
}
return name + extra + "cff";
} else if (descendantFont instanceof PDCIDFontType2 && fontContainer.getToUnicode() != null) {
if (!isSubsetFont(font.getName())) {
extra = "f3";
}
return name + extra;
}
} else if (font instanceof PDTrueTypeFont && isSubsetFont(font.getName())) {
TrueTypeFont tt = ((PDTrueTypeFont) font).getTrueTypeFont();
CmapSubtable[] cmaps = tt.getCmap().getCmaps();
String mac = "";
for (CmapSubtable c : cmaps) {
if (c.getGlyphId(1) > 0) {
extra = "cid";
}
if (c.getPlatformId() == 1) {
mac = "mac";
}
}
if (cmaps.length != 2) {
extra += "cmap" + cmaps.length;
}
return name + extra + mac;
} else if (font instanceof PDType1CFont) {
return getNamePDType1Font(name, (PDType1CFont) font);
} else if (font instanceof PDType1Font) {
return name;
}
}
return null;
}