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. #1
    Invité
    Invité(e)
    Par défaut Découper un pdf
    Bonjour,

    je souhaiterais pourvoir dissocier un fichier PDF en plusieurs fichiers.
    sur ce PDF il y a de nombreuses factures et donc je souhaiterais découper ce fichier pour chacune des factures, qu'elles fassent 1 ou x pages. et récupérer dans un string le numéro de la facture pour l'insérer dans une variable.
    Puis enregistrer facture dans un pdf unique et lui donner son numero comme nom de fichier, et ce pour chacune des factures.
    Pourriez-vous me conseiller s'il vous plait ? Un tuto par exemple.

    J'ai regardé ce tuto : https://www.thepythoncode.com/code/s...iles-in-python
    Mais le programme fourni dans ce tuto ne fonctionne pas.

    J'ai python 3.10 et ai téléchargé la dernière version de pikepdf.


    Vous en remerciant par avance.

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Au boulot, on m'a demandé récemment d'étudier PikePDF et je lui ai préféré PyMuPDF.

    Pour nos besoins, j'ai fait un wheel (package) qui fait de la recherche de texte dans des fichiers PDF en asychrone. PyMuPDF pourrait t'être utile pour rechercher les numéros de factures.

    Il permet aussi d'extraire des pages. Alors, nativement, je ne suis pas certain ni persuadé qu'il peut de lui même créer un nouveau PDF pour y stocker une facture complète mais sachant qu'il peut ajouter une page à un PDF existant, tu pourrais partir d'un PDF "modèle" avec une page vide, insérer les pages de ta facture dedans et juste supprimer la page vide pour avoir ton document complet.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Merci Arioch,

    j'ai en effet installé PyMuPDF pour récupérer le numéro de facture dans une variable pour l'utiliser ensuite.
    Pour l'instant, ce simple programme qui est donné, ne fonctionne pas, alors que j'ai installé tout ce qu'il demande. Je ne comprends ou est le soucis.
    La version de python semble être prise en charge et la librairie a été installée sans problème.

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Montre ton code entre balises ## stp

  5. #5
    Invité
    Invité(e)
    Par défaut
    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
    import os
    from pikepdf import Pdf
     
    # a dictionary mapping PDF file to original PDF's page range
    file2pages = {
        0: [0, 9], # 1st splitted PDF file will contain the pages from 0 to 9 (9 is not included)
        1: [9, 11], # 2nd splitted PDF file will contain the pages from 9 (9 is included) to 11
        2: [11, 100], # 3rd splitted PDF file will contain the pages from 11 until the end or until the 100th page (if exists)
    }
     
    # the target PDF document to split
    filename = "bert-paper.pdf"
    # load the PDF file
    pdf = Pdf.open(filename)
    # make the new splitted PDF files
    new_pdf_files = [ Pdf.new() for i in file2pages ]
    # the current pdf file index
    new_pdf_index = 0
    # iterate over all PDF pages
    for n, page in enumerate(pdf.pages):
        if n in list(range(*file2pages[new_pdf_index])):
            # add the `n` page to the `new_pdf_index` file
            new_pdf_files[new_pdf_index].pages.append(page)
            print(f"[*] Assigning Page {n} to the file {new_pdf_index}")
        else:
            # make a unique filename based on original file name plus the index
            name, ext = os.path.splitext(filename)
            output_filename = f"{name}-{new_pdf_index}.pdf"
            # save the PDF file
            new_pdf_files[new_pdf_index].save(output_filename)
            print(f"[+] File: {output_filename} saved.")
            # go to the next file
            new_pdf_index += 1
            # add the `n` page to the `new_pdf_index` file
            new_pdf_files[new_pdf_index].pages.append(page)
            print(f"[*] Assigning Page {n} to the file {new_pdf_index}")
     
    # save the last PDF file
    name, ext = os.path.splitext(filename)
    output_filename = f"{name}-{new_pdf_index}.pdf"
    new_pdf_files[new_pdf_index].save(output_filename)
    print(f"[+] File: {output_filename} saved.")

  6. #6
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Tu disais avoir installé PyMuPDF.

    C'est du code avec PyMuPDF que je te demandais en fait

  7. #7
    Invité
    Invité(e)
    Par défaut
    Celui-ci par exemple

    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
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    import fitz
    import argparse
    import sys
    import os
    from pprint import pprint
     
    def get_arguments():
        parser = argparse.ArgumentParser(
            description="A Python script to extract text from PDF documents.")
        parser.add_argument("file", help="Input PDF file")
        parser.add_argument("-p", "--pages", nargs="*", type=int,
                            help="The pages to extract, default is all")
        parser.add_argument("-o", "--output-file", default=sys.stdout,
                            help="Output file to write text. default is standard output")
        parser.add_argument("-b", "--by-page", action="store_true",
                            help="Whether to output text by page. If not specified, all text is joined and will be written together")
        # parse the arguments from the command-line
        args = parser.parse_args()
     
        input_file = args.file
        pages = args.pages
        by_page = args.by_page
        output_file = args.output_file
        # print the arguments, just for logging purposes
        pprint(vars(args))
        # load the pdf file
        pdf = fitz.open(input_file)
        if not pages:
            # if pages is not set, default is all pages of the input PDF document
            pages = list(range(pdf.pageCount))
        # we make our dictionary that maps each pdf page to its corresponding file
        # based on passed arguments
        if by_page:
            if output_file is not sys.stdout:
                # if by_page and output_file are set, open all those files
                file_name, ext = os.path.splitext(output_file)
                output_files = { pn: open(f"{file_name}-{pn}{ext}", "w") for pn in pages }
            else:
                # if output file is standard output, do not open
                output_files = { pn: output_file for pn in pages }
        else:
            if output_file is not sys.stdout:
                # a single file, open it
                output_file = open(output_file, "w")
                output_files = { pn: output_file for pn in pages }
            else:
                # if output file is standard output, do not open
                output_files = { pn: output_file for pn in pages }
     
        # return the parsed and processed arguments
        return {
            "pdf": pdf,
            "output_files": output_files,
            "pages": pages,
        }
     
     
    def extract_text(**kwargs):
        # extract the arguments
        pdf          = kwargs.get("pdf")
        output_files = kwargs.get("output_files")
        pages        = kwargs.get("pages")
        # iterate over pages
        for pg in range(pdf.pageCount):
            if pg in pages:
                # get the page object
                page = pdf[pg]
                # extract the text of that page and split by new lines '\n'
                page_lines = page.get_text().splitlines()
                # get the output file
                file = output_files[pg]
                # get the number of lines
                n_lines = len(page_lines)
                for line in page_lines:
                    # remove any whitespaces in the end & beginning of the line
                    line = line.strip()
                    # print the line to the file/stdout
                    print(line, file=file)
                print(f"[*] Wrote {n_lines} lines in page {pg}")
     
        # close the files
        for pn, f in output_files.items():
            if f is not sys.stdout:
                f.close()
     
     
    if __name__ == "__main__":
        # get the arguments
        kwargs = get_arguments()
        # extract text from the pdf document
        extract_text(**kwargs)

  8. #8
    Invité
    Invité(e)
    Par défaut
    J'ai l'impression qu'il n'arrive pas à lire la librairie.

  9. #9
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Qu'as-tu comme message d'erreur ?

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

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 953
    Points : 9 283
    Points
    9 283
    Par défaut
    Hello,
    Houla fnallet94, il me paraît bien compliqué ton code qui utilise pymupdf.
    Voici une solution plus simple qui lit un PDF qui contient 8 pages avec une facture par page et qui écrit 8 fichiers PDF composés de chacune des factures :

    Nom : Factures.png
