private void OnPrintPage(object sender, PrintPageEventArgs e)
{
Graphics graphics = e.Graphics;
SmoothingMode enumSmooth = graphics.SmoothingMode;
TextRenderingHint enumHint = graphics.TextRenderingHint;
CompositingQuality enumQuality = graphics.CompositingQuality;
graphics.SmoothingMode = SmoothingMode.HighQuality;
graphics.TextRenderingHint = TextRenderingHint.AntiAlias;
graphics.CompositingQuality = CompositingQuality.HighQuality;
_diagram.Layout(graphics);
Size bbSize = _diagram.BoundingBox.Size + _diagram.Padding + _diagram.Padding;
Size totalSize = new Size((int)(bbSize.Width * _diagram.Scale), (int)(bbSize.Height * _diagram.Scale));
int columnNumber = 1 + totalSize.Width / e.MarginBounds.Width;
int rowNumber = 1 + totalSize.Height / e.MarginBounds.Height;
int pageNumber = columnNumber * rowNumber;
int row, column = Math.DivRem(_currentPage, rowNumber, out row);
Rectangle clipping = new Rectangle(new Point(column * e.MarginBounds.Width, row * e.MarginBounds.Height),
new Size((column + 1) * e.MarginBounds.Width, (row + 1) * e.MarginBounds.Height));
graphics.Clip = new Region(e.MarginBounds);
//Point virtualPoint = this.panelDiagram.VirtualPoint;
graphics.TranslateTransform(-(float)(clipping.Left - e.MarginBounds.Left),
-(float)(clipping.Top - e.MarginBounds.Top));
DiagramGdiRenderer.Draw(_diagram, graphics, clipping);
if (_currentPage < pageNumber - 1)
{
_currentPage++;
e.HasMorePages = true;
}
graphics.SmoothingMode = enumSmooth;
graphics.TextRenderingHint = enumHint;
graphics.CompositingQuality = enumQuality;
}