惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

月光博客
月光博客
人人都是产品经理
人人都是产品经理
博客园 - 聂微东
WordPress大学
WordPress大学
S
SegmentFault 最新的问题
博客园 - Franky
V
V2EX
Y
Y Combinator Blog
Google DeepMind News
Google DeepMind News
J
Java Code Geeks
T
The Blog of Author Tim Ferriss
罗磊的独立博客
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Jina AI
Jina AI
博客园 - 叶小钗
F
Fortinet All Blogs
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
A
About on SuperTechFans
M
MIT News - Artificial intelligence
云风的 BLOG
云风的 BLOG
Last Week in AI
Last Week in AI
D
Docker
博客园 - 【当耐特】
阮一峰的网络日志
阮一峰的网络日志

博客园 - 左佩玉

通过了 70-316 考试 .NET SDK 工具 线程 进程 程序配置 程序集 全局化和本地化 实现帮助 可访问性设计 访问和调用外部组件 自定义控件 使用 GDI+ 在ADO.net 中使用xml 绑定、查看和筛选数据 ADO.net 处理和抛出异常 使用Debug和Trace 测试和调试 继承 System.Collections.CollectionBase 创建一个强类型集合类
实现打印
左佩玉 · 2005-08-25 · via 博客园 - 左佩玉

PrintDocument myPrintDocument = new PrintDocument();
Print方法初始化,引发一个或多个PrintPage事件

PrintPage事件参数:PrintPageEventArgs对象
Cancel 取消打印作业
Graphics 打印内容
HasMorePages 是否打印附加页面
MarginBounds 页边空白部分范围
PageBounds 总页面区域
PageSettings 当前页面设置

多页面处理
bool FirstPagePrinted = false;
public void PrintBigEllipse(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
  if (FirstPagePrinted == false)
  {
    FirstPagePrinted = true;
    e.HasMorePages = true;
    e.Graphics.Draw....
  }
  else
  {
    e.HasMorePages = false;
    FirstPagePrinted = false;
    e.Graphics.Draw....
  }
}

打印多行
int ArrayCounter = 0;
Private void PrintStrings(object sender, PrintPageEventArgs e)
{
  float LeftMargin = e.MarginBounds.Left;
  float TopMargin = e.MarginBounds.Top;
  float MyLines = 0;
  float YPosition = 0;
  int Counter = 0;
  string CurrentLine;

  //计算每页的行数
  MyLines = e.MarginBounds.Height / myFont.GetHeight(e.Graphics);
 
  //打印文件的每行,但在页面的末尾停止
  while (Counter < MyLines && ArrayCounter <= myStrings.GetUpperBound(0))
  {
    CurrentLine = myStrings[ArrayCounter];
    YPosition = TopMargin + Counter * myFont.GetHerght(e.Graphics);
    e.Graphics.DrawString(CurrentLine, myFont, Brushes.Black, LeftMargin,YPosition, new StringFormat());
    Counter++;
    ArrayCounter++;
  }

  //如果存在更多的行,打印另一页
  if (!(ArrayCounter == myStrings.GetUpperBound(0)))
    e.HasMorePages = true;
  else
    e.HasMorePages = false;
}

黑白和彩色打印
Brush BrushOne;
Brush BrushTwo;
if (PrintDocument1.PrinterSettings.SupportsColor == true)
{
  //彩色
  BrushOne = Brushes.Red;
  BrushTwo = Brushes.Blue;
}
else
{
  //黑白
  BrushOne = new HatchBrush(HatchStyle.DarkVertical, Color.Black);
  BrushTwo = new HatchBrush(HachStyle.DashedHorizontal, Color.Black);
}

实现预览 PrintPreviewControl
myPrintPreview.Document = myPrintDocument;
myPrintPreview.InvalidatePreview();

PrintPreviewDialog 预览对话框控件,使用方法Show  ShowDialog

配置打印
PrintDocument.PrinterSettings属性
默认 DefaultPageSettings

PrintDialog,设置PrintDocument对象的PrinterSettings属性
PrintDialog1.ShowDialog();

PageSetupDialog设置页面设置和打印机设置

运行时配置PageSetting
e.PageSettings.Landscape = true;