none
關於開發 print job 問題 RRS feed

  • 問題

  • 各位前輩,

    有一個小問題想尋問一下,

    我有個小需求...是這樣的....我們的印表機裡可以設定自訂義紙張(Custom Paper), 當我設定 4 種寬與高...例如
    100*50, 90*78, 45*20, 100*50 很特殊的紙張....在我 c# 裡, 必需要「同時」預覽不同的紙張, 並且當我點選任何一張紙張的預覽列印時
    能順利把我100*50, 90*78, 45*20, 100*50的資料給列印出去, 大家都知道印表機都有最低限的紙張寬與高度

    EPSON A 系列:100*50
    LEXMARK C1系列: 90*78
    HP LJ系列:45*20
    HP I系列:100*50

    必需按列印時全部一次送出去給各個印表機,讓他在同個JOB裡一次做完, 請問在C#裡能做出這樣的結果嗎?
    各位前輩是否能提出想法與簡單的CODE, 謝謝!!

    如果.NET平台暫時不能, 也請告訴我!! 謝謝

    如果需要搭配硬體設備, 就必需要, 我只是想單純用軟體來控制印表機!!!
    再此謝謝
    2009年12月31日 下午 03:21

解答

  • 我試了一下, 目前的結果的確是無法跳過一千頁, 我有找到一篇文章 Enhanced PrintPreviewDialog Class with PDF Output
    作者有提到Page images are cached in the control, which limits the size of the documents that can be previewed.
    也許這就是原因, 我不太確定.
    你可以試著使用這作者提供的元件替代原來的 PrintPreviewDialog, 也許有機會解決你的問題.
    另外

    張貼文章應注意事項及應提供資訊

    這篇文章你應該先讀一讀, 裡面也有論壇貼圖教學.
    心冷大說的也沒什麼錯, 因為當你沒有告知的時候, 我們真的沒有辦法明瞭你是否曾經如何去測試過, 這樣的狀況, 我們也很難找出具體方案給你建議.
    基本上我們都是非微軟員工, 只是憑著一股熱情在論壇上盡量幫助大家, 像今天你這問題, 其實並不是我平常熟悉的範圍, 還是花了好幾個小時在測試與尋求方案.
    這是沒有人給我們報酬的, 而我們最大的希望無非是能夠讓參與MSDN論壇的網友都能夠培養良好的學習心態 (說到這, 我又想抱怨某一個XX家的無政府狀態),而不是只養成了抄 Code的習慣, 也因為有時我們會比較嚴苛, 才不致於讓這個論壇充滿作業文和一些亂七八糟的事情.
    社群的成功與學習精神的維護要靠大家支持, 希望你能明白.
    學而不思則罔, 思而不學則殆.
    如果你一直都看不懂、不想學習看懂、抗拒看懂MSDN Library的話,那你最好放棄想要寫好程式這件事
    如果你自私地不肯回饋與分享,那別人為何要花時間回答你的問題?
    • 已標示為解答 微不足道 2010年1月2日 上午 03:33
    2010年1月1日 下午 10:18
    版主

所有回覆

  • 你可以先搜尋 印表機 出血 看看。
    比如說你可以用
    PrintDocument.DefaultPageSettings 來讀取預設印表機紙張大小跟硬體出血


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2009年12月31日 下午 04:22
  • 大大你好,

    有關你提出的意見是用PrintDocument.DefaultPageSettings ..

    但是一個 os 只能允許選擇 default printer, 不能同時選擇 n 個!!

    在不選擇印表機時 可以允許各自印各自的....當然選擇預設印表機的這個功能就沒啥作用了

    有其他好的方法嗎

    2010年1月1日 上午 03:01
  • ...
    我的需求只有 DefaultPageSettings ,而透過列印對話盒,也只是將:
    PrintDocument.DefaultPageSettings = DialogPageSetup.PageSettings

    就可以應用到其他選擇到的印表機,而非系統預設印表機。

    PrintDocument 本身也有 PageSettings 屬性

    依據線上手冊這個屬性的備註:
    ms-help://MS.MSDNQTR.v90.cht/fxref_system.drawing.printing/html/b43e7735-b887-ccf6-6c0c-16f28bc28b29.htm

    備註
    您可透過 PrinterSettings 屬性指定數個印表機設定。例如,使用 PrinterSettings.Copies 屬性指定要列印的份數,PrinterSettings.PrinterName 屬性指定要使用的印表機,PrinterSettings.PrintRange 指定要列印的頁面範圍。


    論壇是交流經驗、分享技術的地方,不是代寫程式碼的地方。
    網友把經驗分享給你後,你好歹把線上手冊翻一翻、試寫程式碼看看 (大不了變更預設印表機多次也能解決預設印表機的問題) ,再提出你遭遇的問題或困難,而不是一開始就否定了,當你還沒做就否定了某些事以後,看的人就會否定你的態度跟腦袋靈活性了。

    如果你做了以後,才依據你遭遇的狀況回應,我會有興趣測測看,把問題解決。
    你直接就把解決方向否決,我只想回:「關我屁事」
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2010年1月1日 上午 03:40
  • 大大你好,

    此方法是我在未發佈前就已試過了

    所以才尋問是否有其他方法...因此你也許誤會此事, 在此也只是論譠, 不需要說話那麼嚴苛, 畢竟我們不是對岸像他們那幫人一樣沒水準!!!

    另外分享一下我測式的經驗,  在彈出 page setup dialog 裡的紙張名稱, 其實也有一些是microsoft bug.....

    包含previewdialog裡控制項無法選擇上一頁下一頁就算你超過一千頁, 始終也是一千頁,這也是一個很大的bug!!!

    我只是想表達的是, 別一開始就下論 「你好歹把線上手冊翻一翻、試寫程式碼看看 (大不了變更預設印表機多次也能解決預設印表機的問題」,這句話也有點「重」

    不管如何,我還是很感謝你
    2010年1月1日 下午 07:51
  • 大大你好,

    此方法是我在未發佈前就已試過了

    所以才尋問是否有其他方法...因此你也許誤會此事!!!

    另外 彈出 page setup dialog, 其實也有些是 Microsoft bug.....包含預覽畫面的控制項無法超過一千頁,

    呵呵

    可以提供一下之前的測試程式碼與結果說明嗎 ? 這樣其實會比較容易讓大家有個方向去做測試. 因為你說測過了, 我們也猜不出來你是怎麼測的.
    我很好奇的是, 預覽畫面超過一千頁會有什麼樣的訊息出現嗎 ? 可否提供參考 ?
    學而不思則罔, 思而不學則殆.
    如果你一直都看不懂、不想學習看懂、抗拒看懂MSDN Library的話,那你最好放棄想要寫好程式這件事
    如果你自私地不肯回饋與分享,那別人為何要花時間回答你的問題?
    2010年1月1日 下午 08:00
    版主
  • 請使用previewdialog...寫分頁超過二千張...
    上面有個控制項是是頁碼....你看能否輸入1001跳到1001張頁碼
    就知道答案嘍

    2010年1月1日 下午 08:08
  • 請使用previewdialog...寫分頁超過二千張...
    上面有個控制項是是頁碼....你看能否輸入1001跳到1001張頁碼
    就知道答案嘍


    你這樣的語氣只會讓我覺得你在挑釁, 感覺是我在問你問題嗎 ?

    學而不思則罔, 思而不學則殆.
    如果你一直都看不懂、不想學習看懂、抗拒看懂MSDN Library的話,那你最好放棄想要寫好程式這件事
    如果你自私地不肯回饋與分享,那別人為何要花時間回答你的問題?
    2010年1月1日 下午 08:15
    版主
  • for (int i = 0; i < 2000; i++)
                {

                    document = print.DataPrintDocument;

                    if (document == null) continue;

                    //if (!print.isPrint) return;

                    document.BeginPrint += this.Document_BeginPrint;

                    printPreviewDialog1.Document = document;
                    printPreviewDialog1.WindowState = FormWindowState.Maximized;

                    try
                    {
                        printPreviewDialog1.ShowDialog();
                    }
                    catch (Exception er)
                    {
                        if (er.Message.Contains(printPreviewDialog1.Document.PrinterSettings.PrinterName) || _isMissedPrinter)
                        {
                            CommonFunction.ErrorMessage("印表機 " + printPreviewDialog1.Document.PrinterSettings.PrinterName.ToString() + " 獲取不到");
                            _isMissedPrinter = true;
                        }
                    }
                    finally
                    {
                        document.Dispose();
                    }
                }

    輸出結果後上面的控制項頁碼是不能超過1000頁的....我找不到論譠能上傳檔案, 否則我就傳圖給你參考了!!!

    2010年1月1日 下午 08:25
  • 我試了一下, 目前的結果的確是無法跳過一千頁, 我有找到一篇文章 Enhanced PrintPreviewDialog Class with PDF Output
    作者有提到Page images are cached in the control, which limits the size of the documents that can be previewed.
    也許這就是原因, 我不太確定.
    你可以試著使用這作者提供的元件替代原來的 PrintPreviewDialog, 也許有機會解決你的問題.
    另外

    張貼文章應注意事項及應提供資訊

    這篇文章你應該先讀一讀, 裡面也有論壇貼圖教學.
    心冷大說的也沒什麼錯, 因為當你沒有告知的時候, 我們真的沒有辦法明瞭你是否曾經如何去測試過, 這樣的狀況, 我們也很難找出具體方案給你建議.
    基本上我們都是非微軟員工, 只是憑著一股熱情在論壇上盡量幫助大家, 像今天你這問題, 其實並不是我平常熟悉的範圍, 還是花了好幾個小時在測試與尋求方案.
    這是沒有人給我們報酬的, 而我們最大的希望無非是能夠讓參與MSDN論壇的網友都能夠培養良好的學習心態 (說到這, 我又想抱怨某一個XX家的無政府狀態),而不是只養成了抄 Code的習慣, 也因為有時我們會比較嚴苛, 才不致於讓這個論壇充滿作業文和一些亂七八糟的事情.
    社群的成功與學習精神的維護要靠大家支持, 希望你能明白.
    學而不思則罔, 思而不學則殆.
    如果你一直都看不懂、不想學習看懂、抗拒看懂MSDN Library的話,那你最好放棄想要寫好程式這件事
    如果你自私地不肯回饋與分享,那別人為何要花時間回答你的問題?
    • 已標示為解答 微不足道 2010年1月2日 上午 03:33
    2010年1月1日 下午 10:18
    版主
  • Dear Bill,

    謝謝你的回覆, 這個問題我之前已經有找到解決方案..需要有別人公司的預覽控件代替它!!

    不過一般行業很少一次性預覽到達二至三十萬筆資料....

    最後我解決的方案是使用infragistics ultrapreviewdialog

    可以一次性到達5000筆預覽 也供你參考!! 這是我所測式的結果!!!

    不過有print job的問題 不知bill 有何看法?

    如果依照使用者每次在預覽不同的報表時 還對印表機的預設切來切去 恐怕會瘋狂

    因此才尋問各位高手 是否微軟有提供相當方法能解決我的需求問題

    我測式如下:

    PAPER KIND 不管在任何一台印表機 都是系統預設值約有36種SIZE

    唯一大家共同點是在於每家的印表機都能設CUSTOM PAPER SIZE

    假設我有四台印表機, 都必需使用 CUSTOM PAPER SIZE

    使用者無法接受每次按一直要切換各家的印表機

    所以我才會想出是否用 PRINT JOB能解決此問題

    但是找不到相關資源能參考
    2010年1月2日 上午 03:31