IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Découper un pdf


Sujet :

Python

  1. #21
    Invité
    Invité(e)
    Par défaut
    En fait, jusqu'à présent j'écris le code sur Notepad++ et le converti en python.

    Que me conseilles tu ? Pycharm ?

  2. #22
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 954
    Points : 9 284
    Points
    9 284
    Par défaut
    Citation Envoyé par fnallet94 Voir le message
    En fait, jusqu'à présent j'écris le code sur Notepad++ et le converti en python.
    Comment ça ?
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  3. #23
    Invité
    Invité(e)
    Par défaut
    j'écris le code sur Notepad++ et il me met l'extension .py sur le fichier.
    Et je double clique sur le fichier créé.
    D'habitude les autres programmes fonctionne.

    au fait, oui par pip.

    Nom : Pip.PNG
Affichages : 133
Taille : 9,8 Ko

  4. #24
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 954
    Points : 9 284
    Points
    9 284
    Par défaut
    Citation Envoyé par fnallet94 Voir le message
    j'écris le code sur Notepad++ et il me met l'extension .py sur le fichier.
    Et je double clique sur le fichier créé.
    Houla ! c'est sûr qu'en faisant comme cela tu ne vas pas voir ce que se passe si il y a un problème.

    Ouvre une invite de commande (cmd.exe) et lance ton programme par python.exe <nom du fichier.py>
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  5. #25
    Invité
    Invité(e)
    Par défaut
    print(result.group(1))
    AttributeError: 'NoneType' object has no attribute 'group'

    De quelle maniere difinie t on le group ?

  6. #26
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 954
    Points : 9 284
    Points
    9 284
    Par défaut
    Citation Envoyé par fnallet94 Voir le message
    print(result.group(1))
    AttributeError: 'NoneType' object has no attribute 'group'
    là c'est normal car si tu n'adaptes pas le code à ton PDF (en particulier la partie expression régulière) il n'y a aucune chance pour que cela fonctionne.

    faire un print(text) pour voir si tu récupères les numéros de factures :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     text = page.get_text()
     print(text)
    et voir dans tout ce qui est extrait si il y a bien les numéros de facture et voir ce qu'il y a sur les lignes avant et après
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  7. #27
    Invité
    Invité(e)
    Par défaut
    en fait il me recupere trop d'info
    Qté
    Montant
    MAINTENANCE 2022
    FA128279
    1
    Page
    Prix Brut
    Facture N°:
    REFERENCE:
    Adresse de livraison
    Mode de règlement
    Echéance
    PRELEVEMENT

    J'aurais juste besoin de FA128279

  8. #28
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 954
    Points : 9 284
    Points
    9 284
    Par défaut
    Citation Envoyé par fnallet94 Voir le message
    en fait il me recupere trop d'info
    c'est normal c'est tout le texte qui se trouve dans le PDF !
    en fait il faut te synchroniser sur MAINTENANCE 2022
    tu peux essayer en expression régulière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    result = re.search(r'^MAINTENANCE 2022[\r\n]+(.*)$',text,flags=re.MULTILINE)
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  9. #29
    Invité
    Invité(e)
    Par défaut
    ca a marche, par contre cela ne m'a sorti qu'une facture.

    Est il possible de ne pas prendre l'année en compte, soit 2022?
    Car l'année prochaine cela ne marchera pas.

    Vraiment merci pour ta patience

  10. #30
    Invité
    Invité(e)
    Par défaut
    Bonjour et merci à tous.

    Cela fonctionne maintenant très bien.


    Est-il possible de ne pas prendre l'année en compte, soit 2022 dans le champs recherché qui est "Maintenance 2022" ?
    Car l'année prochaine cela ne marchera pas.
    Dernière modification par Invité ; 09/10/2022 à 14h35.

  11. #31
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Je reviens sur ce sujet car j'ai édité un autre PDF et celui-ci n'est pas lu par le programme, pourtant il est bien en mode texte aussi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      File "C:\Users\XXXX\main.py", line 30, in <module>
        doc = fitz.open(filename)
      File "C:\Users\XXXX\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\fitz\fitz.py", line 3867, in __init__
        raise FileNotFoundError(msg)
    fitz.fitz.FileNotFoundError: no such file: 'VIRM8-1-200.pdf'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    import os
    import fitz
    import re
     
    from pathlib import Path
     
    #recuperer les données dans un fichier
    fichier = open('donnees.txt', 'r')
     
    cheminFacturesMasse = fichier.readline()
    cheminFacturesMasse = cheminFacturesMasse.replace('\n', '')
    cheminFacturesIndividuelles= fichier.readline()
    cheminFacturesIndividuelles=cheminFacturesIndividuelles.replace('\n', '')
    variableRecherche= fichier.readline()
    variableRecherche=variableRecherche.replace('\n', '')
     
     
    fichier.close
     
    #Recupere le chemin relatif
    directory = Path(__file__).parent
    #print(f"Répertoire de sauvegarde est {directory}")
     
     
    #for filename in os.listdir(directory):
     
    #Boucle pour appliquer le code sur tous les fichiers du repertoire
    for filename in os.listdir(cheminFacturesMasse+"//"):
        if filename.endswith('.pdf'):
            doc = fitz.open(filename)      
     
            print("nb pages : " + str(doc.page_count))
            prevNum = -1
     
     
            for x,page in enumerate(doc,start=0):
                text=page.get_text()
                #print(text)
                #os.system("pause")  
                #result = re.search(r'^MAINTENANCE 2022[\r\n]+(.*)$',text,flags=re.MULTILINE)
                result = re.search(r'^'+variableRecherche+'[\r\n]+(.*)$',text,flags=re.MULTILINE)
                #print(result.group(1))
                numfacture = result.group(1)
     
                if numfacture == prevNum:
                    y=y+1
                else:
                    y=0
     
     
                if not os.path.exists('Factures'):
                    os.makedirs('Factures')
     
                doc2 = fitz.open()  # on crée un nouveau PDF
                doc2.insert_pdf(doc,from_page=x-y,to_page=x)
                #doc2.save("factures" +"//"+ numfacture + ".pdf")
                doc2.save(cheminFacturesIndividuelles +"//"+ numfacture + ".pdf")
                prevNum = numfacture
                #os.system("pause")
        else:
            continue

  12. #32
    Invité
    Invité(e)
    Par défaut
    Je ne m'en sors plus.

    Le programme fonctionne dorénavant mais quand je créé un exécutable avec "Auto-py-to-exe", il ne fonctionne plus.

    Ci-dessous le message d'erreur :
    Nom : Capture.PNG
