O que é isso (cid: 51) na saída do pdf2txt?
Então, eu estou tentando extrair o texto de um arquivo pdf, preciso da sua posição, largura, altura, fonte.
Eu tentei muitos, mas a solução mais útil e completa parece serPDFMinere, neste caso, mais exatamentepdf2txt.py.
Eu segui o documento e os exemplos e tentei extrair o textoLearn More
do meu pdf usando este comando:
pdf2txt.py -Y normal -t xml -o buttons.xml buttons.pdf
E a saídabuttons.xml
parece assim:
<?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>
O primeiro caractere deve ser um L e 51(cid:51)
não parece coincidir com qualquer um dos caracteres que eu tenho na minha sentença, sobre omesa ascii e atabela utf-8
Então, como o título diz, eu me pergunto o que é, e como usá-los(cid:51)...
?
Então eu descobri que em vez de pegar o caractere real que o programa escreve (cid:% d) porque ele não reconhece que é uma string unicode.
Primeiro, chame esta função para escrever o caractere:
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)
Mas oassert
falhar e disparar o eventoPDFUnicodeNotDefined
que é capturado e chama:
def handle_undefined_char(self, font, cid):
if self.debug:
print >>sys.stderr, 'undefined: %r, %r' % (font, cid)
return '(cid:%d)' % cid
E é assim que eu termino com um arquivo contendo todos esses (cid:% d).
Eu sou relativamente novo em python e tento descobrir uma maneira de reconhecer esses caracteres, deve ser um não? Alguém tem alguma ideia?