У меня есть следующая система на месте

  1. Одно из 12 писем приходит с 5 до 7 утра в случайном порядке.
  2. Правило Outlook забирает электронную почту и запускает сценарий VBA, который изменяет и автоматически печатает части некоторых из прикрепленных электронных таблиц (не все)
  3. Я забираю все распечатки утром и вручную распределяю их по группам и скрепляю вместе

Как лучше всего сгруппировать распечатки перед печатью, чтобы их можно было распечатать и сшить?

2 ответа2

0

Вы не говорите, в каком порядке вы хотите их в ...

Попробуй это. Перейдите в Свойства принтера и нажмите кнопку "Дополнительно". Нажмите «Начать печать после того, как последняя страница будет помещена в буфер», и убедитесь, что установлен флажок "Печать буферных документов первым".

Электронные письма будут распечатаны в том порядке, в котором их печатает Outlook. Чтобы проверить, что делает Outlook, вы можете попробовать распечатать в файл и проверить, в каком порядке создаются файлы. Если это неправильный порядок, попробуйте изменить настройки в Outlook, чтобы порядок соответствовал желаемому; затем снова подключитесь к принтеру.

0

Я решил свою проблему и в итоге сделал следующее:

  1. Каждый документ печатается в файлы * .xps в папку Z:\Print с использованием принтера XPS (печать PDF недоступна на рабочей машине) в VBA с использованием этого кода:

    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
    
  2. В 7.00 запланирован пакетный скрипт (с использованием ghostscript), конвертирующий все файлы * .xps в файлы * .pdf. Вероятно, нам не нужны две переменные имени файла, это остаток от отладки.

    @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
    
  3. Затем запускается написанная мной java-программа, которая объединяет отдельные pdf-файлы в нужные группы (используя pdfbox).

    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();
       }
    }
    
    1. Наконец, запускается пакет, который печатает все объединенные файлы PDF. Отложенное уничтожение процесса требуется, если вы попытаетесь убить процесс после вызова процесса, он просто скажет вам, что процесс не найден (даже если он находится прямо в диспетчере задач).

      @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
      

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .