我正在尝试将一些字符串对齐到列中,但是打印预览总是向我显示类似
的内容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);
是否有更好的方法在项目列表中打印数据?也许将它放入dataTable或其他东西?
答案 0 :(得分:3)
问题是空格字符与您使用的字体中的其他字符大小不同。简单的修复...使用单倍间距字体。
font = new Font("Courier", 8);
硬性修复,计算列的最大宽度(通过计算每个列项),然后DrawString
每个列项。当您移动到第2列时,您必须为希望列的大小添加偏移量。