c#打印格式化数据的简便方法

时间:2012-11-12 08:29:23

标签: c# .net xml winforms printing

我正在寻找一种简单的方法来打印带有来自数据库的数据的DIN-A4纸。应将数据填充到带边框的多个表中。某些数据应具有不同的文本格式p.e.粗体或下划线。我还应该能够在该表上打印多个图像。

该程序应该是Windows窗体应用程序或用C#编写的控制台应用程序。

格式化数据并将其打印出来的最简单/最常用的方法是什么?

任何建议:)

编辑:

这是我目前的代码几乎没有成功。它实际打印但我得到的只是打印的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;
        }
    }

2 个答案:

答案 0 :(得分:2)

如果没有其他工具,在.NET中打印非常困难。

  1. Visual Studio 2008和Report Wizard

    这是我最喜欢的工具。它基于Microsoft Reporting Services,可在Visual Studio 2008中使用。它的工作方式类似于MS Access报告功能。

    不幸的是,我无法在其他Visual Studio版本中运行它并设计报告。 Reporting Services中提供了Reporting Services,您可以将它们与任何Visual Studio一起使用,但在2008以外的版本中没有报表设计器/向导工具。)

  2. Crystal Reports(价格昂贵但非常好)。

  3. 如果你有时间,你可以用这样的像素对抗:

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

  4. WebBrowser控件,正如@colosso在另一个答案中所写,但这取决于Internet Explorer版本,我个人不喜欢这种方法。

答案 1 :(得分: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文件打印这样的网站感觉某种“hacky”,但这是我发现做这样的事情最简单的方法。特别是如果你打印非常复杂的网站上有很多不同的东西。

很高兴知道:

  • 我不得不打印DIN-A4网站。我将内容设置为670px,这很合适。
  • 您正在使用Web浏览器控件进行打印。他将从您当地安装的Internet Explorer(或注册表中获取打印机设置,如果我们想要完全)。如果你想改变它进入你的IE&gt;印刷&gt;页面设置...并设置所需的选项或只在注册表中更改它。

希望这有助于某人:)