public float[] DrawOn(Page page) { float xText = x; float yText = y + font.ascent; while (paragraphs.Count > 0) { // The paragraphs are reversed so we can efficiently remove the first one: TextLine textLine = paragraphs[paragraphs.Count - 1]; paragraphs.RemoveAt(paragraphs.Count - 1); textLine.SetLocation(xText, yText); beginParagraphPoints.Add(new float[] { xText, yText }); while (true) { textLine = DrawLineOnPage(textLine, page); if (textLine.GetText().Equals("")) { break; } yText = textLine.Advance(leading); if (yText + font.descent >= (y + h)) { // The paragraphs are reversed so we can efficiently add new first paragraph: paragraphs.Add(textLine); if (page != null && drawBorder) { Box box = new Box(); box.SetLocation(x, y); box.SetSize(w, h); box.DrawOn(page); } return(new float[] { x + w, y + h }); } } xText = x; yText += paragraphLeading; } if (page != null && drawBorder) { Box box = new Box(); box.SetLocation(x, y); box.SetSize(w, h); box.DrawOn(page); } return(new float[] { x + w, y + h }); }