2009-09-03 48 views
0

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

Printer.Orientation = vbPRORLandscape 

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

我已经四处看到了,它似乎是一个普遍接受(并抱怨)的MODIW驱动程序“缺少的功能”,例如见this thread。有一些解决方法,例如向用户显示Windows打印机设置窗口(在推断指示他们选择选项中的横向之后)或检查打印机是否为MODIW,然后阻止用户生成需要处于横向位置的文档模式。还有一个建议涉及DEVMODE,但我不明白这个建议,也没有找到一个体面的例子,我也没有发现任何人确认它的工作。

我有点在我的智慧结束。物理打印机对这条生产线没有任何问题;即使是Microsoft XPS Document Writer和我尝试过的各种PDF打印机也没有问题。我在这里抛出了这个问题,希望一些很棒的VB6开发者发现了一些以前没有记录的方式,使用Microsoft Office Document Image Writer驱动程序进行方向更改。

回答

1

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

所以你可以尝试这样的东西(样本表格代码从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 
-1

试试这个:PrintSchema.OrientationValue.Landscape

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

+0

非常感谢Badfish,但请介绍一下这个建议吗?我没有找到在VB6中使用的PrintSchema对象,并且Google似乎对此建议也没有任何帮助。 – ckittel 2009-09-03 16:16:45

+0

提供的链接确实有一些建议。如果你使用.NET而OP不是。 – Corin 2009-09-03 16:40:02

+0

PrintSchema是WPF,所以它肯定不是VB6。该页面也没有讨论ckittel的问题。 – MarkJ 2009-09-03 16:44:09

1

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

相关问题