2009-09-03 39 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屬性的任何值與註冊表值無效地視爲無效。

相關問題