in src/java/org/apache/fop/render/pdf/pdfbox/MergeCFFFonts.java [337:381]
protected void writeStringIndex() throws IOException {
int stringIndexSize = stringIndexData.size();
for (String s : strings) {
stringIndexData.add(s.getBytes("US-ASCII"));
}
//Write the String Index
boolean stdRange = range.containsKey(NUM_STANDARD_STRINGS);
if (!stringIndexData.isEmpty()) {
if (!strings.isEmpty() && !new String(stringIndexData.get(0), "UTF-8").equals(strings.get(0)) && stdRange) {
//Keep strings in order as they are referenced from the TopDICT
for (int i = 0; i < stringIndexSize; i++) {
stringIndexData.add(stringIndexData.remove(0));
}
} else {
String notice = (String)fileFont.getTopDict().get("Notice");
if (notice != null && !(fileFont instanceof CFFCIDFont)) {
stringIndexData.add(notice.getBytes(PDFDocument.ENCODING));
}
}
if (stdRange) {
stringIndexData.add(embeddedName.getBytes("UTF-8"));
} else {
stringIndexData.add(0, embeddedName.getBytes("UTF-8"));
}
writeIndex(stringIndexData);
} else {
String notice = (String)fileFont.getTopDict().get("Notice");
if (notice != null) {
writeIndex(Arrays.<byte[]>asList(notice.getBytes(PDFDocument.ENCODING),
embeddedName.getBytes("UTF-8")));
} else {
List<byte[]> sindex = new ArrayList<byte[]>();
sindex.add(cffReader.getStringIndex().getData());
if (sindex.size() > 1) {
fallbackIndex = true;
writeIndex(sindex);
} else if (sindex.size() == 1) {
writeIndex(Arrays.asList(embeddedName.getBytes("UTF-8")));
} else {
writeCard16(0);
}
}
}
}