2013-03-30 2 views
1

Хорошо, я провел некоторое исследование по этому вопросу, но поскольку название указывает, что я не эксперт. Итак, вот в чем проблема: я извлекаю текст из pdf-файлов, используя python и lib pdfminer.Cidfonts and mapping

Я только пробовал документы с латинскими символами, и он работает хорошо в большинстве случаев, за исключением случаев, когда шрифт не является латинским/западным. Документ, который меня сейчас пугает, использует латинские символы из японского шрифта. Adobe сообщает мне, что кодировка Adobe-Identity. Все, что я получаю, это cid char, и я не могу найти связанный cidmap.

Я знаю, что я не использую правильные термины, я имею в виду, что PDF-файл сообщает мне cid=3, и я знаю, что символ - это пробел. Я вручную написал карту для символов в диапазоне 0x00-0xFF. Некоторые источники сообщают, что он соответствует кодировке «mac-roman», другие не согласны. Другие источники говорят, что это соответствует отображению OpenType, но я не мог найти ничего кроме 0xFF. И у меня есть cids> 3000.

Вы можете сказать, что я очень смущен, поэтому вам предлагается исправить мою терминологию, но то, что я хочу, - это карта, которая соответствует моей, но расширенной для диапазона 0x0100-0xFFFF.

ETA: ссылка на подслушивания PDF http://www.sas.upenn.edu/~jtigay/JapanVol.pdf
ETA2: Я нашел это ftp://ftp.oreilly.com/pub/examples/nutshell/cjkv/adobe/aj14.tar.Z cid2code.txt в архиве есть вид карты я ищу. Но для всех этих шрифтов столбец cid кажется «сдвинутым» на два: cid1-карты в космос.
ETA3: исправлена ​​кодировка

+0

Ваш файл [JapanVol.pdf] (http://www.sas.upenn.edu/~jtigay/JapanVol.pdf) не соответствует вашему описанию. Единственными шрифтами, использующими Adobe-Japan1, являются HiraKakuStdN-W4 и RyuminPr5-Regular, а для первого - встроенные глифы - цифры от 0 до 9, а для последнего - только «-», «1», и «3». Там особенно нет встроенного для них пространственного глифа. Таким образом, когда вы говорите *, в PDF-сообщении мне сообщается, что cid = 3, и я знаю, что char - это пробел, * вы ** не ** проверяете глифы шрифта с помощью CID от Adobe-Japan1. – mkl

+0

Err, я так смущен, что очень сложно объяснить мою проблему. В этом файле есть шрифт «Times», и он не читается. Калибр не может его преобразовать (пустые страницы), и когда я открываю документ с помощью pdfminer, я получаю только идентификаторы CID, а не символы unicode. Я полностью «декодировал» то, что я называю картой: когда я заменяю cid = 3 пробелом (и т. Д.), Я могу перестроить текст. И мне очень жаль, что на этой карте так много пробелов. Самый большой CID в этом документе - 3013. Я не хочу заполнять карту вручную. ETA: это кодировка Adobe-Identity, вы правы – bobrobbob

ответ

3

Вы можете искать для таблиц, представленных в Adobe Developer Support Техническую ноту # 5078

Adobe-Japan1-6 Character Collection for CID-Keyed Fonts

в сочетании с фоновым знанием, представленной техническим Примечание № 5014

Adobe CMap and CIDFont Files Specification.

К сожалению, вы еще не указали документ , который содержит ошибки; таким образом, я не могу проверить, действительно ли ссылка действительно подходит.

EDIT

Как вы исправил свой вопрос и теперь просят the special-purpose Adobe-Identity-0 ROS(«РОС» представляет собой аббревиатуру/Реестр,/Заказ и/Supplement, которые представляют три элемента словаря/CIDSystemInfo, что зайдите в CIDFont и CMap ресурсы) вместо Adobe-Japan1- ?, ссылки, которые вы больше не интересуете. К сожалению, однако, Adobe-Identity, по-видимому, является выборкой ROS, когда ни один из публичных ROS не применим. Таким образом, похоже, что нет никакого общего ответа на ваш вопрос относительно CID карты для unicode.

Кроме того, карты /ToUnicode этих Времена шрифтов в PDF все выглядеть следующим образом:

/CIDInit /ProcSet findresource begin 
12 dict begin 
begincmap 
/CIDSystemInfo << 
    /Registry (Adobe) 
    /Ordering (UCS) 
    /Supplement 0 
>> def 
/CMapName /Adobe-Identity-UCS def 
/CMapType 2 def 
1 begincodespacerange 
<0000><FFFF> 
endcodespacerange 
endcmap 
CMapName currentdict /CMap defineresource pop 
end 
end 

(Здесь CIDSystemInfo интересно отличается от того, в самом PDF шрифта объекта, Adobe- Идентичность-0.)

Согласно спецификации PDF ISO 32000-1:2008 разделе 9.10.3, хотя,

он должен использовать операторы beginbfchar, endbfchar, beginbfrange и endbfrange для определения отображения из кодов символов в последовательности символов Unicode, выраженные в кодировке UTF-16BE.

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

нет никакого способа, чтобы определить, какой код символа представляет в этом случае соответствующий читатель может выбрать код символа по своему выбору.

+0

Спасибо, там много информации (мне понадобится некоторое время, чтобы изучить все это). Я редактировал сообщение, чтобы добавить ссылку на документ. – bobrobbob