2013-10-11 60 views
0

框架= .NET 4.5
語言= C#打印控制表格

我工作在一個相對簡單的程序,其目標是替代使用.NET Windows應用程序的IBM Lotus Notes數據庫應用程序。然而,我遇到了一些麻煩。

在筆記中,我很容易選擇要打印的文檔,然後使用選定的表格將所有選定的文檔從視圖中打印出來。我想嘗試在我的WPF應用程序中複製這種效果。我一直在閱讀這個主題,實際上我可以用一個可視化的文檔打印出一個單獨的文檔(在這種情況下,一個網格可以保存所有的表單和用戶輸入的數據),除了事實以外,它看起來不錯我寧願在打印輸出上看起來稍有不同,例如DatePicker設置爲不顯示其選擇按鈕。

這是我的實際問題。是否可以創建這樣一個「表單」,同時考慮到數據的位置必須嚴格位於頁面上的某個點(FlowDocument因此不是最好的想法),同時允許我使用這個單一元素作爲主只需單擊打印按鈕即可打印出多種形式(不包括文件選擇)?我在哪裏可以找到學習這種方法的好資源?

+0

我已經完成了自己對這個問題的回答,但是我必須等幾個小時才能發佈。我今晚一定要這麼做。 – Greg

回答

0

爲了記錄,這一直在等待,直到我允許我回答我自己的問題。我不能說我同意這個'邏輯'。

好吧,我設法或多或少的想出了一些東西,至少現在。我仍然打印使用視覺效果,因爲它允許我使用我已經使用過的相同的xaml代碼。這並不完美,但我會分享我所擁有的。

首先,我已經收集了一些我想要打印的對象。這是爲了測試目的,因爲這將是並且應該是用戶定義的集合。然後,我該集合傳遞給我的打印功能如下:

private void Print_Test() 
     { 
      PrintDialog dlg = new PrintDialog(); 
      if (dlg.ShowDialog() == false) return; 
      int i = 1; 

      Size pageSize = new Size(dlg.PrintableAreaWidth, dlg.PrintableAreaHeight); //I found this Size object very important. Without it I only got an empty page 
      ReportPrintForm rf; 
      foreach (KeyValuePair<String, Report> kvp in ((App)Application.Current).Reports) 
      { 
       rf = new ReportPrintForm(kvp.Value); 
       rf.Measure(pageSize); 
       rf.Arrange(new Rect(0, 0, pageSize.Width, pageSize.Height)); 
       dlg.PrintVisual(rf, "Job_" + i); 
       i++; 
      } 
     } 

現在,我知道這是不是因爲每種形式在其自己的工作打印的功能完善,但它是一個起點,以解決我的問題使用一個嚴格創建的「表單」打印出多個對象。這將在用戶看不到它的情況下打印出該表單,如果我想爲用戶演示文稿使用一組樣式,而爲打印版本使用一組樣式,則這樣做很好。缺點是,至少現在,我必須手動設置字段(TextBoxes)的內容,並且不能依賴於DataContext字段。我不知道爲什麼,但同樣,這只是稍後完成我的問題的起點。