Copying text from this document is not allowed?! You are kidding, right?

Сегодня был ещё один классный прикол. Л. поинтересовалась, нельзя ли из PDF скопировать текст. Я ответил, что вообще-то можно, но далеко не всегда и далеко не всегда – просто. Подошёл, смотрю, Adobe Reader дурит – текст выделяет, а копировать почему-то не хочет. Взял файл себе, открыл его xpdf и был до глубины души потрясён сообщением на терминале:

Copying text from this document is not allowed
или что-то вроде того.

Нет, ну я вообще… если эта дрянь может отобразить его на экране, какого, извините, чёрта она не может передать его в буфер?! Кем не разрешено? В общем, я подумал, и пришёл к выводу, что это в принципе невозможно реализовать на криптографическом уровне – программа должна иметь доступ к тексту, чтобы его нарисовать, если только он не хранится в графическом виде, но тут явно не тот случай…

Тогда я взял исходники xpdf и нашёл в них это сообщение. Там было что-то типа if(!okToCopy()) бла-бла-бла… Тогда я нашёл okToCopy(), которая делала странные манипуляции с какими-то правами доступа. И написал там вместо этого просто

return true;

Перекомпилировал, запустил. Работает! Правда текст почему-то перекодируется в Latin1, но это любой дурак может превратить обратно в русские буквы…
Потом я сделал патч на основе имеющихся исходников, запихнул его в /usr/ports/graphics/xpdf/files и сделал make package clean. Теперь у меня есть установочный пакет xpdf, в котором исправлен баг, заключающийся в корректной интерпретации прав доступа к документам PDF ^_-

Leave a Reply