【问题标题】:Microsoft Office Document Image Writer cannot be programmatically set to Landscape in VB6?Microsoft Office Document Image Writer 无法在 VB6 中以编程方式设置为横向?
【发布时间】:2010-11-25 08:25:42
【问题描述】:

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

Printer.Orientation = vbPRORLandscape

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

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

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

【问题讨论】:

    标签: vb6 printing orientation


    【解决方案1】:

    这是一个奇怪的解决方法,您可以尝试解决这个奇怪的错误。 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
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        试试这个:

        PrintSchema.OrientationValue.Landscape
        

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

        【讨论】:

        • 感谢 Badfish,但您介意详细说明这个建议吗?我没有找到要在 VB6 中使用的 PrintSchema 对象,而且 Google 似乎对这个建议也没有任何帮助。
        • 提供的链接确实有一些建议。如果您使用的是 .NET 而 OP 不是。
        • PrintSchema 是 WPF,所以肯定不是 VB6。该页面也没有讨论 ckittel 的问题。
        猜你喜欢
        • 1970-01-01
        • 2012-10-15
        • 2010-11-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多