Script : plusieurs documents en un seul PDF + arborescence

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. 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. 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. @barnabe0057Quelle 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. 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. @rb12000Merci, bonne journée également.
      0
    5. @barnabe0057Salut, 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. Voici une partie de la liste, elle est au format XLSM.
    0
    1. 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. Merci pour ton énorme boulot ;-) Je teste ça dès que possible !!!
        0
      2. @rb12000De rien, j'attend les commentaires ;)
        0
      3. @barnabe0057Concernant le dossier de destination des PDF, est-ce que ça te convient ou pas ?

        Je peux les regrouper si besoin.
        0
    2. 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. J'ai simplifié et corrigé le code pour gérer les espaces dans les noms des dossiers, ça peut servir on sait jamais.
        0