Java 从Oracle BPM 10g打印到Microsoft Document Image Writer时抑制打印对话框
我们有一个Oracle BPM 10g活动: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
- 这能做到吗?即,打印到Microsoft Document Image Writer
- 如果是,是否可以抑制“文件位置”对话框
- 怎么做
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通常不可用,您现在只需输入方法名称即可。最佳实践是预先对其进行宏处理并重新使用代码。-向模板中添加代码肯定会起作用(我经常这样做),但添加另一层依赖关系可能很难在生产中得到支持。