Extraiga preguntas individuales de un pdf y conviértalas en imágenes

Quiero extraer una imagen para cada pregunta en un .pdf (un examen como este ) para que se dividan así:

ejemplo de imagen de pregunta

Entonces, por ejemplo, q1.png para la pregunta 1, como arriba, y nuevamente para la pregunta 2, 3, etc.

Tengo toneladas de estos papeles que necesito dividir en imágenes como esa, y todos deben tener un ancho establecido. Cortarlos manualmente con un software de captura de pantalla llevaría una eternidad.

¿Hay algún software que pueda ayudarme con esto? ¿O un método inteligente o hacerlo más fácil?

Adobe Acrobat DC me permite recortar todas las páginas al ancho y la distancia correctos desde la parte superior de cada página, y puedo guardarlas todas como archivos .jpeg separados; esto es casi lo que necesito, aparte del hecho de que la altura de las preguntas varía. .

Respuestas (2)

Puede usar varias herramientas comunes de Unix para manipular los datos, aunque es posible que el esfuerzo no valga la pena si los archivos PDF originales son todos muy diferentes. Intenté lo siguiente:

Convierta el pdf a PostScript, que es más fácil de manipular usando pdf2ps (parte de ghostscript):

pdf2ps Question-paper.pdf out.ps

Mirando a través de este archivo, puede ver cómo las líneas horizontales (en las que escribir la respuesta) se dibujan con una cadena de subrayados: (_______________________________________________________________________________)

Utilice sed para convertir los subrayados en espacios:

sed <out.ps '/^(___________________________________________/s/_/ /g' >out2.ps

(Intenté eliminar la línea, pero el código PostScript es un poco oscuro y ya no funcionaba, por lo que es más fácil). Ahora tenemos páginas que podemos convertir a imágenes png usando ImageMagick:

convert -background white -alpha remove out2.ps -crop 450x500+40+40 -trim pic%02d.png

Esto genera archivos pic01.png y así sucesivamente, uno por página, recortando solo el rectángulo de tamaño 450x500 y desplazado xy +40+40, y luego recortando el espacio en blanco. Esto deja solo la pregunta visible, o en la página de continuación deja solo el texto: "la pregunta N continúa". Puede detectar estas imágenes no deseadas para eliminar por su pequeño tamaño, que puede obtener de

identify pic*.png

Sin embargo, si sus otros archivos PDF no usan la misma técnica de subrayado simple para completar la página, o si desplazan la página izquierda y la página derecha de manera diferente, etc., tendrá que modificar manualmente los comandos cada vez.

SI todos los documentos tienen solo el número de pregunta en un cierto rango, digamos los primeros 50 píxeles cuando se convierten en una imagen, entonces podría usar ImageMagick y tal vez un poco de secuencias de comandos (yo usaría python ) para:

  1. Convierta el pdf en una secuencia de imágenes (una por página) y luego
  2. Para cada imagen genere una tira que solo debe contener los números de pregunta
  3. Cree un histograma de esa tira e identifique qué tan abajo está algo en esa tira (posiblemente con una altura mínima para contar). Esto le dará la fila en la que comienza la pregunta.
  4. Luego puede usar estos números y su ancho preferido para dividir las imágenes en preguntas.
  5. Es posible que también deba agregar las imágenes donde la pregunta comienza en una página y continúa en la siguiente, puede identificarlas con el hecho de que hay algo en la página (histograma nuevamente, pero esta vez de todo el ancho de la página imagen), que está arriba del primer número de pregunta en esa página como se identificó arriba .

Si el diseño de los documentos incluye encabezados y pies de página, es posible que deba establecer las áreas que se considerarán, del mismo modo, si hay una página principal, etc., es posible que deba omitir páginas. Mucho depende de cuán consistente sea el diseño de los documentos, si todos son iguales, entonces escribir un guión de este tipo podría valer la pena.

Tenga en cuenta que, en el ejemplo que dio, cada pregunta comienza en una página nueva y puede detectar el inicio de la sección de respuestas a partir de un histograma porque tendrá una altura fija de espacio en blanco (blanco), seguida de una altura estrecha y fija de color negro. - la línea - entonces, si esto es representativo, puede comenzar justo debajo de la parte superior de la página, para omitir el borde, detectar el patrón para la primera línea de respuesta y tener su altura.

Este artículo también cubre una serie de herramientas de Python que también podría considerar usar o simplemente puede dividir sus documentos en páginas como imágenes y usar numpy/scipy para encontrar el inicio/final.

Si, como parece probable a partir de su pregunta, usted trabaja en el mundo académico, puede pedirle a un compañero de trabajo que esté enseñando Python o procesamiento de imágenes, que configure esto como un taller o un pequeño proyecto.