descodificar códigos de fuente CID a caracteres ASCII equivalentes

Estoy intentando extraer texto de un montón de archivos PDF y algunos de ellos tienen fonts CID incrustadas en la salida:

(cid:80)(cid:72)(cid:87)(cid:68)(cid:70)(cid:76)(cid:87)(cid:76)(cid:72)(cid:86)(cid:3) (cid:177)(cid:3)(cid:71)(cid:72)(cid:191)(cid:81)(cid:72)(cid:71)(cid:3)(cid:69)(cid:92 (cid:3)(cid:56)(cid:49)(cid:3)(cid:43)(cid:68)(cid:69)(cid:76)(cid:87)(cid:68)(cid:87) (cid:3)(cid:68)(cid:86)(cid:3)(cid:70)(cid:76)(cid:87)(cid:76)(cid:72)(cid:86)(cid:3) (cid:90)(cid:76)(cid:87)(cid:75)(cid:3)(cid:80)(cid:82)(cid:85)(cid:72)(cid:3)(cid:87) (cid:75)(cid:68)(cid:81)(cid:3)(cid:20)(cid:19)(cid:3) 

Cuando miro ese fragmento exacto de texto en el PDF, las letras son ciertamente convertibles a ASCII:

captura de pantalla de la porción correspondiente de pdf

Esto probablemente sugiere que una deencoding de fuerza bruta funcionaría ( es decir, leer un fragmento de texto que se corresponde con un grupo de códigos CID y crear un mapeo de esa manera), pero ¿será esto confiable en muchos PDF diferentes? ¿Existe una asignación confiable de estos códigos CID a caracteres ASCII o dependerá en gran medida de la fuente en el PDF? ¿Cómo puedo determinar con qué carácter ASCII se corresponde el código CID (cid:72) ?

Para su valor, estoy extrayendo el texto usando PDFminer , que parece ser la única herramienta que realmente informa los códigos CID. Si existe una herramienta mejor para convertir archivos PDF a HTML o cualquier otro formato de texto analizable, ¡estoy abierto a otras sugerencias!

Como un bono adicional, esta pregunta parece estar relacionada con algunas otras preguntas sin respuesta, por lo que aquí hay una gran cantidad de reputación:

  • La fuente no puede ser extraída por PDFMiner
  • ¿Qué es esto (cid: 51) en la salida de pdf2txt?

Si bien es probable que pueda hacer esto por medio de adivinanzas para el ejemplo simple aquí, para hacerlo realmente necesitará 2 piezas adicionales de información:

1) La información del Suplemento de pedido de registro (ROS) para la fuente en cuestión. Esto usualmente será algo así como ‘Adobe-Japan1-5’ o algo así y es una propiedad informativa almacenada en la fuente. El ROS determina cómo deben interpretarse los DIC. Un CID dado en una fuente no es necesariamente lo mismo que un CID en otra fuente, a menos que las ROSes sean iguales. Es decir, CID12345 en Adobe-Japan1-5 no tiene la misma forma que CID12345 en Adobe-GB1-3!

2) Armado con la información de ROS, seleccione un CMap compatible y decodifíquelo. ASCII es un poco miope; Me gustaría ir con Unicode de la cual ASCII es un subconjunto. Puede encontrar archivos CMap para las ROS definidas por Adobe en http://sourceforge.net/projects/cmap.adobe/files/

Más información sobre CID y CMaps directamente de los inventores está disponible en http://www.adobe.com/content/dam/Adobe/en/devnet/font/pdfs/5014.CIDFont_Spec.pdf