2013-11-25 49 views
2

我在ASP.NET MVC項目試圖從MSDN這個例子:印刷通過ASP.NET MVC的打印隊列作業失敗,0字節大小的文件打印

public void Print(string printQueueName, string printData) 
    { 
     PrintQueue printerQueue = new LocalPrintServer().GetPrintQueue(printQueueName); 

     // Call AddJob 
     PrintSystemJobInfo myPrintJob = printerQueue.AddJob(); 

     // Write a Byte buffer to the JobStream and close the stream 
     Stream myStream = myPrintJob.JobStream; 
     Byte[] myByteBuffer = UnicodeEncoding.Unicode.GetBytes(printData); 
     myStream.Write(myByteBuffer, 0, myByteBuffer.Length); 
     myStream.Close(); 
    } 

我試圖打印到PDF,XPS和OneNote虛擬打印機。確認打印對話框後,打印作業出現在打印機隊列中然後消失,並且打印的文件被創建,但大小爲0字節!

我不知道我的錯在哪裏,希望能在這裏找到幫助。

在此先感謝。

回答

2

這裏接近MSDN的示例在我的打印機上也不起作用。這是不相關的,因爲這個例子不足以打印PDF或XPS,因爲不能簡單地將這些類型的字節流作爲流輸出到打印機。您至少有以下幾種選擇:

  • 使用PrintDocument。將PDF/TIFF /可能的onenote文件轉換爲圖像(E.G. tiff文件),您可以使用該課程使用事件PrintDocument.PrintPageGraphics.DrawImage進行打印。
  • 使用/購買PDF第三方print API's。您可以通過直接的XPS打印方式逃脫,但它有一些問題(請參閱下面的詳細信息)。 OneNote我不知道。
  • 使用Process
  • 寫自己的打印驅動程序

更多詳情
我不熟悉使用OneNote打印打印通過command line的文件。 XPS打印可能非常棘手。邊距需要用代碼計算,因爲它們取決於可在PrintTicket中找到的打印機設置。使用WPF(與XPS緊密相連),我在XPS序列化過程中發現了一處錯誤。 XpsDocument不保留計算出的可打印區域。文件將打印默認的可打印區域,可能導致切斷。我在Microsoft Connect上確認了這個錯誤。請參閱下面的回覆。

最後,如果您碰巧正在運行SSRS,那麼您可以輕鬆地將輸出類型從PDF/XPS更改爲圖像。

反饋和微軟連接 XPS錯誤(鏈接是私有的):

標題:XpsDocument不保留對WPF的> FixedPage.Arrange()

的WPF團隊計算出的安排最近審查了這個問題,並且不會是 解決這個問題,因爲此時該團隊正在關注影響最多WPF開發人員的錯誤 。如果您認爲 這個問題已得到解決,請使用任何 必需的支持細節重新激活此錯誤。

我們感謝您的反饋。但是,在WPF的下一個版本中,此問題將不會解決 。謝謝。 -WPF團隊