Trier des pages sur un critere "texte"  (Lu 5741 fois) Partager ce sujet Imprimer

1 B


moxuox  09 février 2018 : 11:26

Bonjour à tous,


J'ai fait quelques recherches sur le forum, mais je n'ai rien trouvé répondant à ma demande.
Voici donc ce que je souhaiterais faire :
Je reçois chaque semaine un fichier PDF contenant entre 1000 et 2000 pages.
Ce que je voudrais réaliser, c'est d’après un critère "texte", c'est a dire un mot,  extraire toutes les pages qui contiennent ce mot.
Par exemple toutes les pages contenant "Rouen" serait exportées vers l'imprimante virtuelle.
Cela semble simple, mais malgré mes recherches je n'ai pas trouvé.

À noter que j'ai une version Pro d'Acrobat.


Merci d'avance de votre aide !
 :soleil:

IP archivée


Merlin  09 février 2018 : 12:19

Bonjour et bienvenue.

Veux tu extraire les pages dans des fichiers séparés ou les réunir dans un seul ?
Pourquoi les exporter vers une imprimante virtuelle ? Dans quel but ?

IP archivée


bebarth  09 février 2018 : 14:01

bonjour,
Ce n'ai pas du "tout simple" mais j'ai déjà fait quelque chose comme ça...
Même question que Merlin : au final tu veux des fichiers individuels ou un seul fichier final ?
@+
 :bonjour:

IP archivée


moxuox  10 février 2018 : 13:14

Bonjour,


Je souhaiterai regrouper les pages  identiques dans un seul fichier.
Par exemple un fichier "rouen" comme dans mon exemple, un autre "paris" un autre "marseille"
L imprimante virtuelle c etait pour regouper ces pages en un fichier justement :)


merci à vous !

IP archivée


bebarth  10 février 2018 : 14:53

bonjour,
je pense que je devrais avoir quelque chose pour toi !
Je n'aurais pas le temps de regarder ce weekend, mais promis dès lundi.
@+
 :bonjour:

IP archivée


Merlin  10 février 2018 : 15:05

L'imprimante virtuelle c'était pour regrouper ces pages en un fichier justement
Pourquoi il ne faut jamais faire ça : https://is.gd/sRpyYK

La fonction d'enregistrement d'Acrobat Pro est plus simple à utiliser et pas du tout destructrice pour les fichiers PDF.
 
 

IP archivée


moxuox  10 février 2018 : 15:31

merci à vous deux pour toutes ces infos !  :bonjour:
à lundi !  :extra:

IP archivée


bebarth  12 février 2018 : 11:31

bonjour,
voici donc une action que j'ai créé à partir de 2-3 scripts déjà réalisés (il reste peut être quelques variables inutiles...).
Ici, pour accélérer le processus, je ne vérifie qu'une fois si le mot est présent sur la page, puis passe à la page suivante.
J'ai fait quelques vérifications et cela fonctionne. J'espère n'avoir rien oublié, sinon merci de me signaler le/les problèmes(s).
@+
 :bonjour:

IP archivée


moxuox  13 février 2018 : 21:53

Bonjour, tout d'abord merci pour le script ! je suis un néophyte dans ce domaine, mais j ai reussi à le recuperer via Notepad++ et l'inserer dans le fichier. Toutefois, il me donne un message d'erreur le voici : Syntaxerror : missing ; before statement 3 : à la ligne 4
la j'ai essayé de modifier , mais rien n y fait .  Merci !

IP archivée


bebarth  13 février 2018 : 22:35

bonsoir,
pourquoi ne charges-tu pas l'action ??? juste un double clique sur le fichier .sequ puis tu la lances (cf. copies d'écrans).
Je viens de chercher le mot "document" et extraire les pages dans l'api reference (779 pages) sans aucun problème en un peu plus de 5 minutes !!!
@+
 :bonjour:

IP archivée


moxuox  13 février 2018 : 23:10

