1

在我们的 VB6 应用程序中,当用户的默认打印机设置为Microsoft Office Document Image Writer时,以下代码行会导致应用程序抛出错误号 380(无效的属性值)。

Printer.Orientation = vbPRORLandscape

如果您不熟悉这条线的作用,它负责确保用户的默认打印机设置为在横向模式下打印提供给它的任何内容,并且还提供横向尺寸(高度/宽度)(在打印机object) 所以下面的代码可以正确地基于页面上的项目放置坐标。

我已经环顾四周,它似乎是 MODIW 驱动程序中普遍接受(并抱怨)的“缺失功能”,例如看到这个线程。有一些变通方法,例如向用户显示 Windows 打印机设置窗口(可能指示他们在选项中选择横向)或检查打印机是否为 MODIW,然后阻止用户生成需要横向的文档模式。还有另一个建议涉及称为 DEVMODE 的东西,但我不明白这个建议,也没有找到一个像样的例子,也没有找到任何人确认它有效。

我有点不知所措。物理打印机对这条线没有问题;即使是 Microsoft XPS Document Writer 和我尝试过的各种 PDF 打印机,这条线也没有问题。我把它扔在这里,希望一些很棒的 VB6 开发人员找到了一些以前未记录的方法来使用 Microsoft Office Document Image Writer 驱动程序更改方向。

4

3 回答 3

1

我没有使用过 Document Image Writer,但这个线程表明方向实际上是由注册表值控制的。我感觉驱动程序仅在注册表值指示的模式下运行,并且它将任何与注册表值不匹配的 Print.Orientation 属性值视为无效。

于 2009-09-03T16:47:15.843 回答
1

这是一个奇怪的解决方法,您可以尝试解决这个奇怪的错误。Microsoft提供了一个免费的 DLL,允许您更改打印机的默认设置,而不仅仅是使用 Printer 对象将当前文档临时设置为横向。

所以你可以尝试这样的事情(来自知识库文章的示例表单代码)。在进行任何打印之前,它会将默认方向更改为横向。然后在卸载表单时恢复原始默认方向。这个我没试过,不知道能不能用。

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
于 2009-09-03T17:00:14.600 回答
-1

试试这个:

PrintSchema.OrientationValue.Landscape

看看这个链接点击我(你需要向下滚动或者更好,在页面上搜索“风景”)那里讨论的问题与你描述的不一样,但我认为它会给你答案你正在寻找,如果我理解正确的话。

于 2009-09-03T16:11:04.417 回答