Алексей Махоткин

домашняя страница

PDF Metadata в Unicode

Метаданные (такие, как Author, Title и т. п. — видны в Document Properties) в стандарте PDF хранятся в совершенно ужасном формате.

Например, информация об авторе будет записана так:

/Author (...)

Вместо многоточия будет написано собственно имя, в виде строки байтов в одном из двух основных вариантов: Latin1 или Unicode.

Если ваша строка помещается в Latin1, то достаточно записать вместо многоточия сроку в этой кодировке, нужно только искейпить (добавив backslash) как минимум скобки и backslash (tiff2pdf искейпит еще несколько символов: возможно, от ужаса или для обратной совместимости неизвестно с чем).

Если ваша строка требует более полного Unicode, то вам придется сконструировать байтовую строку, состоящую из: а) BOM (Byte-Order Mark) в big-endian UTF-16; б) собственно текста в big-endian UTF-16. После этого нужно еще раз пройтись по этой байтовой строке, и искейпить в ней скобки и backslash (да, прямо «внутри» UTF-16BE). Полученную байтовую строку можно поместить внутрь скобок.

Удивительно здесь, что стандарт требует big endianness, и одновременно с этим требует указывать BOM. Казалось бы — с помощью BOM можно было бы совершенно стандартно поддержать UTF-16BE, UTF-16LE и UTF-8!

Я написал несколько патчей, которые исправляют поддержку Unicode в tiff2pdf.

Comments