Merci Bebarth ! ça marche très bien ! je pensais qu'il fallait insérer le script directement... avec ta méthode c est nettement plus simple ! petite question : dans le fichier généré, le mot clé est encadré en rouge. Comment supprimer ce cadre? le but est de pouvoir retrouver les pages sélectionnées dans leur état initial.
Encore merci pour ce script et pour ton aide ! :)

IP archivée


bebarth  14 février 2018 : 07:52

bonjour,
dans ce cas, tu supprimes les lignes :
            //Créer un rectangle sur le mot trouvé
            var q = this.getPageNthWordQuads(p, i);
            ...
            // Epaisseur des bords
            l.borderWidth = 2;
@+
 :bonjour:

IP archivée


moxuox  15 février 2018 : 22:47

Merci Bebarth, je regarde ça dans le week end ! mais ça marche c'est top ! :)

IP archivée


Merlin  27 février 2020 : 14:48


IP archivée


Simon  23 mars 2020 : 15:03

Bonjour à toutes et à tous,

Je recherche également une solution pour pouvoir extraire toutes les pages contenant un mot clé (numéro d'identifiant).


Un de mes programmes génère environ 200 pages de factures. Exemple :


Page N°1 : Facture Client A
Page N°2 : Facture Client A
Page N°3 : Facture Client A
Page N°4 : Facture Client B
Page N°5 : Facture Client C
etc..

Je peux les distinguer par le numéro d'identifiant du client. (A, B, C, etc.)

Je souhaite que toutes les factures du Client A soient dans un seul fichier pdf, les factures du Client B dans un autre fichier pdf, etc.



Je dispose d'Adobe Pro également.
Pouvez-vous me venir en aide ? :geek:

Merci à vous :)

IP archivée


Merlin  23 mars 2020 : 15:18

Bonjour et bienvenue

As-tu essayé ce qui est proposé ci-dessus ?

IP archivée


bebarth  23 mars 2020 : 15:39

bonjour,
La complexité va dépendre de comment c'est indiqué !
J'imagine que tu ne peux pas partager de fichier, alors peux-tu faire une copie d'écran de cette zone (numéro bidon, mais qui ressemble à ce qu'il pourrait être).
Dans ce cas il ne faut pas rechercher un mot (car on est supposé ne pas connaitre tous les numéros), mais "Facture Client" (2 mots) qui précèdent ce numéro.
@+
 :bonjour:

IP archivée


Simon  23 mars 2020 : 15:47

Bonjour,

Merci pour vos retours très rapides :)


Vous trouverez en PJ à quoi cela ressemble. Cet en-tête est présent sur chacune des 200 pages. Vous l'aurez compris, le numéro d'identifiant (compte) peut se trouver sur une ou plusieurs pages :)



Bien à vous :)


IP archivée


Merlin  23 mars 2020 : 16:42

On peut utiliser le GREP pour détecter une séquence de six chiffres :

\d{6,6}

Mais je ne vois pas bien ce qui suit, on dirait une barre…

IP archivée


Simon  23 mars 2020 : 16:58

Oui, il s'agit de "--" mais pas d'importance, nous avons des numéros de compte sur 6 caractères uniquement :)


En effet, cette solution peut me convenir !

Je peux également avoir une table de correspondance si besoin. Ex : Client A = 500500, Client B = 600600, etc.


Nos numéros de compte sont déjà définis et sont toujours les mêmes (cela change très rarement)

IP archivée


bebarth  23 mars 2020 : 17:36

Je regarde ça rapidement (tout est relatif en ces temps de confinement => certainement demain).
Je mets un fichier de correspondance .csv en pièces jointe du document pour enregistrer les différents nouveaux fichier avec le nom du client.
@+
 :bonjour:

IP archivée


Merlin  23 mars 2020 : 18:33

Oui, il s'agit de "--" mais pas d'importance, nous avons des numéros de compte sur 6 caractères uniquement
Justement, c'est super important d'avoir quelque chose de caractéristique avant et/ou après la séquence recherchée. Ça permet de plus facilement éviter de capter n'importe quelle séquence de 6 chiffres.
 :Smiley03:

IP archivée


Simon  23 mars 2020 : 20:23

Bonsoir,

J'ai testé la séquence "Trouver un mot et extraire les pages" selon le numéro du client, ex : 500083, et cela m'extrait bien les pages souhaitées.


J'ai essayé 500083-- et 500083---- et cela ne fonctionne pas.


J'ai également essayé avec le nom du client mais ça ne fonctionne pas non plus, il ne reconnait pas le texte.


Je te transfère en pièce-jointe une facture type pour que tu puisses effectuer des tests de ton côté également.

Merci beaucoup pour ton aide :)

IP archivée


bebarth  24 mars 2020 : 17:25

bonjour,
Désolé, ça ne sera pas pour aujourd'hui ! Moins de temps à consacrer et plus compliqué que prévu.
Jusqu'ici, pour moi, l'ordre des mots sur une page était celui du sens de lecture (et ça a toujours fonctionné).
Pour ton fichier, ce n'est pas le cas ! Pourquoi ???
Si tu veux essayer, tu lances de la console :
for (var p=0; p<this.numPages; p++) {
    var nbMots=this.getPageNumWords(p);
    for (var i=0; i<nbMots; i++) {
        var leMot=this.getPageNthWord(p, i, true);
        console.println(i+" : "+ leMot);
    }
}
Tu vois !!!
Ça veut dire que pour ton fichier il faut tester la position des tous les mots...
Merlin, as-tu une explication ?
@+
 :bonjour:

IP archivée


Merlin  24 mars 2020 : 19:46

Je suppose que la moulinette qui a servi à générer ce PDF n'est pas très respectueuse des spécifications du format et place les mots à l'aveuglette.
Ci-joint le même PDF auquel j'ai appliqué le balisage automatique d'Acrobat Pro : les mots s'affichent dans l'ordre de lecture.

Mais pourquoi vouloir détecter la position des mots ?
Comme on la chance que ce qu'on cherche (six chiffres consécutifs) n'existe pas ailleurs dans les pages il suffit de comparer leur valeur avec une regex GREP qui ne capte que les "mots" entiers de six chiffres (les tirets ne sont pas comptés comme des mots ni avec, on le voit dans les résultats du script : ils n'apparaissent pas).

Ces deux regex sont utilisables (et testées, contrairement à la précédente qui est trop gourmande) :

\b\d{6,6}\b
ou
\<\d{6,6}\>

IP archivée


bebarth  24 mars 2020 : 22:11

Ci-joint le même PDF auquel j'ai appliqué le balisage automatique d'Acrobat Pro : les mots s'affichent dans l'ordre de lecture.
Cool, je ne connaissais pas. J'ai essayé et ça fonctionne bien, par contre il me semble difficile de placer le balisage dans une action vu qu'il faut sélectionner manuellement une zone !

Mais pourquoi vouloir détecter la position des mots ?
Parce que je récupère également le nom de la société qui se trouve à côté du numéro de compte. Il faut vérifier que tous les mots de ce nom se trouvent sur la même ligne.

@+
 :bonjour:

IP archivée


Merlin  25 mars 2020 : 01:01

1. Normalement le balisage automatique fonctionne directement, sans rien demander.
Pas de souci pour l'automatiser (ci-joint).

2. OK, je comprend.

IP archivée


bebarth  25 mars 2020 : 06:04

bonjour,
C'est ce que j'ai fait, mais lorsque je lance l'action ça demande de sélectionner une zone !
@+
 :bonjour:

IP archivée


Merlin  25 mars 2020 : 10:00

Ci-joint une action qui ne demande rien.
Je suppose que tu n'as peut-être pas choisi la bonne commande.  :Euuuh:

IP archivée


bebarth  25 mars 2020 : 19:26

bonjour,
Voici le résultat final.
Le fichier de l'action est en pièce attachée au document joint.
Là aussi, je me suis un peu lâché !!!

Ci-joint une action qui ne demande rien.
Effectivement, elle ne demande rien et fonctionne très bien.
Par contre, intégrée à mon script et sur un document de 1350 pages, j'ai fait un essai sans (4 minutes) et un essai avec (plus d'une heure et demi). Et il manque un fichier final !!!