Affichages : 704
Taille : 67,4 Ko


    La condition préalable pour que le code fonctionne c'est que le PDF ne soit pas constitué exclusivement d'images sinon on ne peut pas extraire de texte.
    Le souci c'est que quand on extrait le texte d'un PDF les données ne sont pas forcément ordonnées comme on peut le voir sur la page. Exemple pour mon PDF :
    Northwind Traders
    1234 International Drive
    Anywhere, Earth ABC123
    Invoice

    Order ID:
    Order Date:
    Customer ID:
    Shipped Date:
    Shipped Via:
    Bill To:
    Ship To:
    Quantity
    Description
    Unit Price
    Price
    Thank you for your purchase.
    We appreciate your business.
    Sub Total
    Freight
    Total
    10248
    4 Jul 1996
    On voit que le numéro de facture se situe après la ligne où il y a Total.
    Je vais utiliser les expressions régulières pour capturer le numéro de facture pour chaque page.
    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import fitz
    import re
    doc = fitz.open("d:/temp/factures.pdf")
    print('nb pages : ' + str(doc.page_count))
    x=0
    for page in doc:
        text = page.get_text()
        result = re.search(r'^Total[\r\n]+(.*)$',text,flags=re.MULTILINE)
        print(result.group(1))
        numfacture = result.group(1)
        doc2 = fitz.open()  # on crée un nouveau PDF
        doc2.insert_pdf(doc,from_page=x,to_page=x)
        doc2.save('d:/temp/'+ 'facture_'+ numfacture + '.pdf')
        x += 1
    Voici le résultat pour un fichier :
    Nom : Facture_10248.png
