LINUX.ORG.RU

PDF и формы с кириллицей

 ,


1

3

В очередной раз спустя сколько-то лет попался 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 запускать.

Взял okular, открыл pdf по первой ссылке, увидел иероглифы сверху и «привет» снизу. Вроде все норм.

Pavval ★★★★★ ()
Ответ на: комментарий от RazrFalcon

Нету. Только gdb.

Т.е. есть, но это не одна библиотечная ф-ция.

Pavval ★★★★★ ()
Ответ на: комментарий от RazrFalcon

А, точно, в режиме отладки небось собрать надо. :) Придётся чуть дольше повозиться.

BattleCoder ★★★★★ ()

Баг подтверждаю. Только у меня буквы вводятся и отображаются только после перехода в режим forms, иначе только латиница.

kde-apps/okular-16.04.3

app-text/poppler-0.45.0

RazrFalcon ★★★★★ ()

есть ли в C++ волшебная команда, чтобы распечатать stack trace?

В glibc есть man backtrace, для C++ вывод надо будет пропустить через c++filt, и может линковать с -rdynamic. Но в gdb :bt проще использовать.

Следовательно, правильный способ работать с такими pdf-файлами - подменять шрифт при попытке редактирования форм и при попытке печати/сохранении?

Если в шрифте нету этих символов, то их нельзя им отобразить. Т.е. либо менять, либо выводить квадраты вместо них.

Повеселило:

Guy, do you have any updates?

«Эй парень, апдейты есть?»

xaizek ★★★★★ ()
Ответ на: комментарий от xaizek

«Эй парень, апдейты есть?»

Do you have any updates переводится исключительно как «есть новости» a.k.a «кагдила»/«нучотытам».

Pavval ★★★★★ ()
Ответ на: комментарий от BattleCoder

Версии poppler, okular?

Debian Testing. Okular 4:16.04.2-1, libpoppler-qt4-4 0.44.0-3

А если распечатать попробовать?

Не могу.

А что выдают команды pdfinfo file.pdf и pdftext file.pdf?

$  pdfinfo kanji_cyrillic_test.pdf 
Tagged:         no
UserProperties: no
Suspects:       no
Form:           AcroForm
JavaScript:     no
Pages:          1
Encrypted:      no
Page size:      595 x 842 pts (A4)
Page rot:       0
File size:      3360 bytes
Optimized:      no
PDF version:    1.4

$  pdftext kanji_cyrillic_test.pdf 
pdftext: command not found
Pavval ★★★★★ ()
Ответ на: комментарий от Pavval

Не могу.

Виртуального pdf-принтера нет? Если попробовать распечатать на такой принтер, должен получиться pdf без форм, но с текстом.

BattleCoder ★★★★★ ()
Ответ на: комментарий от Pavval

Безусловно, но почему обращение к одному парню? )) (понимаю, что опечтка, скорее всего, но до??аться хотелось =)

UVV ★★★★★ ()
Ответ на: комментарий от UVV

Ух ты, и правда. Ток сейчас заметил. Банальная опечатка.

BattleCoder ★★★★★ ()
Ответ на: комментарий от BattleCoder

Виртуального pdf-принтера нет? Если попробовать распечатать на такой принтер, должен получиться pdf без форм, но с текстом.

Дык так же есть текст только в форме.

Pavval ★★★★★ ()
Ответ на: комментарий от false

неа, так и не нашёл времени и желания покопаться. а разработчикам poppler дела нет...

BattleCoder ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.