我正在嘗試將打印支持添加到正在編寫的C#WPF應用程序中,並且我正在撕掉我的頭髮。我試圖從WPF應用程序中的窗口打印單個圖像。圖像是運輸標籤,打印機是裝有4「x6」運輸標籤庫存的熱敏打印機。打印的代碼如下:PrintDialog.PrinterSettings等效於WPF
PrintDialog pd = new PrintDialog();
if (pd.ShowDialog() == true)
{
Image tmpImage = new Image();
tmpImage.Stretch = Stretch.Uniform;
tmpImage.Width = pd.PrintableAreaWidth;
tmpImage.Source = this.img_label.Source;
tmpImage.Measure(new Size(pd.PrintableAreaWidth, pd.PrintableAreaHeight));
tmpImage.Arrange(new Rect(new Point(0, 0), tmpImage.DesiredSize));
pd.PrintVisual(tmpImage, "Shipping Label");
}
此代碼的工作,它會顯示打印對話框,我可以選擇我的打印機,其配置爲使用正確的標籤庫,並打印標籤。但是,正如其他帖子所指出的,它不會保存我選擇的設置。因此,如果我選擇在不關閉應用程序的情況下再次打印相同的圖像,它將恢復爲默認打印機,即使選擇了正確的打印機,也會將打印機默認爲默認設置,其中包括使用錯誤尺寸的標籤庫存。所以每次打印時,我必須選擇打印機並將其配置爲使用正確的紙張。這在現實世界的使用中根本不可接受。
經過大量的在線搜索,我發現很多關於此的帖子,但他們都談論保存PrintDialog.PrinterSettings
對象,然後用它來初始化下一個PrintDialog
實例。但是,在WPF中,沒有PrinterSettings
類的成員PrintDialog
。這是一個Win Forms對象。爲什麼Win Forms和WPF PrintDialog對象不同於我,但這可能是一個無法得到解答的問題。真正的問題是我現在所做的。如有必要,我可以重新創建整個滾輪,並擁有自己的打印機選擇器和打印機配置頁,並使用PrintDocument
對象打印圖像,並完全繞過PrintDialog
。除非完全有必要,否則我寧願不這樣做。顯示PrintDialog
很不錯,這是人們習慣的,它已經具備了配置內置打印機的所有能力。但是,我怎樣才能初始化WPF中的PrintDialog
以選擇合適的打印機並使用正確的打印機設置?如果只有我使用的Windows窗體,這將內置。什麼是WPF等價物?
第二個問題是,如果沒有WPF等價物,推薦的方法是什麼?我並不需要讓用戶能夠在我的應用程序中配置打印機。我希望它所做的就是記住他們下次打印時選擇的以前的設置,就像其他任何曾經寫過的PC應用程序一樣。這怎麼會這麼難?
任何人都可以提供幫助將不勝感激。與此同時,我正在重新發明諺語之輪。我希望很快得到一個更簡單的答案。
謝謝!
謝謝丹尼斯!我曾看過這些課程,但他們很複雜,令人困惑,我不認爲他們會幫助我。我通過將PrintTicket和PrintQueue對象保存到變量並使用下次保存的值初始化我的PrintDialog來測試它,並且它工作正常!我只需要一種方法來保存這些以供將來使用,如果用戶關閉並重新打開應用程序。有沒有辦法使設置成爲新的默認值,或者我可以序列化對象並保存爲應用程序的設置? – BrianVPS
@BrianVPS:其實你需要一個打印機名稱和紙張大小。爲什麼不把它們序列化?我不確定,'PrintQueue'是可序列化的... – Dennis
我想我可以保存這些,但我擔心他們可能會改變打印質量或調整其他設置,我不希望我會確保我保存所有內容。但是,如果這並不簡單,我可以保存這兩個並修改程序以保存其他設置,如果這成爲一個問題。非常感謝你的幫助! – BrianVPS