none
Crystal Report 2008 輸出到網路印表機的問題 RRS feed

  • 問題

  •  

    大家好:

             小妹碰到一個狀況,不論是開發端或是發佈到Server的IIS上都會發生。

    當執行一份Crystal Report 後,prview OK!但是按下列印要真的輸出時,

    送出列印的目的印表機是網路印表機且 該印表機 在Win2003無 相對應的Default Driver ,

    就會出現Error,

     

    因此IIS 所在的主機上如果有裝過選取列印的印表機的 Driver 就沒問題.

    但是相對的你有幾台印表機就得將全部機型的 Driver 都裝在該台機器上, 連版本和所選列印方式(PS/PCL)都得一致.

     

    目前試圖尋找用這樣方式連線到 printer  server 是用哪個account 連上去的?

    看來可能是因為該 account 試圖連線 remote printer時 沒有權限讀 Driver 檔案. 

    目前試驗過 並非 IUSER , 請問還有可能是什麼 account 呢?

     

    我的環境是: Win 2003 Server + SP2 + IIS 6.0 + VS 2008 professional + vs2008內建的 Crystal Report  + ASP.NET 2.0

     

    謝謝大家幫忙!!

     

    Patmis

     

    發生的錯誤如下:

     

    '/xxx' 應用程式中發生伺服器錯誤。
    --------------------------------------------------------------------------------

    Invalid printer specified.  ==> 這一行在中文環境會出現的訊息為『指定的印表機無效』


    描述: 在執行目前 Web 要求的過程中發生未處理的例外情形。請檢閱堆疊追蹤以取得錯誤的詳細資訊,以及在程式碼中產生的位置。

    例外詳細資訊: System.Runtime.InteropServices.COMException: Invalid printer specified.

    原始程式錯誤:

    在執行目前 Web 要求期間,產生未處理的例外狀況。如需有關例外狀況來源與位置的資訊,可以使用下列的例外狀況堆疊追蹤取得。 

    堆疊追蹤:


    [COMException (0x80000201):
    Invalid printer specified.]
       CrystalDecisions.ReportAppServer.Controllers.PrintOutputControllerClass.ModifyPrinterName(String newVal) +0
       CrystalDecisions.CrystalReports.Engine.PrintOptions.set_PrinterName(String value) +51
       rtUserCtrl.ucToolBar.btnPrint_Click(Object sender, EventArgs e) +238
       System.Web.UI.WebControls.Button.OnClick(EventArgs e) +105
       System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +107
       System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +7
       System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +11
       System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33
       System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1746


    --------------------------------------------------------------------------------
    版本資訊: Microsoft .NET Framework 版本:2.0.50727.1433; ASP.NET 版本:2.0.50727.1433

     

    --------- 以上為按下列印後,Client端會出現的 Error -----------

     

    同時在 Server 的事件檢視器中,會輸現系統的warning 如下:

     

    Event code: 3005
    Event message: 發生未處理的例外狀況。
    Event time: 2008/12/16 下午 05:20:27
    Event time (UTC): 2008/12/16 上午 09:20:27
    Event ID: f38195e6179e4b13b5e1ca8225404213
    Event sequence: 30
    Event occurrence: 3
    Event detail code: 0
     
    Application information:
        Application domain: /LM/W3SVC/1/Root/ht-1-128738926520990909
        Trust level: Full
        Application Virtual Path: /xxx
        Application Path: d:\inetpub\wwwroot\xxx\
        Machine name: ServerX 
     
    Process information:
        Process ID: 2464
        Process name: w3wp.exe
        Account name: NT AUTHORITY\NETWORK SERVICE
     
    Exception information:
        Exception type: ArgumentException
        Exception message: 這些資料行目前沒有唯一的值。
     
    Request information:
        Request URL: http://serverX/xxx/xxx01_t.aspx?sys_id=xxx&page=xxx01&menu=Y&func=QHR&user_id=&startdate=2008/12/16&enddate=2008/12/16
        Request path: /xxx/xxx01_t.aspx
        User host address: 168.1.1.2 
        User: 
        Is authenticated: False
        Authentication Type: 
        Thread account name: NT AUTHORITY\NETWORK SERVICE
     
    Thread information:
        Thread ID: 1
        Thread account name: NT AUTHORITY\NETWORK SERVICE
        Is impersonating: False
        Stack trace:    於 rtUserCtrl.ucFuncBar.Page_Load(Object sender, EventArgs e)
       於 System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
       於 System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
       於 System.Web.UI.Control.OnLoad(EventArgs e)
       於 System.Web.UI.Control.LoadRecursive()
       於 System.Web.UI.Control.LoadRecursive()
       於 System.Web.UI.Control.LoadRecursive()
       於 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
     

     

     

    2008年12月18日 上午 01:26

解答

  • 我們有給這個帳號的權限,但還是不行!!
    目前的變通方法就是都強迫client裝Driver,
    謝謝您!
    • 已提議為解答 Lolota Lee 2009年2月6日 上午 01:27
    • 已標示為解答 Lolota Lee 2009年2月9日 上午 10:02
    2009年2月5日 上午 08:47

所有回覆

  • 妳是要讓IIS那台主機直接印出報表嗎?

    不然可以不用指定印表機啊,client預覽時直接點CR的列印按鈕,選印表機就可以使用client的印表機列印了,

     

    另外提醒一下,如果你是使用vs.net的內鍵CR,如果有用CR viewer的話,

    她是有列印次數的限制的,超過75次就不能用了,只是我不知道他的75次是如何計算,

    所以我在寫的時候,通常是產生pdf檔讓使用者下載後列印。

    2008年12月20日 上午 02:53
  • 我是希望透過該台主機去列印,因為要控管USER選擇的印表機。

     

    之前我們是用 VS.Net 2002 版內建的CR ,並沒有碰到這樣的問題,

    這次算是升級,寫法一樣,可是就碰到這樣的狀況了!!

     

    謝謝您提醒列印次數的問題,這點我再去確認一下它的計算方式!

     

    Thank you

     

     

    2008年12月29日 上午 05:33
  • ASP.NET應用程式在Windows 2003是透過NETWORK Service去連線,您可以試著給與這個帳號權限

    讓它能存取printer driver.

    • 已提議為解答 LOLOTAModerator 2009年2月3日 上午 01:58
    • 已取消提議為解答 Lolota Lee 2009年2月9日 上午 10:02
    2009年1月19日 上午 03:56
    版主
  • 我們有給這個帳號的權限,但還是不行!!
    目前的變通方法就是都強迫client裝Driver,
    謝謝您!
    • 已提議為解答 Lolota Lee 2009年2月6日 上午 01:27
    • 已標示為解答 Lolota Lee 2009年2月9日 上午 10:02
    2009年2月5日 上午 08:47