/// <summary> 节整页绘制前事件 </summary> private void DoPaintPaperBefor(object sender, int aPageIndex, RECT aRect, HCCanvas aCanvas, SectionPaintInfo aPaintInfo) { if ((!aPaintInfo.Print) && (sender as HCSection).ReadOnly) { aCanvas.Font.BeginUpdate(); try { aCanvas.Font.Size = 48; aCanvas.Font.Color = Color.Gray; aCanvas.Font.Family = "隶书"; } finally { aCanvas.Font.EndUpdate(); } aCanvas.TextOut(aRect.Left + 10, aRect.Top + 10, "只读"); } }
public void SaveToImage(string path, string prefix, string imageType, bool onePaper = true) { HCCanvas vBmpCanvas = new HCCanvas(); SectionPaintInfo vPaintInfo = new SectionPaintInfo(); try { vPaintInfo.ScaleX = 1; vPaintInfo.ScaleY = 1; vPaintInfo.Zoom = 1; vPaintInfo.Print = true; vPaintInfo.DPI = HCUnitConversion.PixelsPerInchX; vPaintInfo.ViewModel = HCViewModel.hvmFilm; int vWidth = 0, vHeight = 0; if (onePaper) { for (int i = 0; i < FSections.Count; i++) { vHeight = vHeight + FSections[i].PaperHeightPix * FSections[i].PageCount; if (vWidth < FSections[i].PaperWidthPix) { vWidth = FSections[i].PaperWidthPix; } } vPaintInfo.WindowWidth = vWidth; vPaintInfo.WindowHeight = vHeight; using (Bitmap vBmp = new Bitmap(vWidth, vHeight)) { vBmpCanvas.Graphics = Graphics.FromImage(vBmp); int vSectionIndex = 0, vSectionPageIndex = 0, vTop = 0; for (int i = 0; i < this.PageCount; i++) { vSectionIndex = GetSectionPageIndexByPageIndex(i, ref vSectionPageIndex); //vWidth = FSections[vSectionIndex].PaperWidthPix; vHeight = FSections[vSectionIndex].PaperHeightPix; vBmpCanvas.Brush.Color = Color.White; vBmpCanvas.FillRect(new RECT(0, vTop, vWidth, vTop + vHeight)); ScaleInfo vScaleInfo = vPaintInfo.ScaleCanvas(vBmpCanvas); try { FSections[vSectionIndex].PaintPaper(vSectionPageIndex, 0, vTop, vBmpCanvas, vPaintInfo); vTop = vTop + vHeight; } finally { vPaintInfo.RestoreCanvasScale(vBmpCanvas, vScaleInfo); } } vBmpCanvas.Dispose(); if (imageType == "BMP") { vBmp.Save(path + prefix + ".bmp", System.Drawing.Imaging.ImageFormat.Bmp); } else if (imageType == "JPG") { vBmp.Save(path + prefix + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg); } else { vBmp.Save(path + prefix + ".png", System.Drawing.Imaging.ImageFormat.Png); } } } else { int vSectionIndex = 0, vSectionPageIndex = 0; for (int i = 0; i < this.PageCount; i++) { vSectionIndex = GetSectionPageIndexByPageIndex(i, ref vSectionPageIndex); using (Bitmap vBmp = new Bitmap(FSections[vSectionIndex].PaperWidthPix, FSections[vSectionIndex].PaperHeightPix)) { vBmpCanvas.Graphics = Graphics.FromImage(vBmp); vBmpCanvas.Brush.Color = Color.White; vBmpCanvas.FillRect(new RECT(0, 0, vBmp.Width, vBmp.Height)); vPaintInfo.WindowWidth = vBmp.Width; vPaintInfo.WindowHeight = vBmp.Height; ScaleInfo vScaleInfo = vPaintInfo.ScaleCanvas(vBmpCanvas); try { vBmpCanvas.Brush.Color = Color.White; vBmpCanvas.FillRect(new RECT(0, 0, vBmp.Width, vBmp.Height)); FSections[vSectionIndex].PaintPaper(vSectionPageIndex, 0, 0, vBmpCanvas, vPaintInfo); } finally { vPaintInfo.RestoreCanvasScale(vBmpCanvas, vScaleInfo); } vBmpCanvas.Dispose(); if (imageType == "BMP") { vBmp.Save(path + prefix + (i + 1).ToString() + ".bmp", System.Drawing.Imaging.ImageFormat.Bmp); } else if (imageType == "JPG") { vBmp.Save(path + prefix + (i + 1).ToString() + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg); } else { vBmp.Save(path + prefix + (i + 1).ToString() + ".png", System.Drawing.Imaging.ImageFormat.Png); } } } } } finally { vPaintInfo.Dispose(); } }
protected void DoSectionPaintFooterAfter(object sender, int pageIndex, RECT rect, HCCanvas canvas, SectionPaintInfo paintInfo) { HCSection vSection = sender as HCSection; if (vSection.PageNoVisible) { int vSectionIndex = FSections.IndexOf(vSection); int vSectionStartPageIndex = 0; int vAllPageCount = 0; for (int i = 0; i <= FSections.Count - 1; i++) { if (i == vSectionIndex) { vSectionStartPageIndex = vAllPageCount; } vAllPageCount = vAllPageCount + FSections[i].PageCount; } string vS = string.Format(vSection.PageNoFormat, vSectionStartPageIndex + vSection.PageNoFrom + pageIndex, vAllPageCount); canvas.Brush.Style = HCBrushStyle.bsClear; canvas.Font.BeginUpdate(); try { canvas.Font.Size = 10; canvas.Font.Family = "宋体"; } finally { canvas.Font.EndUpdate(); } canvas.TextOut(rect.Left + (rect.Width - canvas.TextWidth(vS)) / 2, rect.Top + vSection.Footer.Height, vS); } }