Crystal Report and Printer

Crystal Report 列印

需求

用Crystal Report做完一張出餐單,想要送到不同的印表機做列印。

作法 

1. 安裝多台的印表機

2. ReportDocument 指定不同的印表機列印

當然你有很多手段能直接溝通印表機做列印,

ex:透過socket送指令給priter,根本不用再客戶機器上安裝N台印表機,

但是這代表著列印失敗的後處理你要自己做掉,

透過安裝的印表機就可以直接在印表機佇列執行Retry或是Delete,

相對地安裝N台印表機就是此種做法的缺點。

安裝印表機

OS         Win10

印表機   TYSSO PRP 300

【裝置和印表機】.【新增印表機】

直接點【我要的印表機未列出】

【以手動設定新增本機印表機或網路印表機】

如果你之前已經建過連接Port可以選【使用現有的連接埠】並從下拉選單選中選取

如果沒有建過就選【建立新的連接埠】,

主機跟印表機透過網路溝通【Standard TCP/IP Port】

主機跟印表機透過其他的Port溝通【Local Port】,正常主機上的Port,OS應該都已經建好了,在【使用現有的連接埠】清單中應該會看到

【主機名稱或IP位址】印表機的IP

【連接埠名稱】是之後會在【使用現有的連接埠】清單中看到的名字,並不是指Port號

【查詢印表機並自動選取要使用的驅動程式】因為已經有驅動的檔案了所以不勾

OS會嘗試著連接你設定的IP

連不上沒關係,請選【自訂】.【設定】

【通訊協定】請選擇【原始】

【連接埠號碼】9100

這些設定都是說明書上提供的,不同廠商的印表機請依各自文件做設定

【從磁片安裝】

【瀏覽】

找到廠商提供的.INF檔案

選擇型號【PRP-300】

出現這畫面代表你之前有安裝過,如果你版本太舊可以【取代目前的驅動程式】

【印表機名稱】很重要的名字,程式指定哪台印表機做列印就是看這個欄位

選擇【不共用印表機】

完成後會出現在【裝置和印表機】清單

ReportDocument 指定印表機列印
                using (var cryRpt = new ReportDocument())
                {
                    var folder = Directory.GetCurrentDirectory();

                    // 報表檔案
                    var file = Path.Combine(folder, "SimpleReport.rpt");

                    // 載入報表
                    cryRpt.Load(file);

                    // 資料來源
                    var dataSource = this.FakeData();

                    // 設定資料來源
                    cryRpt.SetDataSource(dataSource);

                    // 指定印表機印出
                    var printer = new PrinterSettings();
             
                    // 裝置和印表機中的名字
                    printer.PrinterName = "PRP-300";

                    var printer2 = new PrinterSettings();
                    printer2.PrinterName = "PRP-300 (第二台)";

                    cryRpt.PrintToPrinter(printer, printer.DefaultPageSettings, false);

                    cryRpt.PrintToPrinter(printer2, printer2.DefaultPageSettings, false);

                    // 預設印表機
                    //cryRpt.PrintToPrinter(1, false, 0, 0);
                }

最重要的PrinterSettings.PrintFileName 設對就可以了。

問題

1. 安裝動作多次 ex: 3台PAD * 5台印表機 = 15(全部要安裝次數)

目前我並沒有比較好的解法。