Script : plusieurs documents en un seul PDF + arborescence

Fermé
rb12000 Messages postés 22 Date d'inscription lundi 9 novembre 2015 Statut Membre Dernière intervention 7 septembre 2017 - 15 déc. 2016 à 16:26
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 - 27 janv. 2017 à 20:18
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 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908
7 janv. 2017 à 00:01
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 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908
Modifié par barnabe0057 le 7/01/2017 à 00:21
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 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908 > barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024
Modifié par barnabe0057 le 7/01/2017 à 00:17
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 lundi 9 novembre 2015 Statut Membre Dernière intervention 7 septembre 2017
9 janv. 2017 à 08:38
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 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908 > rb12000 Messages postés 22 Date d'inscription lundi 9 novembre 2015 Statut Membre Dernière intervention 7 septembre 2017
9 janv. 2017 à 09:36
Merci, bonne journée également.
0
rb12000 Messages postés 22 Date d'inscription lundi 9 novembre 2015 Statut Membre Dernière intervention 7 septembre 2017 > barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024
Modifié par rb12000 le 23/01/2017 à 15:27
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 lundi 9 novembre 2015 Statut Membre Dernière intervention 7 septembre 2017
23 janv. 2017 à 15:58


Voici une partie de la liste, elle est au format XLSM.
0
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908
24 janv. 2017 à 22:34
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 lundi 9 novembre 2015 Statut Membre Dernière intervention 7 septembre 2017
25 janv. 2017 à 08:47
Merci pour ton énorme boulot ;-) Je teste ça dès que possible !!!
0
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908 > rb12000 Messages postés 22 Date d'inscription lundi 9 novembre 2015 Statut Membre Dernière intervention 7 septembre 2017
25 janv. 2017 à 08:51
De rien, j'attend les commentaires ;)
0
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908 > barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024
Modifié par barnabe0057 le 25/01/2017 à 09:07
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 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908
Modifié par barnabe0057 le 27/01/2017 à 21:05
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 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908
27 janv. 2017 à 20:18
J'ai simplifié et corrigé le code pour gérer les espaces dans les noms des dossiers, ça peut servir on sait jamais.
0