Affichages : 117
Taille : 10,1 Ko

  13. #33
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour

    Citation Envoyé par fnallet94 Voir le message
    Le programme fonctionne dorénavant mais quand je créé un exécutable avec "Auto-py-to-exe", il ne fonctionne plus.
    C'est normal. Auto-py-to-exe est une version graphique de pyinstaller. Ce programme ne fait pas une compilation native comme le C peut en faire, mais plutôt une "encapsulation" du code Python, des modules qu'il utilise et de l'interpréteur Python lui-même. Lorsqu'on lance l'exe, il se "déarchive" dans un répertoire temporaire et s'exécute dans celui-ci. La conséquence, c'est que les adresses d'accès à des fichiers non-python doivent souvent être recalculées.

    Avec pyinstaller, voilà un petit code qu'on peut placer au début de l'exécution et qui permet ce calcul dans les 2 cas: version ".py" et version ".exe":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    import sys
    if getattr(sys, 'frozen', False) and hasattr(sys, '_MEIPASS'):
        # exécution en exe après traitement par pyinstaller (onedir ou onefile)   
        REPEXE = sys._MEIPASS # répertoire  (temporaire) des modules
        REPFICEXE = os.path.dirname(sys.executable) # répertoire de l'exe
    else:
        # exécution en .py
        REPEXE = REPFICEXE = os.path.dirname(os.path.abspath(__file__)) # répertoire du .py exécuté
    Une fois connu le répertoire temporaire, on peut calculer l'adresse d'un fichier non-python (par exemple une image) se trouvant dans l'exe avec os.path.join(REPEXE, image.jpg)

    Pour en connaître plus: voir la doc de pyinstaller:
    https://pyinstaller.org/en/stable/ru...formation.html
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  14. #34
    Invité
    Invité(e)
    Par défaut
    Ce que je ne comprends pas c'est pour le programme fonctionne quand je lance le main.py via l'invite de commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Microsoft Windows [version 10.0.19044.2130]
    (c) Microsoft Corporation. Tous droits réservés.
     
    C:\Users\XXXXX>python.exe main.py
    nb pages : 200
    Mais ne fonctionne pas quand je double-clique sur le fichier lui même :

    Nom : Capture.PNG
Affichages : 111
Taille : 1,9 Ko

    et lorsque je créé son executable via auto.py-to-exe.
    Il lance le programme, mais il s'arrete en cours.
    Il doit bien lire le dossier, puisqu'il m'indique dans un message d'erreur le nom du fichier ("VIRM8.pdf") qu'il trouve, mais au moment de sa lecture, il me dit qu'il ne le trouve pas. C'est pas cohérent.

    Nom : Capture1.PNG
Affichages : 109
Taille : 11,5 Ko

  15. #35
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 986
    Points
    30 986
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par fnallet94 Voir le message
    Ce que je ne comprends pas c'est pour le programme fonctionne quand je lance le main.py via l'invite de commande :

    Mais ne fonctionne pas quand je double-clique sur le fichier lui même :
    Il te faut associer, dans windows, l'extension ".py" au programme dédié à le traiter (Python.exe). Tout comme tu associes un ".docx" à Word ou un ".mp4" à vlc.

    Citation Envoyé par fnallet94 Voir le message
    et lorsque je créé son executable via auto.py-to-exe.
    Il lance le programme, mais il s'arrete en cours.
    Il doit bien lire le dossier, puisqu'il m'indique dans un message d'erreur le nom du fichier ("VIRM8.pdf") qu'il trouve, mais au moment de sa lecture, il me dit qu'il ne le trouve pas. C'est pas cohérent.
    Parce que l'instruction os.listdir("c:\X") te donne des noms relatifs au dossier "c:\X" (le nom du dossier n'est pas mis dans le nom renvoyé). Or si ce dossier "c:\X" contient un fichier "VIRM8.pdf", le fichier se nomme en réalité "c:\X\VIRM8.pdf" et non pas "VIRM8.pdf". Mais la variable filename et que tu ouvres via fitz.open(filename) ne contient que "VIRM8.pdf". Si par chance tu te trouves déjà dans "c:\X" quand tu lances le programme ça marchera quand-même (le nom relatif correspond) mais quand tu passes par un exécutable, tu n'es certainement pas à l'endroit où se trouve le fichier.

    Citation Envoyé par fnallet94 Voir le message
    C'est pas cohérent.
    C'est pourtant pas compliqué de faire print(filename) pour voir ce qui se passe quoi

    Citation Envoyé par fnallet94 Voir le message
    Est il possible de ne pas prendre l'année en compte, soit 2022?
    Car l'année prochaine cela ne marchera pas.
    Ben oui, l'année prochaine cela ne marchera pas. Donc tu regardes l'instruction de jurassic pork et tu l'adaptes à tes contraintes (par exemple tu remplaces "2022" par "année courante" en récupérant cette année courante dans le module "datetime"). On n'est pas non plus là pour tout te faire.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  16. #36
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    C'est pourtant pas compliqué de faire print(filename) pour voir ce qui se passe quoi (Image)
    C'est déjà fait, ca m'indique bien le nom du fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    C:\Users\xxxxx>python.exe main.py
    VIRM8.pdf
    Ben oui, l'année prochaine cela ne marchera pas. Donc tu regardes l'instruction de jurassic pork et tu l'adaptes à tes contraintes (par exemple tu remplaces "2022" par "année courante" en récupérant cette année courante dans le module "datetime"). On n'est pas non plus là pour tout te faire.
    Ca c'est ok. J'ai tout regroupé dans une variable modifiable à partir d'un fichier txt.

  17. #37
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 986
    Points
    30 986
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par fnallet94 Voir le message
    C'est déjà fait, ca m'indique bien le nom du fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    C:\Users\xxxxx>python.exe main.py
    VIRM8.pdf
    Ca veut pas rentrer hein?
    Ce fichier ne se nomme pas "VIRM8.pdf". Ce que tu vois n'est pas le nom complet du fichier. Parce qu'un nom complet se compose aussi du dossier dans lequel il se trouve.
    Bon, dit autrement : si je viens chez-toi, dans ta maison, sur ta machine et que tu me dis "hey, Sve@r, récupère donc le fichier VIRM8.pdf, il va t'intéresser" je te demanderai "ok, et il est où ce fichier" !!! Et tu me diras "dans le dossier c:\truc\chose".
    Bon ben pour Python c'est pareil. Tu lui dis "ouvre le fichier VIRM8.pdf" il te répond "je ne sais pas où il est" parce que Python c'est un truc bête qui ne cherche pas plus loin que ce qu'on lui dit et si on ne le lui dit pas, il fait pas. Et ce n'est pas parce que deux lignes plus haut tu lui as dit "liste-moi le contenu du dossier c:\truc\chose" qu'il va faire le rapprochement intelligent de "ah oui, peut-être que VIRM8.pdf se trouve dans le dossier c:\truc\chose que je viens de lire à l'instant". Parce que Python, c'est un truc bête: c'est un simple analyseur d'instructions. A toi de lui donner les bonnes instructions.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  18. #38
    Invité
    Invité(e)
    Par défaut
    J'ai parfaitement compris ce que tu m'as dit plus haut.
    Je repondais juste a une de tes attaques, en te précisant que j'avais fait la verification.

    Maintenant je suis en train de regarder par rapport a ton commentaire qui lui, est intéressant :

    Parce que l'instruction os.listdir("c:\X") te donne des noms relatifs au dossier "c:\X" (le nom du dossier n'est pas mis dans le nom renvoyé). Or si ce dossier "c:\X" contient un fichier "VIRM8.pdf", le fichier se nomme en réalité "c:\X\VIRM8.pdf" et non pas "VIRM8.pdf". Mais la variable filename et que tu ouvres via fitz.open(filename) ne contient que "VIRM8.pdf". Si par chance tu te trouves déjà dans "c:\X" quand tu lances le programme ça marchera quand-même (le nom relatif correspond) mais quand tu passes par un exécutable, tu n'es certainement pas à l'endroit où se trouve le fichier.

  19. #39
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 986
    Points
    30 986
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par fnallet94 Voir le message
    Je repondais juste a une de tes attaques, en te précisant que j'avais fait la verification.
    Ce n'est pas mentionné dans le post auquel j'ai répondu. Ni non plus dans ton dernier code source posté ici. Or je ne peux baser mes réponses que sur les informations que tu donnes et/ou sur le code que je vois ; pas sur les informations que tu ne donnes pas ou sur le code qui a été mais qui n'est plus.
    Accessoirement, tu as donc fait la vérification et nulle part tu ne t'es dit, suite à cette vérification, "c'est bizarre, il m'affiche VIRM8.pdf mais il devrait m'afficher aussi le dossier dans lequel il se trouve sinon comment peut-il le retrouver ensuite?"
    Vérifier c'est regarder puis réfléchir sur "est-ce que ce que je vois correspond à ce que je dois voir"...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  20. #40
    Invité
    Invité(e)
    Par défaut
    Je mets ci-dessous la solution qui est surtout destinée pour les utilisateurs qui ont appris Python depuis peu, (2 mois en ce qui me concerne) car ça aidera peut-être.

    Pour me référer au message de tyrtamos (Merci à toi) :

    C'est normal. Auto-py-to-exe est une version graphique de pyinstaller. Ce programme ne fait pas une compilation native comme le C peut en faire, mais plutôt une "encapsulation" du code Python, des modules qu'il utilise et de l'interpréteur Python lui-même. Lorsqu'on lance l'exe, il se "déarchive" dans un répertoire temporaire et s'exécute dans celui-ci. La conséquence, c'est que les adresses d'accès à des fichiers non-python doivent souvent être recalculées.
    L'information stockée dans la variable "Filename" est différente selon la façon dont on lance le programme.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #Boucle pour appliquer le code sur tous les fichiers du repertoire
    for filename in os.listdir(cheminFacturesMasse+"//"):
        if filename.endswith('.pdf'):
            doc = fitz.open(filename)
    Par la console, le chemin du répertoire temporaire est conservée donc transparente pour l'utilisateur.
    Mais si on l'utilise par un .exe, alors il ne reste plus que le nom (et non pas le chemin complet ).
    C'est pourquoi il faut le rajouter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #Boucle pour appliquer le code sur tous les fichiers du repertoire
    for filename in os.listdir(cheminFacturesMasse+"//"):
        if filename.endswith('.pdf'):
            doc = fitz.open(chemin + "//" + filename)

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

Discussions similaires

  1. macro pour découper un fichier pdf sous excel
    Par jibdu94 dans le forum Général VBA
    Réponses: 1
    Dernier message: 18/05/2011, 23h00
  2. Découper un PDF
    Par aragorn88 dans le forum Général Java
    Réponses: 0
    Dernier message: 10/02/2010, 17h11
  3. Découper une zone dans un PDF
    Par dranakan dans le forum Entrée/Sortie
    Réponses: 0
    Dernier message: 20/02/2009, 15h45
  4. [C#.Net] Comment découper un fichier pdf en pages
    Par Sidi-Bou dans le forum ASP.NET
    Réponses: 1
    Dernier message: 29/10/2007, 11h37
  5. Découper un pdf
    Par Oberown dans le forum Autres Logiciels
    Réponses: 5
    Dernier message: 02/11/2005, 15h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo