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 14455 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.
A voir également:

4 réponses

barnabe0057 Messages postés 14455 Date d'inscription   Statut Contributeur Dernière intervention   4 925
 
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
barnabe0057 Messages postés 14455 Date d'inscription   Statut Contributeur Dernière intervention   4 925
 
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
barnabe0057 Messages postés 14455 Date d'inscription   Statut Contributeur Dernière intervention   4 925 > barnabe0057 Messages postés 14455 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
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
barnabe0057 Messages postés 14455 Date d'inscription   Statut Contributeur Dernière intervention   4 925 > rb12000 Messages postés 22 Date d'inscription   Statut Membre Dernière intervention  
 
Merci, bonne journée également.
0
rb12000 Messages postés 22 Date d'inscription   Statut Membre Dernière intervention   > barnabe0057 Messages postés 14455 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
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
barnabe0057 Messages postés 14455 Date d'inscription   Statut Contributeur Dernière intervention   4 925
 
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
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
barnabe0057 Messages postés 14455 Date d'inscription   Statut Contributeur Dernière intervention   4 925 > rb12000 Messages postés 22 Date d'inscription   Statut Membre Dernière intervention  
 
De rien, j'attend les commentaires ;)
0
barnabe0057 Messages postés 14455 Date d'inscription   Statut Contributeur Dernière intervention   4 925 > barnabe0057 Messages postés 14455 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
barnabe0057 Messages postés 14455 Date d'inscription   Statut Contributeur Dernière intervention   4 925
 
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
barnabe0057 Messages postés 14455 Date d'inscription   Statut Contributeur Dernière intervention   4 925
 
J'ai simplifié et corrigé le code pour gérer les espaces dans les noms des dossiers, ça peut servir on sait jamais.
0