Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从Oracle BPM 10g打印到Microsoft Document Image Writer时抑制打印对话框_Java_Ms Word_Oracle10g_Business Process Management_Modi - Fatal编程技术网

Java 从Oracle BPM 10g打印到Microsoft Document Image Writer时抑制打印对话框

Java 从Oracle BPM 10g打印到Microsoft Document Image Writer时抑制打印对话框,java,ms-word,oracle10g,business-process-management,modi,Java,Ms Word,Oracle10g,Business Process Management,Modi,我们有一个Oracle BPM 10g活动: 读取表单填充受保护的Word文档模板 将数据合并到字段中 将合并/填充的副本保存到文件系统 将文档打印到选定的预定义打印机或默认打印机 在“真正的”打印机上打印时,所有这些都可以正常工作。但是,现在需要将Word文档输出到TIFF。试图使用“Microsoft Document Image Writer”作为打印机选项之一,无法按预期工作。通常,当直接从Word(或任何其他应用程序)打印到Microsoft Document Image Writer

我们有一个Oracle BPM 10g活动:

  • 读取表单填充受保护的Word文档模板
  • 将数据合并到字段中
  • 将合并/填充的副本保存到文件系统
  • 将文档打印到选定的预定义打印机或默认打印机
  • 在“真正的”打印机上打印时,所有这些都可以正常工作。但是,现在需要将Word文档输出到TIFF。试图使用“Microsoft Document Image Writer”作为打印机选项之一,无法按预期工作。通常,当直接从Word(或任何其他应用程序)打印到Microsoft Document Image Writer时,系统会提示您输入保存结果文件的位置。尝试从BPM 10g中的此特定活动打印时,不会出现此提示

    理想情况下,我们实际上希望绕过对话框,直接将TIFF输出到文件系统。然而,我还没有找到一种通过编程来控制它的方法。也就是说,能够在代码中指定目标文件名。现在,我只是想将输出结果发送到Microsoft Document Image Writer,以确保它正常工作

    因此,底线问题是:

    • 这能做到吗?即,打印到Microsoft Document Image Writer
    • 如果是,是否可以抑制“文件位置”对话框
    • 怎么做

    你没有提到你自动化Word的方式。 在Word VBA中,您可以使用此示例立即打印活动文档,而不显示打印对话框:

    Public Sub PrintToXPS()
    'Presume that Microsoft XPS Document Writer was already
    'set up as ActivePrinter   
    Dim strFilePath As String    
    strFilePath = "C:\temp\helloworld.xps"    
    ActiveDocument.PrintOut Background:=False, outputfilename:=strFilePath
    End Sub
    
    不需要使用打印对话框。但是,如果要通过dialog对象进行操作,可以在Word中使用Word.dialog类型的变量并提供必要的参数,例如

       Dim dlgFilePrint As Word.Dialog
    Set dlgFilePrint = Application.Dialogs(wdDialogFilePrint)
    dlgFilePrint.Update
    dlgFilePrint.PrToFileName = strFilePath
    dlgFilePrint.printtofile = True
    'add other parameters as needed ...
    'lock up parameter names in  Word VBA Online Help using "WdWordDialog-Enumeration"
    'as key word
    dlgFilePrint.Execute
    

    我在这里用XPS打印机所做的,你当然也可以用任何其他打印机。

    你没有提到你自动化Word的方式。 在Word VBA中,您可以使用此示例立即打印活动文档,而不显示打印对话框:

    Public Sub PrintToXPS()
    'Presume that Microsoft XPS Document Writer was already
    'set up as ActivePrinter   
    Dim strFilePath As String    
    strFilePath = "C:\temp\helloworld.xps"    
    ActiveDocument.PrintOut Background:=False, outputfilename:=strFilePath
    End Sub
    
    不需要使用打印对话框。但是,如果要通过dialog对象进行操作,可以在Word中使用Word.dialog类型的变量并提供必要的参数,例如

       Dim dlgFilePrint As Word.Dialog
    Set dlgFilePrint = Application.Dialogs(wdDialogFilePrint)
    dlgFilePrint.Update
    dlgFilePrint.PrToFileName = strFilePath
    dlgFilePrint.printtofile = True
    'add other parameters as needed ...
    'lock up parameter names in  Word VBA Online Help using "WdWordDialog-Enumeration"
    'as key word
    dlgFilePrint.Execute
    

    我在这里使用XPS打印机所做的,您当然也可以使用任何其他打印机。

    谢谢您,domke consulting

    经过更多的搜索,我找到了这个

    添加这些注册表项以抑制对话框和抑制生成后输出似乎可以达到以下目的:

    在HKEY\U CURRENT\U USER\Software\Microsoft\Office\12.0\MODI\MDI Writer中

    • PrivateFlags=17(十进制)
    • OpenInMODI=0(十进制)
    出于我们的目的,如果我们使用以下相关参数调用
    printOut()
    方法(为简洁起见,此处省略了其他参数),这似乎可以正常工作:


    谢谢你,domke咨询公司

    经过更多的搜索,我找到了这个

    添加这些注册表项以抑制对话框和抑制生成后输出似乎可以达到以下目的:

    在HKEY\U CURRENT\U USER\Software\Microsoft\Office\12.0\MODI\MDI Writer中

    • PrivateFlags=17(十进制)
    • OpenInMODI=0(十进制)
    出于我们的目的,如果我们使用以下相关参数调用
    printOut()
    方法(为简洁起见,此处省略了其他参数),这似乎可以正常工作:


    这是通过Oracle提供的COMBridge服务在BPM活动中执行的;它是COM组件(在本例中为Word)和BPM流程代码之间的适配器层。我不知道是否可以在其中获得对对话框对象的引用,但我想知道是否可以在模板本身中将其编码为宏;我可能能够从BPM中执行宏。我得试试。我对这个COMBridge服务一无所知,但我想它允许你通过COM与另一个应用程序对话。这意味着您通常可以调用其方法或设置其属性,就像在Windows脚本主机或PowerShell脚本程序中一样-由于Intellisense通常不可用,您现在只需输入方法名称即可。最佳实践是预先对其进行宏处理并重新使用代码。-向模板中添加代码肯定会起作用(我经常这样做),但添加另一层依赖关系可能很难在生产中得到支持;它是COM组件(在本例中为Word)和BPM流程代码之间的适配器层。我不知道是否可以在其中获得对对话框对象的引用,但我想知道是否可以在模板本身中将其编码为宏;我可能能够从BPM中执行宏。我得试试。我对这个COMBridge服务一无所知,但我想它允许你通过COM与另一个应用程序对话。这意味着您通常可以调用其方法或设置其属性,就像在Windows脚本主机或PowerShell脚本程序中一样-由于Intellisense通常不可用,您现在只需输入方法名称即可。最佳实践是预先对其进行宏处理并重新使用代码。-向模板中添加代码肯定会起作用(我经常这样做),但添加另一层依赖关系可能很难在生产中得到支持。