C# 打印时将字符串对齐到列中
我试图将一些字符串对齐到列中,但打印预览总是显示类似的内容C# 打印时将字符串对齐到列中,c#,C#,我试图将一些字符串对齐到列中,但打印预览总是显示类似的内容 Artikelnr. Name Gewicht (kg) Menge Einheit 1 Dog 1 10 kg 2 Cat 1 8 kg 3 Horse 1 22 kg 前两列看起来不错,但之后的一切都搞砸了 这是代码的样
Artikelnr. Name Gewicht (kg) Menge Einheit
1 Dog 1 10 kg
2 Cat 1 8 kg
3 Horse 1 22 kg
前两列看起来不错,但之后的一切都搞砸了
这是代码的样子:
String header = String.Format("{0, -15} {1, -20} {2, -10} {3, -10} {4, -10}", "Artikelnr.", "Name", "Gewicht (kg)", "Menge", "Einheit");
e.Graphics.DrawString(header , font, Brushes.Black, e.MarginBounds.Left, rowPosition);
rowPosition += 20;
e.Graphics.DrawLine(new Pen(Brushes.Black), new Point(e.MarginBounds.Left, rowPosition), new Point(e.MarginBounds.Right, rowPosition));
rowPosition += 15;
font = new Font("Arial", 8);
String item = String.Empty;
foreach (var i in activeOrder.OrderItem)
{
item += String.Format("{0, 15} {1, -30} {2, -30} {3, -30} {4, -30}", i.ItemId, i.Item.Name, i.Item.Weight, i.Quantity, i.Item.Unit);
item += String.Empty;
}
e.Graphics.DrawString(item, font, Brushes.Black, e.MarginBounds.Left, rowPosition);
我之前也试过这个
font = new Font("Arial", 8);
String item = String.Empty;
foreach (var i in activeOrder.OrderItem)
{
item = String.Format("{0, 15} {1, -30} {2, -30} {3, -30} {4, -30}", i.ItemId, i.Item.Name, i.Item.Weight, i.Quantity, i.Item.Unit);
e.Graphics.DrawString(item, font, Brushes.Black, e.MarginBounds.Left, rowPosition);
rowPosition += 15;
}
我已经看了几个例子,其中大部分都是写在控制台上的。这就是造成差异的原因,还是我遗漏了什么
干杯
编辑:
调试时,文本可视化工具为项目字符串提供正确的输出,但打印预览和打印版本不正确
int columnPosition = e.MarginBounds.Left;
int rowPosition = e.MarginBounds.Top + 300;
// Item header
String columnHeaders = String.Format("{0, -15} {1, -20} {2, -10} {3, -10} {4, -10}", "Artikelnr.", "Name", "Gewicht (kg)", "Menge", "Einheit");
e.Graphics.DrawString(columnHeaders, font, Brushes.Black, e.MarginBounds.Left, rowPosition);
rowPosition += 20;
e.Graphics.DrawLine(new Pen(Brushes.Black), new Point(e.MarginBounds.Left, rowPosition), new Point(e.MarginBounds.Right, rowPosition));
rowPosition += 15;
font = new Font("Courier", 8);
String item = String.Empty;
foreach (var i in activeOrder.OrderItem)
{
item += String.Format("{0, -10} {1, -30} {2, -20} {3, -20} {4, -0}", i.ItemId, i.Item.Name, i.Item.Weight, i.Quantity, i.Item.Unit);
item += Environment.NewLine;
}
e.Graphics.DrawString(item, font, Brushes.Black, e.MarginBounds.Left, rowPosition);
是否有更好的方法打印项目列表中的数据?可能将其放入数据表或其他什么东西?问题是空格字符的大小与您使用的字体中的其他字符不同。简单的解决方法。。。使用单间距字体
font = new Font("Courier", 8);
要解决此问题,请计算列的最大宽度(通过计算每个列项目),然后
DrawString
每个列项目。当你移动到第2列时,你必须为你想要的列大小添加一个偏移量。该死,你太快了!不幸的是,这没有什么区别。@Lahey-不相信你,你能看到字体的变化吗?是的,我能看到字体的变化,但输出保持不变(除了字体已经改变)。在调试和检查字符串时,文本可视化工具会给我正确的输出。打印预览可能有问题吗?编辑:打印到.xps,同样的问题。我将字符串分成两部分,分别打印。不知怎么的,这解决了问题。