Estoy haciendo un programa java para leer archivos PDF encriptados y extraer el contenido del archivo página por página incluyendo el texto, las imágenes y sus posiciones (coordenadas x, y) en el archivo. Ahora estoy usando PDFBox para este propósito y obtengo el texto y las imágenes. Pero no pude obtener la posición del texto y la posición de la imagen. También hay algunos problemas al leer algunos archivos PDF encriptados.Leer texto y ubicaciones de imagen (coordenadas xy) usando PDFBox
Respuesta
Tome un vistazo a org.apache.pdfbox.examples.util.PrintTextLocations
. Lo he usado bastante y es muy útil hacer análisis sobre el diseño de elementos y cuadros delimitadores en documentos PDF. También reveló elementos impresos en tinta blanca, o fuera del área imprimible (presumiblemente, marcas de agua de documentos u objetos "olvidados" que el autor ha apartado de su vista).
Ejemplo de uso:
java -cp app/target/pdfbox-app-1.5.0.jar org.apache.pdfbox.examples.util.PrintTextLocations ~/tmp/mydoc.pdf >~/tmp/out-text-locations.txt
que obtendrá algo así:
Processing page: 0
String[53.9,59.856995 fs=-6.0 xscale=6.0 height=-3.666 space=1.3320001 width=4.6679993]A
String[58.568,59.856995 fs=-6.0 xscale=6.0 height=-3.666 space=1.3320001 width=2.6640015]f
String[61.232002,59.856995 fs=-6.0 xscale=6.0 height=-3.666 space=1.3320001 width=1.6679993]e
...
que se puede analizar y utilizar para trazar la posición del elemento fácilmente, saltando de la caja, y el "flujo" (trayectoria a través de todos los elementos), etc. para cada página. Como estoy seguro de que ya sabe, encontrará que PDF puede ser casi imposible de convertir a texto. En realidad, es solo un formato de descripción gráfica (es decir, para la impresora o la pantalla), no un lenguaje de marcado. Podrías crear fácilmente un PDF que imprima "Hola mundo", pero que salte aleatoriamente a través de las posiciones de los personajes (y que utilice glifos diferentes a cualquier codificación ISO, si así lo deseas), haciendo que el PDF sea muy difícil de convertir a texto. No hay noción de "palabra" o "párrafo". Un documento de dos columnas, por ejemplo, puede ser una pesadilla para analizar en texto.
Para la segunda parte de su pregunta, tuve buenos resultados usando xpdf versión 3.02, después de la fijación Xref.cc (hacer XRef::okToPrint()
, XRef::okToChange()
, XRef::okToCopy()
XRef::okToAddNotes()
y todos regresan gTrue
). Eso es para manejar documentos bloqueados, no cifrados (hay otros utilidades para eso).
- 1. PDFBox - obtener ubicaciones de palabras (y no solo caracteres)
- 2. ¿Cómo puedo transformar las coordenadas XY y la altura/ancho de una imagen escalada en una imagen de tamaño original?
- 3. Java - PDFBox - Extracción de texto
- 4. Extraer texto entre dos marcadores usando Apache PdfBox
- 5. Leer texto de una imagen con PHP
- 6. leer números y letras de una imagen usando openCV
- 7. Mathematica: Texto en Graphics3D relativo a coordenadas de imagen
- 8. PDF Análisis con texto y coordenadas
- 9. ¿Cómo colocar exactamente una imagen dentro de una página PDF existente usando PDFBox?
- 10. Cómo firmar pdf en Java usando pdfbox
- 11. No se puede agregar una imagen a un PDF usando PDFBox
- 12. PDFBox extracción de párrafos
- 13. extraer imágenes del pdf usando pdfbox
- 14. Identificación de ubicaciones geográficas en el texto
- 15. Leer el texto de la imagen iPhone SDK
- 16. Leer las coordenadas x y z del teléfono Android usando el acelerómetro
- 17. Leer texto del archivo de imagen en Java
- 18. Animación simple de coordenadas 2D usando matplotlib y pyplot
- 19. Agregar BufferedImage al documento PDFBox
- 20. Cómo obtener el color de fuente usando pdfbox
- 21. Crear, guardar y leer archivo de texto
- 22. Marca de agua con PDFBox
- 23. PDFBox imagen borrosa cuando se inserta en pdf en Java
- 24. Convertir texto en imagen usando javascript
- 25. Cómo compilar PDFBox para .Net
- 26. ¿Cómo obtener las coordenadas XY de un control en tiempo de ejecución en WPF?
- 27. Leer texto de InputStream
- 28. UIView arrastre (imagen y texto)
- 29. Leer archivo de texto (Unicode) en 'C' usando Win32 nativo
- 30. Usando FileFormat v Serde para leer archivos de texto personalizados