我正在寻找一种简单的方法来打印带有来自数据库的数据的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;
}
}
答案 0 :(得分:2)
如果没有其他工具,在.NET中打印非常困难。
Visual Studio 2008和Report Wizard
这是我最喜欢的工具。它基于Microsoft Reporting Services,可在Visual Studio 2008中使用。它的工作方式类似于MS Access报告功能。
不幸的是,我无法在其他Visual Studio版本中运行它并设计报告。 Reporting Services中提供了Reporting Services,您可以将它们与任何Visual Studio一起使用,但在2008以外的版本中没有报表设计器/向导工具。)
Crystal Reports(价格昂贵但非常好)。
如果你有时间,你可以用这样的像素对抗:
Simplified .NET printing in C# Dave Brighton at codeproject.com
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”,但这是我发现做这样的事情最简单的方法。特别是如果你打印非常复杂的网站上有很多不同的东西。
很高兴知道:
希望这有助于某人:)