Affichages : 687
Taille : 78,6 Ko

    ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  11. #11
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import fitzimport re
    doc = fitz.open("d:/temp/factures.pdf")
    print('nb pages : ' + str(doc.page_count))
    x=0
    for page in doc:
        text = page.get_text()
        result = re.search(r'^Total[\r\n]+(.*)$',text,flags=re.MULTILINE)
        print(result.group(1))
        numfacture = result.group(1)
        doc2 = fitz.open()  # on crée un nouveau PDF
        doc2.insert_pdf(doc,from_page=x,to_page=x)
        doc2.save('d:/temp/'+ 'facture_'+ numfacture + '.pdf')     x += 1
    Il n'y a pas la possibilité d'avoir le nombre de pages du PDF et d'utiliser ces lignes ci-dessous afin de ne plus avoir de boucle ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    n = doc.page_count
    doc2.insert_pdf(doc,from_page=0,to_page=n)
    ou au moins à la rigueur utiliser enumerate
    La partie importante ici serait la méthode insert_pdf qui permettrait d'enregistrer d'un numéro de page à un autre.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

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

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 953
    Points : 9 283
    Points
    9 283
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    Il n'y a pas la possibilité d'avoir le nombre de pages du PDF et d'utiliser ces lignes ci-dessous afin de ne plus avoir de boucle ?
    je n'ai pas bien compris ta remarque : il veut extraire chaque facture du pdf dans un pdf différent avec le numéro de la facture dans le nom du fichier.
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  13. #13
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    Citation Envoyé par jurassic pork Voir le message
    je n'ai pas bien compris ta remarque : il veut extraire chaque facture du pdf dans un pdf différent avec le numéro de la facture dans le nom du fichier.
    Ah ok, j'avais pas bien compris effectivement, par contre je garde la partie enumerate valide pour remplacer ta variable x.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

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

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 953
    Points : 9 283
    Points
    9 283
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    Ah ok, j'avais pas bien compris effectivement, par contre je garde la partie enumerate valide pour remplacer ta variable x.
    merci du renseignement. Moi qui ne suis pas un pro du python, cela m'a permis de découvrir la fonction enumerate. Si j'ai bien assimilé, mon code peut devenir avec cette fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import fitz
    import re
    doc = fitz.open("d:/temp/factures.pdf")
    print('nb pages : ' + str(doc.page_count))
    for x,page in enumerate(doc,start=0):
        text = page.get_text()
        result = re.search(r'^Total[\r\n]+(.*)$',text,flags=re.MULTILINE)
        print(result.group(1))
        numfacture = result.group(1)
        doc2 = fitz.open()  # on crée un nouveau PDF
        doc2.insert_pdf(doc,from_page=x,to_page=x)
        doc2.save('d:/temp/'+ 'facture_'+ numfacture + '.pdf')
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  15. #15
    Invité
    Invité(e)
    Par défaut
    superbe. Merci a tous.
    Je vais tester tout cela.

    concernant le découpage du pdf par facture.
    Comment puis je faire si il y a pour certaines factures, plusieurs pages ?

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

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 953
    Points : 9 283
    Points
    9 283
    Par défaut
    Citation Envoyé par fnallet94 Voir le message
    concernant le découpage du pdf par facture.
    Comment puis je faire si il y a pour certaines factures, plusieurs pages ?
    Est-ce que le numéro de facture est répété sur toutes les pages d'une facture ?
    et déjà est-ce que tes factures sont en mode "texte" (possibilité de sélectionner du texte dans un lecteur PDF) parce que sinon cela ne fonctionnera pas (cas des PDF en images) ?
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  17. #17
    Invité
    Invité(e)
    Par défaut
    oui, le numéro de facture est répétée sur les autres pages.

    Et oui, le pdf est en mode Texte.

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

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 953
    Points : 9 283
    Points
    9 283
    Par défaut
    Citation Envoyé par fnallet94 Voir le message
    Comment puis je faire si il y a pour certaines factures, plusieurs pages ?
    voici une solution (pas testée dans tous les cas de figure) qui semble marcher pour moi :
    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
    import fitz
    import re
    doc = fitz.open("d:/temp/factures.pdf")
    print('nb pages : ' + str(doc.page_count))
    prevNum = -1
    for x,page in enumerate(doc,start=0):
        text = page.get_text()
        result = re.search(r'^Total[\r\n]+(.*)$',text,flags=re.MULTILINE)
        print(result.group(1))
        numfacture = result.group(1)
        if numfacture == prevNum:
            y=y+1
        else:
            y=0
        doc2 = fitz.open()  # on crée un nouveau PDF
        doc2.insert_pdf(doc,from_page=x-y,to_page=x)
        doc2.save('d:/temp/'+ 'facture_'+ numfacture + '.pdf')
        prevNum = numfacture
    Si quelqu'un voit une faille ou une meilleure solution ?
    En tout cas cela fonctionne avec un PDF de 9 pages dont les 2 dernières pages font partie de la même facture (11077). J'obtiens bien pour ces deux pages en sortie un seul PDF de 2 pages :

    Nom : Facture_11077.png
Affichages : 660
Taille : 64,7 Ko

    Ne pas oublier que ce qui reste à faire c'est déjà voir si les numéros de factures sont bien extraites de toutes les pages et ensuite de trouver l'expression régulière pour les récupérer.
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

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

    Cela ne fonctionne pas.
    Est ce un probleme de lecture de cette librairie ?
    Comment m'assurer qu'elle est bien prise en compte ?
    Il n 'y a pas de message d'erreur.

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

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 953
    Points : 9 283
    Points
    9 283
    Par défaut
    Hello,
    Citation Envoyé par fnallet94 Voir le message
    Il n 'y a pas de message d'erreur.
    çà c'est louche ->
    Utilises-tu un IDE (PyCharm, Spider, autre) ou l' IDE de Python ou pas d'IDE?
    Comment lances-tu le programme ? Dans un IDE ? dans une console de commande ?
    As-tu essayé de faire du pas à pas et voir à quel endroit il y a un problème ?
    Comment as-tu installé pymupdf ? par pip ?
    Que se passe-t-il si dans l'interpréteur python tu tapes ? :
    >>> import fitz
    >>> print(fitz.__doc__)

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 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