2012-04-25 14 views
5

Tenemos un sistema que analiza archivos PDF y extrae el texto para indexar y tal. Un problema que hemos tenido es que Illustrator establece palabras que contienen "fi" para usar la ligadura para fi (glifo único).Cómo decidir la ligadura para "FI" en Java (y otros)

Por ejemplo esta línea ...

"banco y baldosas de cerámica vitrificada ricos".

aparece como este en mi Java depurador

"banco de ete y rica Vitri \ baldosas de cerámica u001Fed."

Parece que \ u001F es el código de caracteres que los archivos Adobe PDF usan para la ligadura "fi". Obviamente, podría cambiar las ocurrencias de \ u001F por "fi", pero ¿alguien sabe de una forma robusta de manejar esto y casos similares?

+0

ick. están usando caracteres de control unicode? !!! –

+0

no hay muchas ligaduras: ff, fl, ffl, fi, ffi son las principales (al menos en inglés). –

+0

Adobe tiene muchas codificaciones de conjunto de caracteres. Por lo tanto, depende de la biblioteca de PDF; por ejemplo, al escribir, uno selecciona una fuente y una codificación como CP1252 o más. En su caso, la única solución actual se encuentra aquí http://superuser.com/questions/220363/cleaning-up-pdftotext-font-issues –

Respuesta

4

La secuencia de bytes utilizada como operando para operadores de 'mostrar texto' en PDF (TJ, Tj, etc.) debe transformarse en texto utilizando la codificación de la fuente activa en el estado gráfico y el cmap ToUnicode asociado con la fuente . Algunas fuentes incluyen un cmap ToUnicode que mapea el código 0x001F (o el código que utilizó para el glifo) a los caracteres 'f' y 'l'. Otras fuentes usan una codificación con una matriz/Diferencias que mapea el código 0x1F a carácter/fl. Estas estructuras deben procesarse para obtener resultados correctos.

Cuestiones relacionadas