В очередной раз спустя сколько-то лет попался PDF-файлик с формами, дай, думаю, заполню - английские буквы нормально заполняются, а вот кириллица - нет. Не только кириллица, а любые неюникодные символы просто «проглатываются». Нашёл баг, которому ВОСЕМЬ ЛЕТ https://bugs.freedesktop.org/show_bug.cgi?id=17913
Восемь лет не могут исправить. Думаю, opensource такой opensource. Потом думаю, программист я, или где? Правда, к сожалению, java, в C++ не силён, но не беда, надо подтягивать свои навыки, кое-что вспомнить, кое-что освоить, не сложно.
Что же там не так происходит? PDF файл со шрифтом Helvetica, который якобы не поддерживает кириллицу, но должен ведь. Валидный PDF или невалидный, но закрытый adobe reader его ведь читает. (там в примере есть минимальный пример с формами https://bugs.freedesktop.org/attachment.cgi?id=19393 )
Больше всего полезной информации даёт четвёртый комментарий. Якобы poppler работает как надо (к слову, помню, раньше в okular pdf-формы на русском нормально редактировались, то есть когда-то (>8 лет назад что ли?) сломали... Либо может там шрифт был всё-таки другой (узнать теперь невозможно). Якобы adobe reader такой умный, что подставляет другой шрифт.
Проблема где-то тут, в «void Annot::layoutText» https://cgit.freedesktop.org/poppler/poppler/tree/poppler/Annot.cc#n4046
В некой таблице CharCodeToUnicode https://cgit.freedesktop.org/poppler/poppler/tree/poppler/Annot.cc#n4123 нету значений для ключей, которые соответствуют русским буквам.
Кстати, если программой для просмотра шрифтов открыть шрифт Helvetica - он и правда не умеет в русские буквы. Следовательно, правильный способ работать с такими pdf-файлами - подменять шрифт при попытке редактирования форм и при попытке печати/сохранении?
P.S. Совсем ламерский вопрос - есть ли в C++ волшебная команда, чтобы распечатать stack trace? Хочется проследить цепочку вызовов...
P.P.S. Если кто хочет помочь в отладке - как это делаю я, беру тот pdf по ссылке и вызываю для него команду pdftotext - это быстрее, чем okular/evince запускать.