in src/java/org/apache/fop/render/pdf/pdfbox/MergeCFFFonts.java [339:384]
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), StandardCharsets.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(StandardCharsets.UTF_8));
} else {
stringIndexData.add(0, embeddedName.getBytes(StandardCharsets.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(StandardCharsets.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(StandardCharsets.UTF_8)));
} else {
writeCard16(0);
}
}
}
}