Что это (cid:51) в выводе pdf2txt?
Поэтому я пытаюсь извлечь текст из PDF-файла, мне нужно его положение, ширина, высота, шрифт.
Я пробовал много, но наиболее полезным и полным решением выглядит PDFMiner, а в данном случае, точнее, pdf2txt.py.
Я следовал документам и примерам и пытался извлечь текст Learn More
из моего PDF с помощью этой команды:
pdf2txt.py -Y normal -t xml -o buttons.xml buttons.pdf
И выход buttons.xml
выглядит так:
<?xml version="1.0" encoding="utf-8" ?>
<pages>
<page id="1" bbox="0.000,0.000,799.900,449.944" rotate="0">
<textbox id="0" bbox="164.979,213.240,247.680,235.944">
<textline bbox="164.979,213.240,247.680,235.944">
<text font="KZNUUP+HelveticaNeue-Bold" bbox="164.979,213.240,178.978,235.944" size="22.704">(cid:51)</text>
<text font="KZNUUP+HelveticaNeue-Bold" bbox="173.280,213.240,187.278,235.944" size="22.704">(cid:76)</text>
<text font="KZNUUP+HelveticaNeue-Bold" bbox="181.315,213.240,195.313,235.944" size="22.704">(cid:72)</text>
<text font="KZNUUP+HelveticaNeue-Bold" bbox="189.350,213.240,203.348,235.944" size="22.704">(cid:89)</text>
<text font="KZNUUP+HelveticaNeue-Bold" bbox="194.795,213.240,208.793,235.944" size="22.704">(cid:85)</text>
<text font="KZNUUP+HelveticaNeue-Bold" bbox="203.096,213.240,217.094,235.944" size="22.704">(cid:3)</text>
<text font="KZNUUP+HelveticaNeue-Bold" bbox="206.987,213.240,220.986,235.944" size="22.704">(cid:52)</text>
<text font="KZNUUP+HelveticaNeue-Bold" bbox="219.684,213.240,233.682,235.944" size="22.704">(cid:86)</text>
<text font="KZNUUP+HelveticaNeue-Bold" bbox="228.237,213.240,242.235,235.944" size="22.704">(cid:89)</text>
<text font="KZNUUP+HelveticaNeue-Bold" bbox="233.682,213.240,247.680,235.944" size="22.704">(cid:76)</text>
<text></text>
</textline>
</textbox>
<textgroup bbox="164.979,213.240,419.659,235.944">
<textbox id="0" bbox="164.979,213.240,247.680,235.944" />
</textgroup>
</page>
</pages>
Первый символ должен быть L и 51 (cid:51)
похоже, не соответствует ни одному из символов, которые у меня есть в предложении, относительно таблицы ascii и таблицы utf-8
Итак, как говорится в заголовке, мне интересно, что это такое и как их использовать (cid:51)...
?
РЕДАКТИРОВАТЬ
Поэтому я обнаружил, что вместо получения реального символа программа пишет (cid:%d), потому что он не распознает, что это строка в кодировке Unicode.
Сначала она вызывает эту функцию, чтобы написать символ:
def render_char(self, matrix, font, fontsize, scaling, rise, cid):
try:
text = font.to_unichr(cid)
assert isinstance(text, unicode), text
except PDFUnicodeNotDefined:
text = self.handle_undefined_char(font, cid)
Но assert
провалить событие PDFUnicodeNotDefined
который пойман и звонит:
def handle_undefined_char(self, font, cid):
if self.debug:
print >>sys.stderr, 'undefined: %r, %r' % (font, cid)
return '(cid:%d)' % cid
И вот как я заканчиваю файл, содержащий все это (cid:%d).
Я довольно новичок в python и пытаюсь найти способ распознать эти символы, это должно быть одно нет? У кого-нибудь есть идеи?
1 ответ
Чтобы понять, как интерпретировать cid, вам нужно знать пару вещей:
Registry-Ordering-Supplement (ROS) информация о шрифте, о котором идет речь. Обычно это что-то вроде "Adobe-Japan1-5" и является информационным свойством, хранящимся в шрифте. ROS определяет, как CID должны интерпретироваться.
Вооружившись информацией о ROS, выберите совместимый CMap и декодируйте через него. Файлы CMap для ROS, определенных Adobe, можно найти по адресу http://sourceforge.net/projects/cmap.adobe/files/
Более подробную информацию о CID и CMaps непосредственно от изобретателей можно найти по адресу http://www.adobe.com/content/dam/Adobe/en/devnet/font/pdfs/5014.CIDFont_Spec.pdf
проверьте декодирование кодов шрифтов CID в эквивалентные символы ASCII для получения дополнительной информации