Impresión de varios archivos en orden

fanch_22 Mensajes publicados 1 Estado Miembro -  
pcturbo Mensajes publicados 581 Estado Colaborador -
Hola,

Aquí va mi problema.

Tengo más de 1500 archivos de Outlook para imprimir en orden cronológico. Tuve que extraerlos de Outlook para copiarlos en una carpeta en una clave USB. Y es desde esa carpeta desde donde hay que iniciar la impresión, seleccionando todo para obtener todas las páginas en un montón a la salida de la impresora en orden cronológico.

El problema es que cuando inicio la impresión, las páginas salen en un orden aleatorio. Intenté clasificar en "detalles" en Windows y luego por fecha de creación (durante la transferencia de Outlook a la carpeta, el orden cronológico de los correos se mantuvo aunque la fecha y la hora correspondan al copiar/pegar y no a la realidad). Eso no influye en la salida de la impresora. Intenté con otra impresora y es lo mismo.

No entiendo el orden de las páginas que sale de la impresora; no es ni alfabético, ni por tamaño de archivo...

¿Alguien tendría alguna solución???

Gracias por vuestras respuestas

1 respuesta

  1. pcturbo Mensajes publicados 581 Estado Colaborador 200
     
    Hola,

    Le propongo la siguiente solución, que puede adaptarse para cualquier necesidad del mismo tipo, a saber:
    Imprimir una serie de archivos del mismo tipo (soportados por la misma aplicación) y en un orden específico.
    Esta solución es válida para cualquier tipo de archivo cuyo programa permita lanzar la impresión desde la línea de comandos. En su caso se trata de MS Outlook. Como no ha especificado ni su sistema operativo (MAC, Windows, Linux, ...) ni su versión, ni la versión de Outlook, la solución que aparece a continuación es válida para Windows 64bit 7 o 8 y MS Outlook 2010 (MS Office 14). Esto debería funcionar para archivos .msg exportados desde Outlook.

    La particularidad del problema es asegurar el orden de impresión de los archivos. Como ha observado, el hecho de seleccionar una serie de archivos en el explorador de Windows y luego ordenar la impresión no garantiza el orden de procesamiento. Se trata, por tanto, de pasar los archivos uno a la vez a la aplicación y de automatizar el proceso.

    Para ello, vamos a crear dos archivos, uno que contendrá la lista de archivos, en el orden deseado; el otro contendrá un pequeño programa.

    Preparación de la lista de archivos.
    Prepare una carpeta que contenga todos los archivos a imprimir, y ningún otro. Para simplificar las manipulaciones posteriormente, le aconsejo colocar esta carpeta en la raíz del disco (o en una llave USB) y darle un nombre corto y sin espacios. Tomo como ejemplo la carpeta "F:\messages". También será más fácil si los nombres de los archivos no contienen espacios.
    El archivo será de tipo texto simple y contendrá un nombre de archivo por línea. Para crearlo, abrimos una ventana de línea de comandos de Windows y utilizamos un comando que escribirá la lista de archivos automáticamente.
    - pulse las teclas [Windows] y [R]
    - en la caja de diálogo Ejecutar, escriba "cmd" sin comillas y pulse Enter
    - Windows mostrará una consola.
    Escriba "
    F:
    " sin comillas y pulse Enter (indique la letra de su unidad USB si es diferente).
    Escriba "
    cd \messages
    " sin comillas y pulse Enter (indique la ruta de su carpeta si es diferente).
    - escriba
    dir /B *.msg > listemsg.txt
    y pulse Enter
    - Windows creará en esta misma carpeta un archivo listemsg.txt que contiene la lista de todos los archivos .msg en orden alfabético. Si necesita un orden diferente, tome este archivo y utilícelo con una herramienta que maneje.

    Identificación de su impresora.
    Necesitaremos el nombre de su impresora. Abra la lista de impresoras, haga clic derecho en la impresora que desea usar, elija Propiedades y anote cuidadosamente el nombre de la impresora. Podrá volver aquí en su momento y copiarlo y pegarlo.

    Preparación del archivo de programa
    Mantenga abierta la ventana de línea de comandos y abra el Bloc de notas. Por ejemplo, pulse [Windows] y [R], escriba notepad y confirme.
    En este nuevo archivo de texto, copie y pegue las 12 líneas de texto/código siguientes:

    @echo off
    :debut
    FOR /F "delims=," %%i IN (listemsg.txt) DO (
    "c:\program files (x86)\microsoft office\office14\outlook.exe" /p "F:\messages\%%i" lenomdevotreimprimante
    if errorlevel 0 (
    echo %%i est en cours d'impression.
    timeout /T 4 >nul
    ) ELSE (
    echo Un problème s'est produit pendant l'impression de %%i.
    )
    )
    echo Fin de l'impression des messages.


    Attention, ce qui est affiché sur les lignes 4 et 5 ci-dessus ne doit en fait former qu'une seule ligne. Je la compte comme une seule ligne dans mes remarques ci-dessous.

    Corrigez la ligne 3 sur le nom du fichier listemsg.txt si vous avez utilisé un autre nom.
    Corrigez la ligne 4 sur le nom du dossier F:\messages si le dossier n'a pas ce chemin. Attention, ne touchez que le chemin du dossier (par exemple laissez les guillemets, le \ qui suit etc.)
    Remplacez obligatoirement dans la ligne 4 la mention lenomdevotreimprimante par le nom de votre imprimante. Si le nom contient des espaces, entourez-le de guillemets.
    Enregistrez ce nouveau fichier que vous êtes en train d'élaborer dans le même dossier F:\messages ou celui que vous utilisez, sous le nom impmsg.cmd

    Essais et modifications
    Je vous conseille de faire un essai avec une copie du fichier de liste qui ne contient que 3 lignes (trois messages à imprimer).
    Par ailleurs, il se peut que vous ayez besoin d'ajuster :
    - la ligne 4 du programme si Outlook n'est pas installé à cet endroit (autre version, Windows XP, etc.). Cette ligne doit commencer par le chemin complet de l'exécutable entre guillemets.
    - la ligne 7 contient une instruction qui donne à Outlook le temps de prendre en charge la commande, avant de lui envoyer le fichier suivant. J'ai mis la valeur 4 (ce sont des secondes) mais si vous constatez que les messages ne sont pas imprimés dans l'ordre il faudra l'augmenter.

    Pour lancer l'impression
    Retournez dans la boîte de commande Windows. Vérifiez que l'invite de commande est composée du chemin du dossier F:\messages> ou du chemin de votre dossier.
    Tapez impmsg puis appuyez sur [Entrée]. impmsg est le nom de votre fichier programme.

    Bonne chance.

    Pour les utilisateurs avancés:
    Pour s'en servir pour d'autres types de fichiers dont l'impression par ligne de commande est prise en charge, il suffit de récupérer les infos sur la commande et les options.
    Par exemple pour la version 11 d'Adobe Reader afin d'imprimer un lot de PDFs, on mettrait en ligne 4:
    "C:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe" /h /t "F:\messages\%%i" lenomdevotreimprimante

    La valeur du timeout doit être supérieure au temps entre l'exécution de la ligne 4 et la réponse obtenue par errorlevel. La réponse errorlevel n'est pas émise à la fin de chaque impression (du moins pour AcroRd32), elle est donnée au début, dès que le fichier a été lu. Sans timeout, Windows n'attend pas et balance tout les yeux fermés, et le résultat c'est que l'application serveur va plutôt traiter le dernier fichier en premier, ou comme elle peut... et on peut s'attendre à des problèmes de mémoire. Le timeout permet de réguler le flux et de garantir l'ordre.
    -1
    1. pcturbo Mensajes publicados 581 Estado Colaborador 200
       
      IMPORTANTE: un pequeño olvido: antes de ejecutar el comando impmsg, lancen Outlook si la aplicación no está ya en ejecución (luego ponedla a un lado, por ejemplo minimizándola); de lo contrario, el script se bloqueará tras imprimir cada archivo (Windows esperará a que se cierre la instancia de Outlook que se haya iniciado).
      0
      1. pcturbo Mensajes publicados 581 Estado Colaborador 200 > pcturbo Mensajes publicados 581 Estado Colaborador
         
        Lo siento, dos correcciones. 1°: ignore su segundo mensaje, no es necesario iniciar Outlook previamente. En cambio, si se usa la técnica con Adobe Reader, allí sí es necesario. 2°: en el programa, línea 4, ignore el último parámetro "lenomdevotreimprimante". Outlook no lo maneja (es un parámetro válido para Adobe Reader). Outlook envía a la impresora predeterminada. Por tanto, conviene definir la impresora a usar como impresora predeterminada antes de iniciar la impresión. El código del programa es por lo tanto:

        @echo off
        :debut
        FOR /F "delims=," %%i IN (listemsg.txt) DO (
        "c:\program files (x86)\microsoft office\office14\outlook.exe" /p "F:\messages\%%i"
        if errorlevel 0 (
        echo %%i está en proceso de impresión.
        timeout /T 4 >nul
        ) ELSE (
        echo Se produjo un problema durante la impresión de %%i.
        )
        )
        echo Fin de la impresión de los mensajes.
        -1