新手求问 .如何使用 PrintDocument 字符串换行打印 呢 ??PrintPage 中 完整代码.
DrawString// 获取字符串.
// aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\r\n aaaaaaaa bbbbbbbbbbb ccccccccccccccc \r\n dddddddddd
// 某些行字符串 过长。
StringReader lineReader = new StringReader(this.GetPrintSB().ToString());
// 获得绘图对象
Graphics g = e.Graphics;
// 定义字体
Font titleFont = new Font("宋体", 9, FontStyle.Bold);
// 画刷
Brush brush = new SolidBrush(Color.Black);
// 行数,用于计算当前高度。
int count = 0;/*
* 网上查 说可以 自动换行. 但是我使用后没什么反应。不知道是不是用错了..
* 使用 Rectangle 是可以换行.. 不过每行长度不一样。高度 很难控制(并且ReadLine 下1行字符串打印的预定高度会变形)。
* 而且会按单词换行。
*/
StringFormat fmt = new StringFormat();
fmt.LineAlignment = StringAlignment.Center;
fmt.FormatFlags = StringFormatFlags.LineLimit;float topMargin = e.MarginBounds.Top; // 上边距
float leftMargin = 10; // 左边距
while((line=lineReader.ReadLine()) != null)
{
// DrawString方式进行打印。
yPosition = topMargin + (count * titleFont.GetHeight(g));
g.DrawString(line, titleFont, brush ,leftMargin, yPosition, fmt);
count++;
}
DrawString// 获取字符串.
// aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\r\n aaaaaaaa bbbbbbbbbbb ccccccccccccccc \r\n dddddddddd
// 某些行字符串 过长。
StringReader lineReader = new StringReader(this.GetPrintSB().ToString());
// 获得绘图对象
Graphics g = e.Graphics;
// 定义字体
Font titleFont = new Font("宋体", 9, FontStyle.Bold);
// 画刷
Brush brush = new SolidBrush(Color.Black);
// 行数,用于计算当前高度。
int count = 0;/*
* 网上查 说可以 自动换行. 但是我使用后没什么反应。不知道是不是用错了..
* 使用 Rectangle 是可以换行.. 不过每行长度不一样。高度 很难控制(并且ReadLine 下1行字符串打印的预定高度会变形)。
* 而且会按单词换行。
*/
StringFormat fmt = new StringFormat();
fmt.LineAlignment = StringAlignment.Center;
fmt.FormatFlags = StringFormatFlags.LineLimit;float topMargin = e.MarginBounds.Top; // 上边距
float leftMargin = 10; // 左边距
while((line=lineReader.ReadLine()) != null)
{
// DrawString方式进行打印。
yPosition = topMargin + (count * titleFont.GetHeight(g));
g.DrawString(line, titleFont, brush ,leftMargin, yPosition, fmt);
count++;
}
.....,
其实就是在需要换行的地方加回车换行符。
字母和中文用Length属性是一样的,一个中文字符的Length是1。
我说的不是 属性的长度..是字体的长度..
就好像 啊啊啊
aaa如果用 length 来判断长度的话。就会出现这种 过长和过短的情况。
GDI+绘制 line字符串 在(leftMargin,yPosition)位置绘制 跟换行有啥关系啊,看不懂
是坐标换行方法..
因为单行绘制的话不使用 增加 y 。会出现打印在同一行..
如果是直接 使用g.DrawString(整表,titleFont, brush ,leftMargin, yPosition, fmt);
缺陷就是 无法做到换行操作。在 制表的时候就 可以加 换行的操作。但是会出现上边提到的 长短不一的情况。
网上查说 StringFormat , 在打印的时候 DrawString 加入 StringFormat 可以完美解决换行。但是试来试去都不行。