Невозможно скопировать специальный символ из pdf

Мне просто нужно скопировать некоторый текст, включая специальный символ из файла pdf, но специальный символ, подобный тире (-) get, преобразуется в 2 .

PFA из ниже ссылки

http://www.fileconvoy.com/dfl.php?id=g6a3426746a10af3b9992384375c5923396bce3660 

В приложении есть pdf-файл, из которого мне нужно скопировать данные, а другое – изображение с экрана. Нужна срочная помощь. Я также попытался скопировать данные из pdf с помощью Google Docs и Adobe Pro, но аналогичный результат я получаю каждый раз.

В двух словах:

Вся информация в вашем PDF-файле указывает на то, что глифы в вашем PDF-файле, которые вы видите как тире, действительно представляют собой два . Таким образом, чтобы интерпретировать эти глифы по-разному, вам нужно либо кардинально изменить сопоставление значений для уникода для этого символа в своем шрифте в вашем PDF-файле, либо использовать оптическое распознавание символов.

В деталях:

Давайте рассмотрим часть вашего streamа содержимого pg_0001.pdf вашего PDF-файла, из которого отмечены вами слова

Просмотреть скриншот ved's

создаются:

 0 -1.1065 TD [(Fibroblast)-241.2(growth)-234.1(factor-21)-237.3(\(FGF-21\))-242.3(activity)-233.9(in)-237(High-fat)-237.9(diet)-234.9(\(HFD\))-238.3(fed)-234(ApoE)]TJ /F6 1 Tf 6.7246 0 0 5.9768 357.3354 542.4944 Tm (2)Tj /F4 1 Tf .8346 0 TD (/)Tj /F6 1 Tf .3372 0 TD (2)Tj /F4 1 Tf 8.9663 0 0 8.9663 372.9826 538.5259 Tm [(mice)-235.6(with)-233.5(adiponectin)-240.8(\(Acrp30\))-237.6(knockdown.)]TJ 

На самом деле ваши специальные символы представлены символом «2» (= 50 = 0x32) шрифта / F6 .

Поскольку сопоставление от символа в строке здесь, чтобы фактически напечатанный глиф, может быть довольно произвольным, и могут быть намеки на правильную интерпретацию, однако мы должны изучить определение этого шрифта / F6 на этой странице:

 < < /FirstChar 44 /ToUnicode 21 0 R /Encoding 22 0 R /FontDescriptor 23 0 R /BaseFont /KAHBDA+AdvP7DA6 /Subtype /Type1 /LastChar 50 /Type /Font /Widths [833 0 0 0 0 0 833] >> 

Таким образом, ваш шрифт расширяется путем сопоставления / ToUnicode, которые программы для извлечения текста должны использовать для интерпретации символов в streamе контента. Давайте посмотрим на это сопоставление:

 /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo < < /Registry (F6+0) /Ordering (T1UV) /Supplement 0 >> def /CMapName /F6+0 def /CMapType 2 def 1 begincodespacerange <2c> <32> endcodespacerange 2 beginbfchar <2c> <002C> <32> <0032> endbfchar endcmap CMapName currentdict /CMap defineresource pop end end 

Таким образом, здесь «2» = 0x32 отображается на <0032>, представляя код Unicode 0x0032, который еще раз равен «2».

Если сопоставления / ToUnicode не было, программа извлечения текста могла бы вместо этого использовать определение / Encoding в объекте PDF 22 0. Но здесь снова:

 22 0 obj < < /Type /Encoding /Differences [44 /comma 50 /two] >> 

Здесь «2» = 50 отображается на глиф с именем / two, который еще раз делает этот символ два .

Таким образом, вся информация, содержащаяся в вашем PDF-документе, которая не соответствует самому определению чертежа глифов (который теоретически может быть проверена OCR’ing), указывает на то, что символ-червь действительно является двумя .

Чтобы программа для извлечения текста интерпретировала этот символ больше по своему вкусу, вы должны заменить отображения / ToUnicode <32>, например, <002D>. К сожалению, это кодирование кодируется (с фильтром / FlateDecode ), поэтому это не просто работа с шестнадцатеричным редактором, а требует декодирования и т. Д.