/// <summary> /// Get the range of pdf in the viewport. /// </summary> /// <param name="firstIndex">The first pdf index in the viewport.</param> /// <param name="lastIndex">The last pdf index in the viewport.</param> void GetVisibleRange(out int firstIndex, out int lastIndex) { var currentPosition = Math.Floor(svPdfContainer.VerticalOffset); var lastPosition = Math.Floor(svPdfContainer.VerticalOffset + svPdfContainer.ViewportHeight); var pdfRanges = PdfPages.Select(page => new { start = page.Bound.VerticalOffset, end = page.Bound.VerticalOffset + page.Bound.Height * ZoomRate, index = page.Index }); try { firstIndex = pdfRanges.Where(para => currentPosition >= para.start && currentPosition <= para.end).FirstOrDefault().index; lastIndex = pdfRanges.Where(para => lastPosition >= para.start && lastPosition <= para.end).FirstOrDefault().index; } catch (Exception) // when last page position is in viewport { firstIndex = pdfRanges.Where(para => currentPosition >= para.start && currentPosition <= para.end).FirstOrDefault().index; lastIndex = pdfRanges.LastOrDefault().index; } }