Script : plusieurs documents en un seul PDF + arborescence

rb12000 Messages postés 22 Date d'inscription   Statut Membre Dernière intervention   -  
barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

je viens de faire la récupération d'une mini "GED" (Gestion Electronique des Documents), mais les numérisations sont pages par pages (seulement recto) en X (X étant le nombre de pages) fichier .jpg. J'aimerai, par le biais d'un script CMD (batch) ou d'une macro Excel, générer automatiquement ces fichiers PDF. J'ai déjà généré l'arborescence grâce à deux macros Excel.



Pouvez-vous m'aider s'il vous plaît ?

Merci.

4 réponses

  1. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930
     
    J'ai trouvé la solution, et ça m'a pris pas mal de temps ;)

    Je t'ai fait un script Batch pour convertir tes documents, voilà le code :

    @echo off

    :: on teste si nconvert.exe est présent

    if not exist %windir%\system32\nconvert.exe goto :eof

    :: répertoire source contenant les documents numérisés

    set rep_source=D:\RECUP_GED\3000057\Administratif

    :: on teste si le répertoire source existe bien

    cd %rep_source%
    if not %errorlevel%==0 goto :eof

    if not exist "%rep_source%\Documents_PDF" mkdir "%rep_source%\Documents_PDF"

    :: on définit un répertoire temporaire

    set dir_temp=D:\TMP_jpg_to_pdf

    :: on regroupe toutes les pages de chaque document

    for /f "tokens=1,2,3 delims=_." %%a in ('dir /b /a-d-s-l "*.jpg"') do (

    if not exist %dir_temp%\%%a mkdir %dir_temp%\%%a

    copy %%a_%%b.%%c %dir_temp%\%%a\ > nul

    )

    echo.

    :: on traite les documents un par un

    cd %dir_temp%

    for /f "tokens=*" %%a In ('dir /b /ad "*.*"') do (

    set fichier=%%a

    cd %dir_temp%\%%a

    set /a compteur=0

    Setlocal enableextensions enabledelayedexpansion

    For /r %%i In (*.jpg) Do (set /a compteur+=1)

    if !compteur! GTR 1 (nconvert -in jpeg -out pdf -multi -o res_!fichier!.pdf *.jpg) else (nconvert -in jpeg -out pdf -o res_!fichier!.pdf *.jpg)

    echo.

    move /y "res_!fichier!.pdf" "!rep_source!\Documents_PDF" > nul

    )

    Endlocal

    cd %USERPROFILE%

    rmdir /s /q "%dir_temp%"

    explorer /select,"%rep_source%\Documents_PDF"

    :eof

    1
    1. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930
       
      Au préalable il faut télécharger l'outil Nconvert disponible ici :

      https://www.xnview.com/fr/nconvert/

      Il faut récupérer le fichier nconvert.exe et le copier dans C:\Windows\System32


      ps1 : je précise que j'ai testé et re-testé le script, il fonctionne à merveille.

      ps2 : le script ne touche pas à tes fichiers jpg, pas d'inquiétude à avoir.
      0
    2. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930 > barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention  
       
      Quelle est la convention de nommage des documents ?

      Par exemple, est-ce que tous les fichiers (008816) que tu montres dans ton message sont un seul et même document ?

      Si la réponse est oui, tu peux utiliser mon script sans soucis.
      0
    3. rb12000 Messages postés 22 Date d'inscription   Statut Membre Dernière intervention  
       
      Merci beaucoup d'avoir pris le temps de me répondre. Je regarde ça de plus près aujourd'hui, je vous tiens au courant. Bonne journée !!
      0
    4. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930 > rb12000 Messages postés 22 Date d'inscription   Statut Membre Dernière intervention  
       
      Merci, bonne journée également.
      0
    5. rb12000 Messages postés 22 Date d'inscription   Statut Membre Dernière intervention   > barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention  
       
      Salut, désolé pour le retard ! Ça fonctionne super bien en test ! Seulement, mon arborescence est faite ainsi : D:\RECUP_GED\%NumDoss% avec %NumDoss% comprenant 17 000 dossiers, et dans chaque dossier de 1 à 3 sous dossiers. Ce sont dans ces sous-dossiers que ce trouve les images à convertir.
      Saurais-tu faire le même principe mais avec une boucle pour mon arborescence ? Ou appeler une liste dans le batch (car j'ai cette liste) ?

      Deuxième point, je remarque que les fichiers PDF généré sont extrêmement lourd (une image de 200Ko se converti en PDF de 8Mo)... Aurais-tu une idée ?

      Merci beaucoup dans tous les cas ;-) !!
      0
  2. rb12000 Messages postés 22 Date d'inscription   Statut Membre Dernière intervention  
     


    Voici une partie de la liste, elle est au format XLSM.
    0
  3. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930
     
    Voilà la bête :

    @echo off

    if not exist %windir%\system32\nconvert.exe goto :eof

    cd D:\Recup_GED

    if not %errorlevel%==0 goto :eof

    for /f "tokens=*" %%K In ('dir /b /ad "*.*"') do (

    for /f "tokens=*" %%E In ('dir /b /ad "%%~dpnK\*.*"') do (

    if not exist "%%~dpnK\%%E\Documents_PDF" mkdir "%%~dpnK\%%E\Documents_PDF"

    if not exist "%%~dpnK\%%E\TMP_jpg_to_pdf" mkdir "%%~dpnK\%%E\TMP_jpg_to_pdf"

    for /f "tokens=1,2,3 delims=_." %%A in ('dir /b /a-d-s-l "%%~dpnK\%%E\*.jpg"') do (

    if not exist "%%~dpnK\%%E\TMP_jpg_to_pdf\%%A" mkdir "%%~dpnK\%%E\TMP_jpg_to_pdf\%%A"

    copy %%~dpnK\%%E\%%A_%%B.%%C %%~dpnK\%%E\TMP_jpg_to_pdf\%%A > nul

    )

    for /f "tokens=*" %%R In ('dir /b /ad "%%~dpnK\%%E\TMP_jpg_to_pdf\*.*"') do (

    set fichier=%%R

    set /a compteur=0

    Setlocal enableextensions enabledelayedexpansion

    For /r %%I In (*.jpg) Do (set /a compteur+=1)

    if !compteur! GTR 1 (nconvert -in jpeg -out pdf -multi -c 5 -o res_!fichier!.pdf %%~dpnK\%%E\TMP_jpg_to_pdf\%%R\*.jpg) else (nconvert -in jpeg -out pdf -c 5 -o res_!fichier!.pdf %%~dpnK\%%E\TMP_jpg_to_pdf\%%R\*.jpg)

    echo.

    move /y "res_!fichier!.pdf" "%%~dpnK\%%E\Documents_PDF" > nul

    Endlocal

    )

    rmdir /s /q "%%~dpnK\%%E\TMP_jpg_to_pdf"

    )

    )

    explorer /select,"%CD%"

    :eof

    J'espère que ça te plaira ;)

    J'ai compressé les PDF au maximum, ils sont 3 à 4 fois plus petits que les images d'origine.
    0
    1. rb12000 Messages postés 22 Date d'inscription   Statut Membre Dernière intervention  
       
      Merci pour ton énorme boulot ;-) Je teste ça dès que possible !!!
      0
      1. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930 > rb12000 Messages postés 22 Date d'inscription   Statut Membre Dernière intervention  
         
        De rien, j'attend les commentaires ;)
        0
      2. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930 > barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Concernant le dossier de destination des PDF, est-ce que ça te convient ou pas ?

        Je peux les regrouper si besoin.
        0
  4. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930
     
    Voilà une version légèrement modifiée dans laquelle tous les PDF sont regroupés dans un unique dossier, je pense que c'est mieux comme ça :

    @echo off

    if not exist %windir%\system32\nconvert.exe goto :eof

    set source=D:\RECUP_GED

    set destination=Documents_PDF

    if %source:~0,2% EQU %CD:~0,2% (cd %source% || goto :eof) else (cd /d %source% || goto :eof)

    if not exist "%destination%" mkdir "%destination%"

    for /f "tokens=*" %%K In ('dir /b /ad "*.*"') do (

    for /f "tokens=*" %%E In ('dir /b /ad "%%~dpnK\*.*"') do (

    if not exist "%%~dpnK\%%E\TMP_jpg_to_pdf" mkdir "%%~dpnK\%%E\TMP_jpg_to_pdf"

    for /f "tokens=1,2,3 delims=_." %%A in ('dir /b /a-d-s-l "%%~dpnK\%%E\*.jpg"') do (

    if not exist "%%~dpnK\%%E\TMP_jpg_to_pdf\%%A" mkdir "%%~dpnK\%%E\TMP_jpg_to_pdf\%%A"

    copy "%%~dpnK\%%E\%%A_%%B.%%C" "%%~dpnK\%%E\TMP_jpg_to_pdf\%%A" > nul

    )

    for /f "tokens=*" %%R In ('dir /b /ad "%%~dpnK\%%E\TMP_jpg_to_pdf\*.*"') do (

    nconvert -in jpeg -out pdf -multi -c 5 -o recup_%%R.pdf "%%~dpnK\%%E\TMP_jpg_to_pdf\%%R\*.jpg"

    echo.

    move /y "recup_%%R.pdf" "%destination%" > nul

    )

    rmdir /s /q "%%~dpnK\%%E\TMP_jpg_to_pdf"

    )

    )

    explorer /select,"%destination%"

    :eof
    0
    1. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930
       
      J'ai simplifié et corrigé le code pour gérer les espaces dans les noms des dossiers, ça peut servir on sait jamais.
      0