Script: multiple documents into a single PDF + directory structure

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.

4 answers

  1. 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:

    @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

    1
    1. First, you need to download the tool Nconvert available here:

      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.
      0
    2. @barnabe0057What is the document naming convention?

      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.
      0
    3. Thank you very much for taking the time to respond to me. I will take a closer look at this today and keep you updated. Have a great day!!
      0
    4. @rb12000Thank you, have a nice day as well.
      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 se trouvent 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é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 ;-) !!
      0


  2. Here is part of the list, it is in XLSM format.
    0
    1. Here is the beast:

      @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.
      0
      1. Thank you for your great work ;-) I’ll test this as soon as possible!!!
        0
      2. @rb12000You're welcome, I'm waiting for the comments ;)
        0
      3. @barnabe0057Regarding the destination folder for the PDFs, does it work for you or not?

        I can group them if needed.
        0
    2. 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
      0
      1. I simplified and corrected the code to handle spaces in folder names; it might be useful you never know.
        0