6

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

该程序应该是一个 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;
        }
    }
4

2 回答 2

2

如果没有额外的工具,在 .NET 中打印是相当困难的。

  1. Visual Studio 2008 和报表向导

    它是我最喜欢的工具。它基于 Visual Studio 2008 中提供的 Microsoft Reporting Services。它的工作方式类似于 MS Access 报告功能。

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

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

  3. 如果您有时间,您可能会与这样的像素作斗争:

    在 codeproject.com 上使用 C# Dave Brighton 简化 .NET 打印

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

于 2012-11-13T09:56:00.437 回答
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 站点。我将我的内容设置为 670 像素,这很合适。
  • 您正在使用 Webbrowser 控件进行打印。他将从您本地安装的 Internet Explorer(或注册表,如果我们想要的话)中获取打印机设置。如果您想更改它,请进入您的 IE > 打印 > 页面设置...并设置您想要的选项,或者只是在您的注册表中更改它。

希望这可以帮助某人:)

于 2012-11-13T09:46:48.480 回答