abracadabraPDF › Forums › PDF – Général › Trier des pages sur un critere "texte"
- Ce sujet est vide.
-
CréateurSujet
-
9 février 2018 à 10:26 #45798moxuoxMembre
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: -
CréateurSujet
-
AuteurRéponses
-
9 février 2018 à 11:19 #63329MerlinMaître des clés
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 ?9 février 2018 à 13:01 #63330bebarthMaître des clésbonjour,
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:10 février 2018 à 12:14 #63331moxuoxMembreBonjour,
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 justementmerci à vous !
10 février 2018 à 13:53 #63332bebarthMaître des clésbonjour,
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:10 février 2018 à 14:05 #63333MerlinMaître des clésL’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.
10 février 2018 à 14:31 #63334moxuoxMembremerci à vous deux pour toutes ces infos ! :bonjour:
à lundi ! :extra:12 février 2018 à 10:31 #63335bebarthMaître des clésbonjour,
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:13 février 2018 à 20:53 #63336moxuoxMembreBonjour, 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 !13 février 2018 à 21:35 #63337bebarthMaître des clésbonsoir,
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:13 février 2018 à 22:10 #63338moxuoxMembreMerci 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 !14 février 2018 à 06:52 #63339bebarthMaître des clésbonjour,
dans ce cas, tu supprimes les lignes :Code://Créer un rectangle sur le mot trouvé
var q = this.getPageNthWordQuads(p, i);
…
// Epaisseur des bords
l.borderWidth = 2;@+
:bonjour:15 février 2018 à 21:47 #63340moxuoxMembreMerci Bebarth, je regarde ça dans le week end ! mais ça marche c’est top !
27 février 2020 à 13:48 #63341MerlinMaître des clés23 mars 2020 à 14:03 #63342SimonMembreBonjour à 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.
[font=verdana, arial, helvetica, sans-serif]Pouvez-vous me venir en aide ?[/font] :geek:Merci à vous
23 mars 2020 à 14:18 #63343MerlinMaître des clésBonjour et bienvenue
As-tu essayé ce qui est proposé ci-dessus ?
23 mars 2020 à 14:39 #63344bebarthMaître des clésbonjour,
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:23 mars 2020 à 14:47 #63345SimonMembreBonjour,
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
23 mars 2020 à 15:42 #63346MerlinMaître des clésOn 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…
23 mars 2020 à 15:58 #63347SimonMembreOui, 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)
23 mars 2020 à 16:36 #63348bebarthMaître des clésJe 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:23 mars 2020 à 17:33 #63349MerlinMaître des clésOui, 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:23 mars 2020 à 19:23 #63350SimonMembreBonsoir,
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
24 mars 2020 à 16:25 #63351bebarthMaître des clésbonjour,
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 :Code:for (var p=0; pvar nbMots=this.getPageNumWords(p);
for (var i=0; ivar 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:24 mars 2020 à 18:46 #63352MerlinMaître des clésJe 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) :
bd{6,6}b
ou24 mars 2020 à 21:11 #63353bebarthMaître des clésCi-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:25 mars 2020 à 00:01 #63354MerlinMaître des clés1. Normalement le balisage automatique fonctionne directement, sans rien demander.
Pas de souci pour l’automatiser (ci-joint).2. OK, je comprend.
25 mars 2020 à 05:04 #63355bebarthMaître des clésbonjour,
C’est ce que j’ai fait, mais lorsque je lance l’action ça demande de sélectionner une zone !
@+
:bonjour:25 mars 2020 à 09:00 #63356MerlinMaître des clésCi-joint une action qui ne demande rien.
Je suppose que tu n’as peut-être pas choisi la bonne commande. :Euuuh:25 mars 2020 à 18:26 #63357bebarthMaître des clésbonjour,
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 !!!26 mars 2020 à 00:00 #63358MerlinMaître des cléset 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:2 avril 2020 à 19:14 #63359SimonMembreBonsoir à 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
2 avril 2020 à 19:54 #63360bebarthMaître des clésbonjour,
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:2 avril 2020 à 20:52 #63361SimonMembreJe 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 secondesEst-ce que cela signifie qu’il ne reconnait pas le nom de la société ? :Euuuh:
3 avril 2020 à 07:54 #63362bebarthMaître des clésbonjour,
… 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:3 avril 2020 à 08:37 #63363SimonMembreMerci bien !
Je teste ce soir et je te fais un retour !
Excellente journée.
19 avril 2021 à 10:21 #63364MerlinMaître des clésJe teste ce soir et je te fais un retour !
C’est un test vraiment approfondi !
:Smiley01: -
AuteurRéponses
- Vous devez être connecté pour répondre à ce sujet.