在我们的VB6应用程序中,当用户的默认打印机设置为Microsoft Office Document Image Writer时,以下代码行导致应用程序抛出错误号380(无效的属性值)。
Printer.Orientation = vbPRORLandscape
如果您不熟悉此行的操作,它负责确保将用户的默认打印机设置为以横向模式打印提供给它的任何内容,并提供横向尺寸(高度/宽度)(在打印机对象),因此以下代码可以正确地在页面上放置项目放置坐标。
我已经四处寻找,这似乎是MODIW驱动程序普遍接受(并抱怨)的“缺少功能”,例如,参见this thread。有一些解决方法,例如向用户显示“ Windows打印机设置”窗口(大概指示他们在选项中选择横向)或检查打印机是否为MODIW,然后阻止用户生成需要横向显示的文档。模式。还有一个建议涉及一个称为DEVMODE的东西,但是我不理解这个建议,也没有找到一个不错的例子,也没有任何人确认它是可行的。
我有点机智。物理打印机对此行没有问题。甚至Microsoft XPS Document Writer和我尝试过的各种PDF打印机在此行上都没有问题。我在这里扔掉它,希望一些很棒的VB6开发人员找到了一些以前未记录的使用Microsoft Office Document Image Writer驱动程序进行方向更改的方法。
这里是一个怪异的解决方法,您可以尝试解决此怪异的错误。 Microsoft offer一个免费的DLL,可让您更改打印机的默认设置,而不仅仅是使用Printer对象临时设置为当前文档的横向。
因此您可以尝试类似的操作(KnowledgeBase article中的示例表单代码)。进行任何打印之前,它将默认方向更改为横向。然后,在卸载表单时,它将恢复原始的默认方向。我还没有尝试过,不知道它是否会工作。
Dim obj As PageSet.PrinterControl
Private Sub Command1_Click()
On Error GoTo errorhandler:
Set obj = New PrinterControl
obj.ChngOrientationLandscape
<Now do the printing>
Exit Sub
errorhandler:
MsgBox Err.Description
obj.ReSetOrientation
End Sub
Private Sub Form_Unload(Cancel As Integer)
obj.ReSetOrientation 'This resets the printer to portrait.'
End Sub
我还没有使用Document Image Writer,但是此thread表明方向实际上是由注册表值控制的。我感到驱动程序仅在注册表值指示的模式下运行,并且将与注册表值不匹配的Print.Orientation属性的任何值视为无效。
尝试一下:
PrintSchema.OrientationValue.Landscape
查看此链接CLICK ME(您需要向下滚动或更好,在页面上搜索“景观”)。这里讨论的问题与您描述的问题不同,但我认为它将如果您对我的理解正确,那么您就是您要找的答案。