Script: multiple documents into a single PDF + directory structure
rb12000
Posted messages
22
Registration date
Status
Member
Last intervention
-
barnabe0057 Posted messages 14329 Registration date Status Contributor Last intervention -
barnabe0057 Posted messages 14329 Registration date Status Contributor Last intervention -
Hello,
I just recovered a mini "EDMS" (Electronic Document Management System), but the scans are page by page (only front) in X (X being the number of pages) .jpg files. I would like to automatically generate these PDF files using a CMD script (batch) or an Excel macro. I have already generated the directory structure using two Excel macros.
Can you please help me?
Thank you.
I just recovered a mini "EDMS" (Electronic Document Management System), but the scans are page by page (only front) in X (X being the number of pages) .jpg files. I would like to automatically generate these PDF files using a CMD script (batch) or an Excel macro. I have already generated the directory structure using two Excel macros.
Can you please help me?
Thank you.
4 answers
I found the solution, and it took me quite a bit of time ;)
I made you a Batch script to convert your documents, here’s the code:
I made you a Batch script to convert your documents, here’s the code:
@echo off
:: testing if nconvert.exe is present
if not exist %windir%\system32\nconvert.exe goto :eof
:: source directory containing the scanned documents
set rep_source=D:\RECUP_GED\3000057\Administratif
:: testing if the source directory exists
cd %rep_source%
if not %errorlevel%==0 goto :eof
if not exist "%rep_source%\Documents_PDF" mkdir "%rep_source%\Documents_PDF"
:: defining a temporary directory
set dir_temp=D:\TMP_jpg_to_pdf
:: grouping all pages of each 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.
:: processing documents one by one
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
Here is the beast:
I hope you will like it ;)
I compressed the PDFs as much as possible, they are 3 to 4 times smaller than the original images.
@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
I hope you will like it ;)
I compressed the PDFs as much as possible, they are 3 to 4 times smaller than the original images.
Here is a slightly modified version where all the PDFs are grouped in a single folder, I think it's better this way:
@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
https://www.xnview.com/fr/nconvert/
You need to retrieve the file nconvert.exe and copy it to C:\Windows\System32
ps1: I want to specify that I have tested and retested the script, it works wonderfully.
ps2: The script does not touch your jpg files, so there is nothing to worry about.
For example, are all the files (008816) you show in your message one and the same document?
If the answer is yes, you can use my script without any worries.
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és sont extrêmement lourds (une image de 200 Ko se convertit en PDF de 8 Mo)... Aurais-tu une idée ?
Merci beaucoup dans tous les cas ;-) !!