winform 打印 页边距设置

ddh619174120 2016-06-15 11:41:37
需要打印预览右边文字的边距和左边一样


我的代码是这样写的,没有效果

private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
//打印方向(纵/横)
this.printDocument1.DefaultPageSettings.Landscape = false;
//设置纸张类型
PaperSize ps = new PaperSize("A4", (int)(5 * 100), (int)(10 * 100));
printDocument1.DefaultPageSettings.PaperSize = ps;

//边距,上下左右
int leftMargin = e.MarginBounds.Left;
int topMargin = e.MarginBounds.Top;
int rightMargin = e.MarginBounds.Right;
int bottomMargin = e.MarginBounds.Bottom;
int nWidth = e.MarginBounds.Width - rightMargin - leftMargin;
int nHeight = e.MarginBounds.Height - topMargin - bottomMargin;

printDocument1.DefaultPageSettings.Margins = new Margins(leftMargin, rightMargin, topMargin, bottomMargin);

float linesPerPage = 0; //记录每页最大行数

float yPos = 0;//记录将要打印的一行数据在垂直方向的位置

int count = 0; //记录每页已打印行数

string line = null;//从RichTextBox中读取一段字符将存到line中

//每页最大行数=一页纸打印区域的高度/一行字符的高度
linesPerPage = e.MarginBounds.Height / printFont.GetHeight(e.Graphics); //如果当前页已打印行数小于每页最大行数而且读出数据不为null,继续打印

while (count < linesPerPage && ((line = streamToPrint.ReadLine()) != null))
{
yPos = topMargin + (count * printFont.GetHeight(e.Graphics)); //yPos为要打印的当前行在垂直方向上的位置
e.Graphics.DrawString(line, printFont, Brushes.Black, leftMargin, yPos, new StringFormat()); //打印,参见第五章
count++;//已打印行数加1
}
if (line != null)//是否需要打印下一页
e.HasMorePages = true;//需要打印下一页
else
e.HasMorePages = false;//不需要打印下一页
}

应该怎么修改,麻烦帮我看看,谢谢!
...全文
384 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ddh619174120 2016-06-17
  • 打赏
  • 举报
回复
这个想法我已经弄好 了,差不多是你这样,我现在烦恼的是rtf编码怎么打印预览,因为有些图形是不能转换成string类型的,那打印预览是e.Graphics.DrawString,得怎么处理,打印预览可以e.Graphics.DrawImg?
清江堤畔 2016-06-16
  • 打赏
  • 举报
回复


RectangleF rectF1 = new RectangleF(30, 10, 100, 122);
e.Graphics.DrawString(text1, font1, Brushes.Blue, rectF1);

/* 
      text1:要绘制的文本
      font1:文本的字体
      Brushes:笔刷,上面是蓝色的笔刷
       rectF1:指定的矩形,RectangleF 类型,四个参数分别是:开始点的横坐标、开始点的纵坐标、宽度、高度。(文本绘制的位置在矩形范围内自动换行)
*/

Forty2 2016-06-15
  • 打赏
  • 举报
回复
e.Graphics.DrawString的时候,你要传入一个layoutRectangle(布局框),DrawString才能知道换行的边界等等。 可能你要先调用Graphics.MeasureString来得到布局框的高度。
ddh619174120 2016-06-15
  • 打赏
  • 举报
回复
额,layoutRectangle是啥?怎么传?
Forty2 2016-06-15
  • 打赏
  • 举报
回复
引用 1 楼 Forty2 的回复:
e.Graphics.DrawString的时候,你要传入一个layoutRectangle(布局框),DrawString才能知道换行的边界等等。 可能你要先调用Graphics.MeasureString来得到布局框的高度。
要传入一个layoutRectangle(布局框)
ddh619174120 2016-06-15
  • 打赏
  • 举报
回复
我先调用了Graphics.MeasureString,但是没有效果,就像是我不管怎么修改高度宽度,这些边距都没有效果,还是一个模样,文字还是超出了右边的边缘,不会到指定距离就换行

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