Script : varios documentos en un solo PDF + estructura de directorios

rb12000 Mensajes publicados 22 Fecha de registro   Estado Miembro Última intervención   -  
barnabe0057 Mensajes publicados 14329 Fecha de registro   Estado Colaborador Última intervención   -
Olá,

acabo de hacer la recuperación de una mini "GED" (Gestión Electrónica de Documentos), pero las digitalizaciones son página por página (solo frente) en X (X siendo el número de páginas) archivo .jpg. Me gustaría, mediante un script CMD (batch) o una macro de Excel, generar automáticamente estos archivos PDF. Ya he generado la estructura de directorios gracias a dos macros de Excel.



¿Podéis ayudarme por favor?

Gracias.

4 respuestas

  1. barnabe0057 Mensajes publicados 14329 Fecha de registro   Estado Colaborador Última intervención   4 930
     
    He encontrado la solución, y me llevó bastante tiempo ;)

    Te hice un script Batch para convertir tus documentos, aquí está el código :

    @echo off

    :: comprobamos si nconvert.exe está presente

    if not exist %windir%\system32\nconvert.exe goto :eof

    :: directorio fuente que contiene los documentos digitalizados

    set rep_source=D:\RECUP_GED\3000057\Administratif

    :: comprobamos si el directorio fuente existe

    cd %rep_source%
    if not %errorlevel%==0 goto :eof

    if not exist "%rep_source%\Documents_PDF" mkdir "%rep_source%\Documents_PDF"

    :: definimos un directorio temporal

    set dir_temp=D:\TMP_jpg_to_pdf

    :: agrupamos todas las páginas de cada documento

    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.

    :: procesamos los documentos uno por uno

    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. barnabe0057 Mensajes publicados 14329 Fecha de registro   Estado Colaborador Última intervención   4 930
       
      Primero hay que descargar la herramienta Nconvert disponible aquí:

      https://www.xnview.com/fr/nconvert/

      Hay que obtener el archivo nconvert.exe y copiarlo en C:\Windows\System32


      ps1 : Preciso que he probado y vuelto a probar el script, funciona de maravilla.

      ps2 : el script no toca tus archivos jpg, no hay de qué preocuparse.
      0
    2. barnabe0057 Mensajes publicados 14329 Fecha de registro   Estado Colaborador Última intervención   4 930 > barnabe0057 Mensajes publicados 14329 Fecha de registro   Estado Colaborador Última intervención  
       
      ¿Cuál es la convención de nomenclatura de los documentos?

      Por ejemplo, ¿todos los archivos (008816) que muestras en tu mensaje son un solo y mismo documento?

      Si la respuesta es sí, puedes usar mi script sin problemas.
      0
    3. rb12000 Mensajes publicados 22 Fecha de registro   Estado Miembro Última intervención  
       
      Muchas gracias por tomarte el tiempo de responderme. Voy a revisar esto con más detalle hoy y te mantendré informado. ¡Que tengas un buen día!
      0
    4. barnabe0057 Mensajes publicados 14329 Fecha de registro   Estado Colaborador Última intervención   4 930 > rb12000 Mensajes publicados 22 Fecha de registro   Estado Miembro Última intervención  
       
      Gracias, que tenga un buen día también.
      0
    5. rb12000 Mensajes publicados 22 Fecha de registro   Estado Miembro Última intervención   > barnabe0057 Mensajes publicados 14329 Fecha de registro   Estado Colaborador Última intervención  
       
      Hola, disculpa por el retraso. ¡Funciona muy bien en prueba! Solo que mi estructura de carpetas es así: D:\RECUP_GED\%NumDoss% con %NumDoss% que contiene 17 000 carpetas, y en cada carpeta de 1 a 3 subcarpetas. Son estas subcarpetas donde se encuentran las imágenes a convertir. ¿Podrías hacer el mismo principio pero con un bucle para mi estructura de carpetas? ¿O llamar a una lista en el batch (porque tengo esa lista)? Segundo punto, he notado que los archivos PDF generados son extremadamente pesados (una imagen de 200 Ko se convierte en un PDF de 8 Mo)... ¿Tendrías alguna idea? Muchas gracias de todos modos ;-))
      0
  2. rb12000 Mensajes publicados 22 Fecha de registro   Estado Miembro Última intervención  
     
    Aquí tienes una parte de la lista, está en formato XLSM.
    0
  3. barnabe0057 Mensajes publicados 14329 Fecha de registro   Estado Colaborador Última intervención   4 930
     
    Aquí está la bestia:

    @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

    Espero que te guste ;)

    He comprimido los PDFs al máximo, son 3 a 4 veces más pequeños que las imágenes originales.
    0
    1. rb12000 Mensajes publicados 22 Fecha de registro   Estado Miembro Última intervención  
       
      Gracias por tu enorme trabajo ;-) ¡Lo pruebo tan pronto como sea posible!!!
      0
      1. barnabe0057 Mensajes publicados 14329 Fecha de registro   Estado Colaborador Última intervención   4 930 > rb12000 Mensajes publicados 22 Fecha de registro   Estado Miembro Última intervención  
         
        De nada, espero los comentarios ;)
        0
      2. barnabe0057 Mensajes publicados 14329 Fecha de registro   Estado Colaborador Última intervención   4 930 > barnabe0057 Mensajes publicados 14329 Fecha de registro   Estado Colaborador Última intervención  
         
        Con respecto a la carpeta de destino de los PDFs, ¿te conviene o no?

        Puedo agruparlos si hace falta.
        0
  4. barnabe0057 Mensajes publicados 14329 Fecha de registro   Estado Colaborador Última intervención   4 930
     
    Una versión ligeramente modificada en la que todos los PDFs se agrupan en una única carpeta, creo que así es mejor:

    @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. barnabe0057 Mensajes publicados 14329 Fecha de registro   Estado Colaborador Última intervención   4 930
       
      He simplificado y corregido el código para gestionar los espacios en los nombres de las carpetas, puede servir, nunca se sabe.
      0