PDF savoir si le texte est souligné ou une cellule de tableau

J’ai joué avec la méthode PdfBox et PDFTextSsortingpperByArea.

J’ai pu extraire des informations si le texte est en gras ou en italique , mais je ne parviens pas à obtenir les informations de soulignement.

Pour autant que je le comprenne en PDF, le soulignement se fait en dessinant des lignes. Donc, en théorie, je devrais pouvoir obtenir des informations sur les lignes quelque part autour du texte. En donnant cette information, je pourrais ensuite savoir si l’un des textes est souligné ou dans un tableau.

Voici mon code jusqu’ici:

List 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; } } } 

J’ai essayé de contourner l’object PDGraphicsState qui est traité dans la méthode processEncodedText dans la classe PDFStreamEngine mais aucune information sur les lignes qui s’y trouvent.

Toutes les suggestions d’où cette information pourrait être récupérée?

    Voici ce que j’ai découvert jusqu’à présent:

    PDFBox utilise un fichier de ressources pour lier les opérateurs / instructions PDF à certaines classes qui traitent ensuite les informations.

    Si nous examinons le fichier de ressources PDFTextSsortingpper.properties sous:

    pdfbox \ src \ main \ resources \ org \ apache \ pdfbox \ resources \

    nous pouvons voir que, par exemple, l’opérateur BT est lié à la classe org.apache.pdfbox.util.operator.BeginText et ainsi de suite.

    Le PDFTextSsortingpper sous

    pdfbox \ src \ main \ java \ org \ apache \ pdfbox \ util \

    prend cela en compte et utilise le traitement du PDF avec ces classes.

    MAIS tous les objects graphiques sont ignorés, donc aucune information de soulignement ou de structure de tableau!

    Maintenant, si nous examinons le fichier de ressources PageDrawer.properties , nous pouvons voir que celui-ci est lié à presque tous les opérateurs disponibles. Qui est utilisé par la classe PageDrawer sous

    pdfbox \ src \ main \ java \ org \ apache \ pdfbox \ pdfviewer \

    Le “truc” est maintenant de savoir quels opérateurs graphiques sont ceux qui représentent le soulignement et les tables et de les utiliser en combinaison avec PDFTextSsortingpper .

    Maintenant, cela signifierait la lecture de la spécification du fichier PDF, ce qui est actuellement beaucoup de travail.

    Si quelqu’un sait quels opérateurs sont responsables de quelles actions dessiner des soulignements et des lignes de tableau, faites le moi savoir.

    vous pouvez utiliser Itext pour générer des rapports pdf.

    en utilisant itext, vous pouvez facilement mettre les lignes.

    essayez le suivant

    document.add (new LineSeparator (0.5f, 50, null, 0, 198));

    le code ci-dessus est utilisé pour générer des lignes dans le rapport pdf. et définissez les dimensions en fonction de votre choix.

    J’espère que ceci vous aidera.

    Pour autant que j’ai compris la pdfbox, il n’existe pas d’option permettant de lire le soulignement. Peut-être que vous pouvez essayer itextpdf à cette fin.

    Comme vous le mentionnez, PDFBox utilise des fichiers de ressources pour lier les opérateurs / instructions PDF aux visiteurs qui traiteront les informations.

    Vous devriez probablement commencer par copier le visiteur existant de PDFBox dans votre propre dossier source, puis append / étendre l’implémentation à partir de là.

    Mon expérience PostScript ancienne rappelle les opérateurs “moveto” et “lineto”. Étant donné que PDF est à peu près basé sur PS, vous chercherez quelque chose de similaire.

    http://learnpostscript.wordpress.com/category/lineto/

    Le format PDF est ab * tch – c’est du HTML, mal fait. Il représente l’implémentation graphique, pas la sémantique. Même la reconstruction de phrases est difficile – les mots ou même des caractères individuels sont positionnés, le «espace» ou la «nouvelle ligne» doivent être reconstruits de manière algorithmique. En bref, Adobe est un * trous. Et Reader est un cochon non ergonomique, truffé de bogues, non sécurisé et gonflé.

    Cependant, vous pouvez accomplir vos exigences – si vous êtes disposé à placer, disons, plus de 12 heures de travail. En plus de détecter par position, les soulignements seront généralement émis dans le fichier PDF immédiatement après leur texte. votre détection par document PDF, pas seulement la position de la page.

    Essayez également de construire un fichier PDF simple de deux lignes avec un texte souligné. Ensuite, voyez ce que vous pouvez en faire, en l’analysant! Le soulignement devrait apparaître comme une banane de chien et une fois que vous pourrez le détecter, vous serez en bonne voie.

    PDFBox n’est pas très bon pour l’extensibilité, c’est principalement un gros tas d’algorithmes. Pour cette raison, copiez simplement la source PDFTextSsortingpper (et peut-être que PageDrawer pour référence) et le prototype à partir de là.

    J’espère que cela t’aides!

    Selon l’api, getfont () renvoie la taille de la police.

    Vous pouvez utiliser la méthode getStyle () et elle retournera STYLE_UNDERLINE pour la police soulignée. Ainsi, vous pouvez récupérer le style de soulignement.