Вы должны указать компаратор , например. ( Решение Linq ):
string[] source = new string[] {
"Lets",
"all",
"go",
"on",
"holiday",
"somewhere",
"very",
"cold",
};
// StringComparer.Ordinal: order by Ascii values; capital letters < small letters
var ordered = source
.OrderBy(item => item, StringComparer.Ordinal);
Console.Write(string.Join(", ", ordered));
Результат:
Lets, all, cold, go, holiday, on, somewhere, very
Чтобы получить желаемый результат (в случае, если вы настаиваете на заказе), вы можете put
var result = string.Join("***", source
.OrderBy(item => item, StringComparer.Ordinal)
.First()
.Select(c => c)); // <- turn string into IEnumerable<char>
Console.Write(result);
Результат:
L***e***t***s
Если вы хотите продолжать использовать свой текущий код, измените Array.Sort(s);
на
Array.Sort(s, StringComparer.Ordinal);
Вы не можете использовать Unicode со шрифтом , вообще (за исключением ограниченного случая латинского или почти латинского языков), потому что шрифты используют кодировку, а кодировка - это однобайтовый массив. Таким образом, вы не можете ссылаться более чем на 256 символов из шрифта, а код символа не может быть больше, чем один байт.
Первая проблема с «использованием Unicode» заключается в том, что Unicode - это не простое 2-байтовое кодирование, это многобайтовый формат с переменной длиной, а иногда один глиф представлен несколькими кодовыми точками Unicode.
Итак, чтобы справиться с этим, вам нужно использовать CIDFont, а не Font. Вы не можете «использовать карту charcode-to-glyf», под которой я предполагаю, что вы имеете в виду подтаблицу CMAP шрифтом TTF. Вы должны составить CIDFont с CMap, чтобы отобразить несколько байтов в текстовой строке в коды символов для поиска в CMap, что дает вам CID для ссылки на точную символьную программу в шрифте.
Возможно, будет возможно создать один CMap, который будет охватывать каждую кодовую точку Unicode, но у меня есть сомнения, это, безусловно, будет огромной задачей. Однако определенные CMaps уже существуют. Adobe публикует стандартный список на своем веб-сайте, который включает CMaps, такие как UniCNS-UCS2-H и UniCNS-UCS2-V или UniGB-UTF8-H и т. Д.
Вероятно, вы можете использовать один из стандартных CMaps.
Обратите внимание, что не имеет значения, что FirstChar, LastChar и т. Д. Уже хранятся в шрифте TrueType, вам все равно необходимо указать их в объекте шрифта PDF. Это потому, что потребитель PDF может вообще не отображать текст, он может (например) извлекать текст, и в этом случае ему не нужно интерпретировать шрифт при условии, что эта информация доступна.