[PROJET] PDF -> TXT -> CSV [Résolu]

christophe68_is 16 Messages postés mercredi 25 avril 2018Date d'inscription 18 mai 2018 Dernière intervention - 15 mai 2018 à 15:40 - Dernière réponse : christophe68_is 16 Messages postés mercredi 25 avril 2018Date d'inscription 18 mai 2018 Dernière intervention
- 18 mai 2018 à 09:15
Hello tout le monde,

J’espère que vous allez bien. Je progresse sur mon apprentissage du langage VB (petit à petit), et je me lance dans un nouveau projet pour aider les utilisateurs à éviter de saisir des données répétitives extrait d'un document PDF.
Le but, ouvrir un fichier PDF, extraire l’ensemble des valeurs txt contenu dans les différents champs du document, et sélectionner certaines valeurs puis les extraire dans un fichier au format CSV.

J’ai commencé mon projet :

J’ai créé une fenêtre avec un objet : AxAcroPDF1 (fenêtre pour visualiser mon document PDF)
Un bouton pour sélectionner le document à ouvrir :

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        RichTextBox1.Clear()
        Me.OpenFileDialog1.Filter = String.Empty
        Me.OpenFileDialog1.ShowDialog()
        Me.AxAcroPDF1.LoadFile(Me.OpenFileDialog1.FileName)
        Threading.Thread.Sleep(2000) 
        //j'ai remarqué qu'il fallait un temps pour charger le document, sinon le cc fonctionne pas
        AxAcroPDF1.Focus()
        My.Computer.Keyboard.SendKeys("^a", True)
        //idem pour faire le CTRL a
        Threading.Thread.Sleep(1000)
        My.Computer.Keyboard.SendKeys("^c", True)


Je me base sur la function sendkeys, pour effectuer un copier/coller du document PDF, et récupérer les valeurs des champs en TXT

J’affiche le contenu de mon copier coller dans un RichTextBox.

Tout fonctionne parfaitement. Par contre j’ai des lignes, avec des retours à la ligne :
1 *******
2********
3********
X ********

Là où je coince, je veux créer un bouton pour juste extraire la ligne 3 et 4 dans un fichier CSV, j’ai aucune idée même de l’approche, si vous pouvez m’aider, se serait avec grand plaisir.

Merci par avance, Christophe

EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.
Afficher la suite 

Votre réponse

4 réponses

Whismeril 11534 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 22 mai 2018 Dernière intervention - 16 mai 2018 à 21:29
0
Utile
Bonjour,

ton approche n'est pas la bonne.
Il existe plein d'outils .Net qui permettent de charger un pdf sans l'afficher, et d'accéder à ses données.

https://sourceforge.net/projects/itextsharp/

https://www.qwant.com/?q=open+pdf+dot+net&t=all

Et si ce que tu trouves est en C# (ben c'est le langage .Net originel)
https://www.qwant.com/?q=C%23+to+VB.Net&t=all
Commenter la réponse de Whismeril
christophe68_is 16 Messages postés mercredi 25 avril 2018Date d'inscription 18 mai 2018 Dernière intervention - 17 mai 2018 à 08:59
0
Utile
Bonjour,

merci pour ta réponse, j'avais effectivement déjà un peu fouiller sur le net et j'avais trouvé cette url: https://sourceforge.net/projects/itextsharp/

L'afficher, cela m'intéresse beaucoup, car dans la fenêtre form, cela permet à l'utilisateur de sélectionner et visualiser les données du PDF.

J'ai un peu progressé sur mon petit projet, j'ai utilisé un timer1 pour compter les lignes, et j'ai modifié ma fenêtre de réception des donnée en utilisant : TextBox1.

Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Label1.Text = "LINES : " & TextBox1.Lines.Length + 1
End Sub

A présent un petit label pour afficher le nombre de ligne, ça marche nickel, sauf que je dois faire "+1" pour avoir le résultat correct, je ne sais pas si il prend le 0 comme référence.

Maintenant que j'ai ça, il faut juste que je trouve comment faire une extraction de la ligne 12, 30, par exemple, ça c'est une autre histoire.
Commenter la réponse de christophe68_is
cs_Le Pivert 5144 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 19 mai 2018 Dernière intervention - Modifié par cs_Le Pivert le 17/05/2018 à 11:51
0
Utile
Bonjour,

Pourquoi un timer?

Ces 2 lignes suffisent:

   MsgBox(TextBox1.Lines.Length)'nombre de lignes
        MsgBox(TextBox1.Lines(3))' affiche la 4ème ligne


christophe68_is 16 Messages postés mercredi 25 avril 2018Date d'inscription 18 mai 2018 Dernière intervention - 18 mai 2018 à 09:15
Merci, en effet c'est ce que j'ai fait, en récupérant les valeurs dans des variables! Je me complique la vie pour rien, :-)
Commenter la réponse de cs_Le Pivert

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.