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

Documents Java Discussion :

extraire des fichiers sons contenu dans un pdf


Sujet :

Documents Java

  1. #1
    Membre confirmé
    extraire des fichiers sons contenu dans un pdf
    Bonjour à tous,

    Bon, désolé d'être un boulet mais ça fait une heure (je suis même en dessous de la réalité) que je cherche où poser ma question. Je suis pas vraiment sûr que ce soit ici, mais comme idéalement j'aimerais le faire en java... Si jamais un modérateur charitable veut bien mettre ma prose au bon endroit...

    Sinon mon problème est tout bête : je voudrais extraire des fichiers sons contenu dans un pdf.
    J'ai besoin de le faire "programatiquement" (j'ai beaucoup de fichiers et je dois automatiser ce processus).

    Je pensais être le dix-milième à vouloir faire ça et trouver rapidement sur le net mais rien (ou alors je suis pas dégourdi).

    J'ai à peu près compris que les informations étaient entre
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    "Type/Sound>>stream"
    et
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    "endstream"
    (d'autant qu'en mettant le bloc dans un pdf minimal avec juste un lien on obtient le son) mais à part ça rien, je n'arrive même pas à identifier le format.

    Comme il est écrit "FlateDecode" dans la déclaration j'ai tenté de "décompressé" les fichiers mais ça n'est pas beaucoup plus concluant.
    Plus précisément
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    <</B 16/E/Signed/Filter/FlateDecode/Length 18944/R 22050/Type/Sound>>stream


    Si quelqu'un a des pistes je suis preneur...



    ps : Pour info j'ai fait ma décompression en utilisant python (je ne tiens pas particulièrement à utiliser ce language mais je n'avais pas en tête de méthode pour le faire en java) :
    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
     
    pdf = open("mon_fichier.pdf", "rb").read()
    stream = re.compile(r'.*?FlateDecode.*?Sound.*?stream(.*?)endstream', re.S)
    block_count = 0
     
    for s in stream.findall(pdf):
        s = s.strip('\b\r\n')
        try:
            block_count = block_count + 1
            file_name = "sound_file_" + str(block_count)
            file = open(file_name, "a")
            file.write(zlib.decompress(s))
            file.close()
        except:
            pass

  2. #2
    Modérateur

    C'est vrai, ça, qui ne met pas de fichier audio dans un PDF ?

    Le plus gros problème pour faire en Java la même chose que ton programme Python, c'est que Java fait une distinction très nette entre texte (String, Reader, etc) et séquence binaire (byte[], InputStream, etc.) Or Java ne propose de faire de regex que sur du texte. Mais un PDF n'est pas du texte, donc flop, rien n'est proposé pour ça.

    Une idée serait de "faire passer" ton fichier PDF pour une String, en convertissant chaque octet du fichier en un char de valeur équivalente. Tout ce qui est ASCII restera donc tel que, et le reste sera au moins dans un état réversible.

    Ce qui permettrait de faire la même regex qu'en Python et d'extraire la partie qui est un fichier son.
    Il serait extrait sous forme de String telle que représentée avec notre méthode au-dessus, et il faudrait donc en refaire une séquence d'octets, en remplaçant chaque char par l'octet de valeur équivalente.

    La séquence binaire ainsi obtenue peut être décompressée avec GZIPInputStream.

    J'ai pas de PDF avec des fichiers dedans (curieusement ) donc je peux pas tester, mais ça devrait faire la même chose que ton exemple Python.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

###raw>template_hook.ano_emploi###