2012-11-12 77 views
6

我正在尋找一種簡單的方法來打印DIN-A4紙與數據庫上的數據。數據應該填充到多個帶有邊框的表格中。一些數據應該具有不同的文本格式p.e.粗體或下劃線。我也應該能夠在該表單上打印多個圖像。c#簡單的方法來打印格式化的數據

該程序應該是Windows Forms應用程序或用C#編寫的控制檯應用程序。

哪種格式化數據和打印數據最簡單/最常見的方式是?

apreciated任何建議:)

編輯:

這是我當前的代碼,幾乎沒有成功。它實際上打印,但我得到的只是打印的XML文件。

 private void printButton_Click(object sender, EventArgs e) 
    { 

     string printPath = System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop); 
     fileToPrint = new System.IO.StreamReader(printPath + @"\test.xml"); 
     printFont = new System.Drawing.Font("Arial", 10); 

     PrintDocument printDocument1 = new PrintDocument(); 
     printDocument1.PrintPage += new PrintPageEventHandler(printDocument1_PrintPage); 
     printDocument1.Print(); 
     fileToPrint.Close(); 
    } 

    private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) 
    { 
     float yPos = 0f; 
     int count = 0; 
     float leftMargin = e.MarginBounds.Left; 
     float topMargin = e.MarginBounds.Top; 
     string line = null; 
     float linesPerPage = e.MarginBounds.Height/printFont.GetHeight(e.Graphics); 
     while (count < linesPerPage) 
     { 
      line = fileToPrint.ReadLine(); 
      if (line == null) 
      { 
       break; 
      } 
      yPos = topMargin + count * printFont.GetHeight(e.Graphics); 
      e.Graphics.DrawString(line, printFont, Brushes.Black, leftMargin, yPos, new StringFormat()); 
      count++; 
     } 
     if (line != null) 
     { 
      e.HasMorePages = true; 
     } 
    } 
+0

那麼,到目前爲止你累了什麼? – neeKo

+0

所以,對於紙張,我建議使用類似html的東西(這裏是一個很好的例子http://www.codeproject.com/Articles/32376/A-Professional-HTML-Renderer-You-Will-Use),但是,你真的需要解釋(畫)你想得到什麼,如果沒有這些信息,我不能提供更好的答案。 – Cynede

+0

我想在我的論文中有這樣的內容:http://jsfiddle.net/35uCK/ – colosso

回答

2

印刷.NET中是相當困難,無需額外的工具。

  1. Visual Studio 2008和Report Wizard

    它我最喜歡的工具。它基於Visual Studio 2008中提供的Microsoft Reporting Services。它與MS Access報告功能類似。

    不幸的是我無法運行它並在其他Visual Studio版本中設計報告。 Reporting Services在.NET Framework中可用,您可以將它們與任何Visual Studio一起使用,但在2008以外的版本中沒有報告設計器/嚮導工具)。

  2. 水晶報告(價格昂貴,但非常好)。

  3. 如果你有時間,你可以打個像素這樣的:

    Simplified .NET printing in C# Dave Brighton at codeproject.com

  4. WebBrowser控件,如@colosso在另一個答案寫,但是這取決於Internet Explorer版本,我個人不要不喜歡這種方法。

1

我發現了兩個可能性:

1)在我看來,這是一個更糟糕。我找到了一個名爲「Antena house formatter」的第三方軟件。你可以在www.antennahouse.com上找到它,但不幸的是它既不是開源軟件,也不是免費軟件。該軟件允許您將xml,xsl或xsl-fo數據轉換爲pdf和其他格式。從那裏你可以打印標準的C#。 由於某些原因,我沒有選擇這種方式:在我看來,迷上第三方軟件並不是一個好的解決方案,儘管這個Antennahouse格式化程序是一個相當不錯的,可靠和快速的軟件。

2)這是我選擇的解決方案。您可以創建一個簡單的WebBrowser控件,並使用保存的html文件填充它,或者您可以使用動態創建的字符串填充它。我現在生成的字符串女巫包含整個HTML文件就可以在加載到WebBrowser控件:

webBrowser1.Document.OpenNew(true); 
string strHtml = "<html><head></head><body></body></html>"; 
webBrowser1.Document.Write(strHtml); 

當裝載形式我打開一個新的「標籤」與:

webBrowser1.Navigate("about:blank"); 

你可以秀Webbrowser控件對正在打印的網站進行「預覽」或者只是將其隱藏起來。最後,當你加載你的html文件到控制,你可以用它打印:

webBrowser1.Print(); 

它將流打印該文檔與您默認打印機。我知道,使用html文件打印這樣的網站會感覺某種「黑客」,但這是我發現做這種事情的最簡單方式。特別是如果你網絡打印非常複雜的網站上有許多不同的東西。

很高興認識:

  • 我不得不打印DIN-A4的網站。我將我的內容設置爲670像素,這很合適。
  • 您正在使用Web瀏覽器控件進行打印。他將從本地安裝的Internet Explorer(或註冊表,如果我們想完全)採取打印機設置。如果你想改變它進入你的IE>打印>頁面設置...並設置你想要的選項或只是在註冊表中更改它。

希望這可以幫助別人:)

+0

進一步研究:我現在使用Telerik報告。使用起來非常簡單,許多綁定數據的方法和所有類型的格式化都是可能的!不幸的是,它不是免費的,但它是值得的。欲瞭解更多信息,請訪問http://www.telerik.com/ – colosso

相關問題