Eu tenho um seguinte sistema em vigor
- Um dos 12 e-mails chega entre 5h e 7h, em ordem aleatória
- A regra do Outlook pega o e-mail e executa um script VBA que modifica e imprime partes de algumas planilhas anexadas automaticamente (não todas)
- Pego todas as impressões pela manhã e as ordeno manualmente em grupos e grampeio
Qual seria a melhor forma de agrupar as impressões antes de imprimir para que possam ser impressas e grampeadas?
Responder1
Você não diz em que ordem os quer...
Experimente isso. Vá para Propriedades da impressora e clique no botão Avançado. Clique em "Iniciar impressão após a última página ser colocada no spool" e certifique-se de que "Imprimir documentos em spool primeiro" esteja marcado.
Os e-mails serão impressos na ordem em que o Outlook os imprime. Para testar o que o Outlook faz, você pode tentar imprimir em arquivo e verificar em que ordem os arquivos são criados. Se essa não for a ordem correta, tente alterar as configurações no Outlook para que a ordem fique como você deseja; em seguida, reconecte-se à impressora.
Responder2
Resolvi meu problema e acabei fazendo o seguinte:
Cada documento é impresso em arquivos *.xps, em uma pasta
Z:\Print
usando a impressora XPS (impressão de PDF não disponível na máquina de trabalho) em VBA, usando este código:Application.ActivePrinter = XPSPrinter ActivePrinterName = Application.ActivePrinter If (InStr(ActivePrinterName, "XPS")) Then Dim Filename As String Filename = ActiveWorkbook.name rngPrint.PrintOut Copies:=1, _ printtofile:=True, prtofilename:=FilePath & File & ".xps" End If
Às 7h00 script em lote (usandoscript fantasma) a conversão de todos os arquivos *.xps em arquivos *.pdf está agendada. Provavelmente não precisamos de duas variáveis de nome de arquivo, é uma sobra da depuração.
@echo off setlocal enabledelayedexpansion FOR /R Z:\Overnight\Print %%F in (*.xps) DO ( Set filename=%%~nF%%~xF Set outputFilename=%%~nF%.pdf Set filename2=Z:\Print\%!filename! Set outputFilename2=Z:\PrintPDF\%!outputFilename! C:\ghostxps\gxps.exe -sDEVICE=pdfwrite -sOutputFile=!outputFilename2! -dNOPAUSE !filename2! ) exit exit
Em seguida, um programa java que escrevi é executado, ele mescla arquivos PDF separados em grupos desejados (usandocaixa de pdf)
public void combine(String outputName, String[] filenames) throws IOException, PrinterException { try { PDFMergerUtility mergePdf = new PDFMergerUtility(); for (String filename : filenames){ mergePdf.addSource(getFileByName(filename)); } mergePdf.setDestinationFileName(outputPath+outputName+".pdf"); mergePdf.mergeDocuments(); System.out.println("Combined "+outputName); } catch (Exception e) { e.printStackTrace(); } }
Finalmente, é executado um lote que imprime todos os arquivos PDF combinados. A eliminação atrasada do processo é necessária, se você tentar encerrar o processo após a invocação do processo, isso apenas informará que o processo não foi encontrado (mesmo que esteja ali no gerenciador de tarefas)
@echo off setlocal enabledelayedexpansion RUNDLL32 PRINTUI.DLL,PrintUIEntry /y /n "\\SITE\PRINTER-BATCH" FOR /R Z:\CombinedPDF %%F in (*.pdf) DO ( Set filename=%%~nF%%~xF Set filename2=Z:\CombinedPDF\%!filename! start cmd /c "timeout 15 & taskkill /f /im acrord32.exe" call "C:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe" /t !filename2! ) RUNDLL32 PRINTUI.DLL,PrintUIEntry /y /n "\\SITE\PRINTER-DEFAULT" exit exit