Cambia programáticamente el color de fuente del texto en PDF

No estoy familiarizado con la especificación de PDF en absoluto. Me preguntaba si es posible manipular directamente un archivo PDF para que ciertos bloques de texto que he identificado como importantes se resalten en los colores de mi elección. El idioma de elección sería python.

Es posible, pero no necesariamente fácil, porque el formato PDF es muy rico. Puedes encontrar un documento describiéndolo en detalle aquí . El primer ejemplo elemental que da acerca de cómo los PDF muestran el texto es:

BT /F13 12 Tf 288 720 Td (ABC) Tj ET 

BT y ET son comandos para comenzar y finalizar un objeto de texto; Tf es un comando para usar el recurso de fuente externa F13 (que es Helvetica) en el tamaño 12; Td es un comando para colocar el cursor en las coordenadas dadas; Tj es un comando para escribir los glifos de la cadena anterior. El sabor es algo así como “notación de pulido a la inversa” – oid, y de hecho es bastante parecido al PostScript, una de las otras grandes contribuciones de Adobe a la tipografía.

El problema es que no hay nada en las especificaciones de PDF que diga que el texto que “parece” que pertenece a la página tal como se muestra debe en realidad “estar” unido; dado que siempre se pueden dar coordenadas precisas, si el PDF se genera mediante un sistema de diseño de tipografía sofisticado, podría colocar el texto de manera precisa, carácter por carácter, por coordenadas. Por lo tanto, la reconstrucción de texto en forma de palabras y oraciones no es necesariamente fácil: es casi tan difícil como el reconocimiento óptico de texto, excepto que se le dan los caracteres de manera precisa (bueno, casi … algunas supuestas “imágenes” pueden mostrarse como caracteres) … ;-).

pyPdf es una biblioteca muy simple de Python que es un buen punto de partida para jugar con archivos PDF. Su función de “extracción de texto” es bastante elemental y no hace más que concatenar los argumentos de unos pocos comandos de dibujo de texto; verás que eso es suficiente en algunos documentos y es bastante inutilizable en otros, pero al menos es un comienzo. Como se distribuye, pyPdf no hace casi nada con los colores, pero con algunos piratería que pueden remediarse.

La poderosa biblioteca Python de reportlab está totalmente enfocada en generar nuevos PDF, no en interpretar o modificar los existentes. En el otro extremo, la biblioteca de Python pura pdfminer se enfoca completamente en analizar archivos PDF; hace algunos clústeres para tratar de reconstruir el texto en los casos en que las bibliotecas más simples se quedan perplejas.

No conozco una biblioteca existente que realice las tareas de transformación que usted desea, pero debería ser factible mezclar y combinar algunas de estas existentes para hacer la mayor parte del trabajo … ¡buena suerte!

Resaltar es posible en un archivo pdf con anotaciones en PDF, pero hacerlo de forma nativa no es tan fácil. Si alguna de las bibliotecas mencionadas proporciona tal facilidad, es algo que puede buscar.