Вкратце: (оригинальный) PDF не содержит информации, необходимой для обычного извлечения текста, как описано в спецификации PDF. В зависимости от точного характера вашей задачи, вы можете попытаться добавить необходимую информацию к существующим текстовым объектам и шрифтам или использовать OCR.
Отображение кодов символов в Unicode, как описано в спецификации PDF
Спецификация PDF ISO 32000-1 (и аналогично ISO 32000-2, тоже) описывает алгоритм преобразования кодов символов в значения Unicode, используя информацию, доступную непосредственно внутри PDF.
Он часто цитируется в других ответах о переполнении стека (см. здесь , здесь , здесь , здесь , здесь , или здесь ), поэтому я не буду приводить это здесь снова.
По сути, это алгоритм, используемый Adobe Acrobat во время копирования и вставки, а также многими другими экстракторами текста.
В PDF-файлах, которые не содержат информацию, необходимую для извлечения текста, вы в конечном итоге добираетесь до этой точки в алгоритме:
Если этим методам не удается получить значение Unicode, невозможно определить, что представляет собой символьный код, и в этом случае соответствующий читатель может выбрать код символа по своему выбору.
Что произойдет, если приведенный выше алгоритм не сможет получить значение Unicode
В этом случае реализации извлечения текста отличаются, они пытаются определить соответствующее значение Unicode, используя эвристику или информацию из PDF-файла или применяя OCR к рассматриваемому глифу.
То, что разные программы, которые вы пробовали, выдает такие разные результаты, показывает, что
ваш PDF не содержит информации, необходимой для алгоритма выше, из спецификации PDF и
эвристика, используемая этими программами, существенно различается, и эвристика Okular работает лучше всего для вашего документа.
Что делать в таком случае
Существует несколько вариантов, более или менее осуществимых в зависимости от конкретного случая:
Запросите у источника PDF версию, содержащую правильную информацию для извлечения текста.
Если у вас нет контракта с этим источником, который требует от них предоставления PDF-файлов в машиночитаемой форме, или если источник обязан иным образом делать это, они обычно будут отклоняться, хотя ...
Применить OCR к рассматриваемому PDF.
В зависимости от качества программного обеспечения OCR и глифов в PDF результаты могут быть сомнительного качества; например в заголовке «Глава 1: Производные ценные бумаги» в вашей «PDF copy text release-Text layer workaround.pdf» была определена как «Глава1: Deratve Securites» ...
Вы можете попробовать интерактивно добавить созданные вручную ToUnicode карты в PDF, например, как описано Тильманом Хаушерром в его ответе на "как добавить юникод в truetype0font на pdfbox 2.0.0" .
В зависимости от количества различных шрифтов, для которых необходимо создать сопоставления, этот подход может легко потребовать слишком много времени и усилий ...