在VB6中,Microsoft Office Document Image Writer不能以编程方式设置为横向?

在VB6中,Microsoft Office Document Image Writer不能以编程方式设置为横向?,vb6,printing,orientation,Vb6,Printing,Orientation,在我们的VB6应用程序中,当用户的默认打印机设置为Microsoft Office Document Image Writer时,以下代码行会导致应用程序抛出错误号380(无效属性值) 如果您不熟悉此行的操作,它将负责确保用户的默认打印机设置为以横向模式打印提供给它的内容,并提供横向尺寸(高度/宽度)(在打印机对象上)所以下面的代码可以正确地将项目放置坐标建立在页面上 我目不转睛地看了看,这似乎是一个被普遍接受的(并抱怨)来自MODIW驱动程序的“缺失功能”,例如,请参见。有一些解决方法,如向用

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

如果您不熟悉此行的操作,它将负责确保用户的默认打印机设置为以横向模式打印提供给它的内容,并提供横向尺寸(高度/宽度)(在打印机对象上)所以下面的代码可以正确地将项目放置坐标建立在页面上

我目不转睛地看了看,这似乎是一个被普遍接受的(并抱怨)来自MODIW驱动程序的“缺失功能”,例如,请参见。有一些解决方法,如向用户显示Windows打印机设置窗口(假定指示他们在选项中选择横向)或检查打印机是否为MODIW,然后阻止用户生成需要处于横向模式的文档。还有一个建议涉及一个叫做DEVMODE的东西,但我不理解这个建议,也没有找到一个像样的例子,也没有找到任何人证实它是有效的

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

试试这个:

PrintSchema.OrientationValue.Landscape
请查看此链接(您需要向下滚动或更好,在页面上搜索“景观”)。此处讨论的问题与您描述的不同,但如果我理解正确,我认为它将为您提供您正在寻找的答案。

尝试以下方法:

PrintSchema.OrientationValue.Landscape

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

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

我没有使用文档图像编写器,但这表明方向实际上由注册表值控制。我感觉驱动程序只在注册表值指示的模式下运行,它会将与注册表值不匹配的Print.Orientation属性的任何值视为无效。

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

因此,您可以尝试类似的方法(来自的示例表单代码)。在进行任何打印之前,它会将默认方向更改为横向。然后在卸载表单时恢复原始默认方向。我还没试过这个,不知道是否有效

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
Dim obj As PageSet.PrinterControl
专用子命令1_Click()
错误转到错误处理程序时:
设置obj=新打印机控制
obj.CHNGORIENTION景观
出口接头
错误处理程序:
MsgBox错误说明
定向
端接头
私有子表单_卸载(取消为整数)
obj.ReSetOrientation“这会将打印机重置为纵向。”
端接头

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

因此,您可以尝试类似的方法(来自的示例表单代码)。在进行任何打印之前,它会将默认方向更改为横向。然后在卸载表单时恢复原始默认方向。我还没试过这个,不知道是否有效

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
Dim obj As PageSet.PrinterControl
专用子命令1_Click()
错误转到错误处理程序时:
设置obj=新打印机控制
obj.CHNGORIENTION景观
出口接头
错误处理程序:
MsgBox错误说明
定向
端接头
私有子表单_卸载(取消为整数)
obj.ReSetOrientation“这会将打印机重置为纵向。”
端接头

谢谢Badfish,但请您详细说明一下这个建议好吗?我在VB6中找不到可使用的PrintSchema对象,谷歌似乎也没有对这一建议提供任何帮助。提供的链接确实有一些建议。如果您使用的是.NET,而OP不是.PrintSchema是WPF,那么它肯定不是VB6。那一页也没有讨论克基特尔的问题。谢谢你,贝德菲什,但你介意详细说明一下这个建议吗?我在VB6中找不到可使用的PrintSchema对象,谷歌似乎也没有对这一建议提供任何帮助。提供的链接确实有一些建议。如果您使用的是.NET,而OP不是.PrintSchema是WPF,那么它肯定不是VB6。那一页也没有讨论克基特尔的问题。