IP archivée


Merlin  26 mars 2020 : 01:00

et un essai avec (plus d'une heure et demi)
Ça ne me surprend pas, ce sont des opérations complexes.
En tout cas, chapeau bas encore une fois.
 :bravo:

IP archivée


Simon  02 avril 2020 : 21:14

Bonsoir à toutes et à tous,

Je souhaitais te remercier pour ce script qui fonctionne à la perfection !!! Chapeau l'artiste !  :bravo: :bravo:


Malheureusement, j'ai une petite erreur sur mon fichier de 160 pages :


"Recherche sur page 1
TypeError: pts is null
4990:byteCodeTool"

La différence qu'il y a par rapport aux pages PDF que l'on a testé, c'est qu'il y a des pages sur lesquelles il n'y a pas le pied de page "Coupon à joindre à votre règlement" car il y a 3 pages de factures par exemple, et ce pied de page est inséré à la dernière page. J'ai essayé plusieurs scénarios, et dès l'absence de pied de page, le script bloque et affiche cette erreur.  :mur:

Je te joins un fichier PDF qui reproduit cette erreur. La page 1 est correctement traitée (pied de page présent), tandis que l'erreur s'affiche sur la page 2 (pied de page absent) car le pied de page se situe sur la page 3.

Je te remercie énormément pour ton aide.  :bonjour:


Bonne soirée

IP archivée


bebarth  02 avril 2020 : 21:54

bonjour,
Je pense que le fait qu'il n'y a pas de coupon n'est qu'une coïncidence. Il doit y avoir une erreur (laquelle ????).
Si tu lances l'action de balisage automatique de Merlin, il n'y a plus de problème :
https://abracadabrapdf.net/forum/index.php?action=dlattach;topic=3410.0;attach=5162
Ci-joint ton fichier après balisage automatique.
@+
 :bonjour:

IP archivée


Simon  02 avril 2020 : 22:52

Je vous remercie vous deux, effectivement, il n'y a plus de message d'erreur.

En revanche, après la fin du script, seulement 6 nouveaux fichiers ont été créés.

Lorsque je relance le script, il m'extrait qu'une seule page sur les 156...  :doute:



Création des différents fichiers
Création dufichier pour N° de compte : Sans numéro de compte
––––––––––––––
Fin du process : 02-04 22:50
Durée du process : 3minutes 8.6 secondes




Est-ce que cela signifie qu'il ne reconnait pas le nom de la société ?  :Euuuh:

IP archivée


bebarth  03 avril 2020 : 09:54

bonjour,
... Et il manque un fichier final !!!
Lorsque j'avais essayé le balisage automatique, il me manquait également un fichier, mais je n'ai pas cherché le pourquoi !!!
Dans la version précédente du script, le numéro de compte était supposé être le mot suivant le mot "Compte", ce qui était apparemment tout le temps vrai avant le balisage.
Après balisage, il semble que ce ne soit plus le cas. J'ai donc modifié le script qui maintenant revérifie tous les mots après avoir trouvé le mot "Compte", qui vérifie si c'est bien un nombre et sa position par rapport au mot "Compte".
Idem pour les mots du nom de client.
Ci-joint une nouvelle action qui du coup devrait être un peu plus lente...
@+
 :bonjour:

IP archivée


Simon  03 avril 2020 : 10:37

Merci bien ! :)


Je teste ce soir et je te fais un retour !

Excellente journée.

IP archivée


Merlin  19 avril 2021 : 12:21

Je teste ce soir et je te fais un retour !
C'est un test vraiment approfondi !
 :Smiley01:

IP archivée