2

特定的打印機有沒有辦法對我來說,一個PRINTDLG結構(或類似的東西)傳遞給我的web瀏覽器(IE瀏覽器/ IWebBrowser2的)控制,使得打印輸出到在PrintDlg中指定的打印機無需彈出打印對話框?我想在不更改默認打印機的情況下執行此操作。 IWebBrowser2 :: ExecWB提供了一種跳過對話框彈出(OLECMDEXECOPT_DONTPROMPTUSER)的方法,但不能指定打印機。打印使用IE控件不改變默認打印機

有兩個問題,只是改變了默認打印機:1)它的速度慢,2)Internet Explorer中保持其當前的打印機緩存。當您打印到默認打印機時,它將緩存該打印機。如果您然後更改默認打印機並讓其再次打印,IE將不會使用新的默認打印機,它將使用其緩存的當前打印機。

IE 5.5之後,當前打印機不存儲在Windows註冊表中。

作爲替代,我研究了從IE控制獲取圖像和打印自己而不是得到控制打印自己4個不同的想法:

  1. 使用IViewObject ::平局。我能得到的圖像,但不能把它擴展到紙的方法相同,它打印的IE什麼時候:

    RECTL RECT;
    rect.left = 0;
    rect.top = 0;
    rect.right = GetDeviceCaps(printerhdc,PHYSICALWIDTH);
    rect.bottom = GetDeviceCaps(printerhdc,PHYSICALHEIGHT);

    StartDoc(printerhdc,&二);
    StartPage(printerhdc);
    HRESULT HR = pViewObj->繪製(DVASPECT_DOCPRINT,頁,NULL,pTargetDevice,printerhdc,printerhdc,& RECT,NULL,NULL,0); //打印太小
    EndPage(printerhdc);
    EndDoc(printerhdc);

  2. 發送WM_PAINT到IE控制。我在這方面做得並不多,因爲我在網上讀到一篇文章,認爲這種方式並不好。

  3. AxDHTMLEDLib。非常少的文檔,我認爲這只是爲了.net

  4. 使用IHTMLElement,IHTMLElementRender-> SetDocumentPrinter,IHTMLElementRender-> DrawToDc。微軟已經撤銷對IE9的支持

任何想法,你可能會瘋狂讚賞!提前致謝!

回答

1

如果您在使用默認打印機時有一定的靈活性,這裏有另一種想法。儘管如此,這有點圓潤。

  • 使您的默認打印機一些PDF作家(如Amyuni PDF或Adobe Distiller)。這些打印機驅動程序將傳入作業轉換爲PDF文件,您可以將其設置爲將文件保存在某個磁盤位置。

  • 使用PowerShell將此PDF文件打印到您需要的目標打印機。您可以使用PrintUI DLL接口或使用「打印」動詞。 http://www.eggheadcafe.com/software/aspnet/30441939/how-to-suppress-printdialog-when-using-print-verb.aspx提供了一個例子。通過這樣做,您可以在此腳本中執行您所有的打印機隊列定製,並保留默認打印機原樣

+0

感謝您的想法!我沒有考慮過。這將是棘手的,因爲我們的用戶不一定會安裝PDF驅動程序。 – 2011-05-02 18:12:47

+0

也會有性能問題,但如果沒有其他直接方法出現,我會考慮它。 – 2011-05-02 18:24:22

相關問題