订购打印请求、分组打印请求

订购打印请求、分组打印请求

我已经建立了跟踪系统

  1. 凌晨 5 点到 7 点之间,会有 12 封电子邮件中的一封以随机顺序送达
  2. Outlook 规则获取电子邮件,并运行 VBA 脚本,该脚本会自动修改并打印部分附加电子表格(并非全部)
  3. 我早上把所有的打印件拿来,手动把它们分组并装订在一起

在打印之前对打印件进行分组以便打印和装订的最佳方法是什么?

答案1

你没有说你想要它们按照什么顺序排列......

试试这个。转到打印机属性并单击高级按钮。单击“在最后一页后台打印后开始打印”,并确保勾选了“首先打印后台打印的文档”。

然后,电子邮件将按照 Outlook 打印的顺序打印。要测试 Outlook 的功能,您可以尝试打印到文件,并检查文件的创建顺序。如果顺序不正确,请尝试更改 Outlook 中的设置,使顺序符合您的要求;然后重新连接到打印机。

答案2

我解决了我的问题并最终做了以下事情:

  1. 每个文档都打印为 *.xps 文件,并Z:\Print使用 VBA 中的 XPS 打印机(工作机器上不提供 PDF 打印)将其放入文件夹中,使用以下代码:

    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
      

相关内容