2015-12-14 15 views
1

我開發了一個管理學校的wpf c#程序。用戶不時必須打印單個學生的證書。例如,這個學生在我們學校學習的證書,或者他的津貼金額的證明。什麼是打印單頁報告(wpf c#程序)的最快選項

對這些報告有:

  1. 固定文本
  2. 關於學生喜歡自己的名字等

對於這個任務,我建重佈局動態信息及其服務的宗旨,但用戶請求的速度更快。

我的問題是:rdls(關閉報表服務器)這個任務的正確方法?還是有更快的選擇?

回答

1

我使用FlowDocument來實現這樣的簡單打印功能。您將XAML元素添加到文檔中,就像在編程中在窗口中創建XAML時一樣。使用相同的佈局控件(網格,堆疊面板等)來排列所有其他控件(文本段落,圖像等),並且當打印FlowDocument時,它將根據各種因素「流入」頁面如在打印機對話框中選擇的紙張尺寸。

聲明:這是複製/粘貼在一個急件,但它應該讓你知道它是如何工作的!

// Show the print dialog 
var dlg = new PrintDialog(); 
if (!dlg.ShowDialog().GetValueOrDefault()) 
{ 
    // User cancelled 
    return; 
} 

// Create and initialise the FlowDocument 
_doc = new FlowDocument(); 
_doc.FontFamily = new FontFamily("Arial"); 
_doc.FontSize = 14; 

// Add a paragraph of text 
var para = new Paragraph(new Run("My paragraph.....")) 
{ 
    FontSize = 14, 
    Foreground = new SolidColorBrush(Colors.Black), 
    Margin = new Thickness(0,0,0,12) 
}; 
_doc.Blocks.Add(para); 

// Add an image 
var para = new Paragraph(); 
var img = new Image 
{ 
    Source = bitmapSource, 
    HorizontalAlignment = HorizontalAlignment.Center, 
    Margin = new Thickness(0,0,0,12) 
}; 
para.Inlines.Add(img); 
_doc.Blocks.Add(para); 

// Print 
var documentPaginator = ((IDocumentPaginatorSource)_doc).DocumentPaginator; 
dlg.PrintDocument(documentPaginator, "My print job"); 

在我的應用程序中,我將所有這些封裝在一個類中(因爲我有幾個需要打印功能的地方)。該類在其構造函數中創建並初始化FlowDocument,並提供各種方法,例如「AddParagraph()」,「AddImage()」,用於指定邊距,字體,字體大小等不同的重載。

文檔分頁器最後一點是我實現的簡化版本,但它可能已足夠滿足您的需求。 (我創建了一個自定義文檔分頁器,可以在每個頁面上設置頁眉和頁腳)。

+0

非常感謝。我從這個方法開始,試圖建立一個印刷的紙。我相信我將不得不檢查這種方法,以確定它是否允許即時打印而無需預覽,導出爲html或docx等等。 –