Запись Юникода в PDF

Вы должны указать компаратор , например. ( Решение 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);
0
задан Ivan Kuckir 21 January 2019 в 15:24
поделиться

1 ответ

Вы не можете использовать 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 может вообще не отображать текст, он может (например) извлекать текст, и в этом случае ему не нужно интерпретировать шрифт при условии, что эта информация доступна.

0
ответ дан KenS 21 January 2019 в 15:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: