java - example - PDF para saber si el texto está subrayado o una celda de tabla
pdfbox maven (5)
He estado jugando con PdfBox y el método PDFTextStripperByArea.
Pude extraer información si el texto está en negrita o cursiva , pero no puedo obtener la información de subrayado.
Por lo que yo entiendo en PDF, el subrayado se hace trazando líneas. Entonces, en teoría, debería poder obtener algún tipo de información sobre líneas en algún lugar alrededor del texto. Dando esta información, podría averiguar si el texto está subrayado o en una tabla.
Aquí está mi código hasta ahora:
List<TextPosition> textPos = charactersByArticle.get(index);
for (TextPosition t : textPos)
{
if (t.getFont().getFontDescriptor() != null)
{
if (t.getFont().getFontDescriptor().getFontWeight() > BOLD_WEIGHT ||
t.getFont().getFontDescriptor().isForceBold())
{
isBold = true;
}
if (t.getFont().getFontDescriptor().isItalic())
{
isItalic = true;
}
}
}
Intenté jugar con el objeto PDGraphicsState que se procesa en el método processEncodedText en la clase PDFStreamEngine , pero no hay información de las líneas que se encuentran allí.
¿Alguna sugerencia de dónde se podría recuperar esta información?
Como mencionas, PDFBox usa archivos de recursos para vincular operadores / instrucciones PDF a los visitantes que procesarán la información.
Probablemente lo mejor sea comenzar por copiar el visitante existente de PDFBox en su propia carpeta de origen, y luego agregar / extender la implementación desde allí.
Mi experiencia PostScript hace tiempo recuerda los operadores ''moveto'' y ''lineto''. Como el PDF está basado en PS, buscará algo similar.
http://learnpostscript.wordpress.com/category/lineto/
El formato PDF es ab * tch - es HTML, hecho mal. Representa la implementación gráfica, no la semántica. Incluso reconstruir oraciones es difícil: se colocan palabras o incluso caracteres individuales, el ''espacio'' o ''nueva línea'' deben reconstruirse algorítmicamente. En resumen, Adobe son * agujeros. Y Reader es un cerdo hinchado, inseguro, no ergonómico, plagado de errores.
Sin embargo, puede cumplir su requisito, si está dispuesto a poner, digamos, más de 12 horas de trabajo. Además de detectar por posición, los subrayados normalmente se emitirán en el PDF inmediatamente después del texto ... para que pueda enganchar su detección por documento PDF, no solo por la posición de la página.
Además, intente construir un PDF trivial de dos líneas con texto subrayado. ¡Entonces vea qué puede hacer con eso, analizándolo de nuevo! El subrayado debe sobresalir como bananas de perro, y una vez que puedas detectar eso, estarás en camino.
PDFBox no es muy bueno para la extensibilidad, es principalmente una gran cantidad de algoritmos. Por esta razón, solo copie el origen de PDFTextStripper (y tal vez tenga PageDrawer como referencia) y un prototipo desde allí.
¡Espero que esto ayude!
De acuerdo con la API getfont() devuelve el tamaño de fuente.
Puede usar el método getStyle() y devolverá STYLE_UNDERLINE
para la fuente subrayada. Por lo tanto, puedes recuperar el estilo de subrayado.
Esto es lo que descubrí hasta ahora:
PDFBox utiliza un archivo de recursos para enlazar operadores / instrucciones PDF a ciertas clases que luego procesan la información.
Si echamos un vistazo al archivo de recursos PDFTextStripper.properties en:
pdfbox / src / main / resources / org / apache / pdfbox / resources /
podemos ver que, por ejemplo, el operador de BT está vinculado a la clase org.apache.pdfbox.util.operator.BeginText y así sucesivamente.
El PDFTextStripper bajo
pdfbox / src / main / java / org / apache / pdfbox / util /
toma esto en cuenta y utiliza el procesamiento del PDF con estas clases.
PERO todos los objetos gráficos son ignorados, ¡por lo tanto, no hay información de subrayado o estructura de tabla!
Ahora, si echamos un vistazo al archivo de recursos de PageDrawer.properties , podemos ver que este limita a casi todos los operadores disponibles. Que es utilizado por la clase PageDrawer en
pdfbox / src / main / java / org / apache / pdfbox / pdfviewer /
El "truco" ahora es descubrir qué operadores gráficos son aquellos que representan el subrayado y las tablas y usarlos en combinación con PDFTextStripper .
Ahora esto significa leer la especificación del archivo PDF, que actualmente es mucho trabajo.
Si alguien sabe qué operadores son responsables de qué acciones dibujar subrayados y líneas de tabla, por favor avíseme.
Por lo que he entendido el pdfbox, no hay ninguna opción por la cual pueda leer el subrayado. Tal vez puedas probar itextpdf para este propósito.
puede usar Itext para generar informes en pdf.
al usar itext puedes poner las líneas de una manera fácil.
prueba el siguiente.
document.add (nuevo LineSeparator (0.5f, 50, null, 0, 198));
el código anterior se utiliza para generar líneas en el informe pdf. y establece las dimensiones de acuerdo a tu elección.
Espero que esto te ayudará.