type TSToc = class uses TSPdfEnumerations; public function Create(ppr: PPrUnitDecorator; rect: array of real; page: TSPage; x: real; y: real; font: PdfFont); function LinkAnnot(dst: PdfDestination); function AddPageNumber(page: TSPage); private ppr_: PPrUnitDecorator; rect_: array of real; font_: PdfFont; [weakref]tspage_: TSPage; x_; y_; end; function TSToc.Create(ppr: PPrUnitDecorator; rect: array of real; page: TSPage; x: real; y: real; font: PdfFont); begin ppr_ := ppr; rect_ := rect; tspage_ := page; x_ := x; y_ := y; font_ := font; end; function TSToc.LinkAnnot(dst: PdfDestination); begin annot := tspage_.PdfPage.CreateLinkAnnot(rect_, dst); annot.LinkAnnotSetHighlightMode(TSPdfEnumerations.ANNOT_NO_HIGHTLIGHT); annot.LinkAnnotSetBorderStyle(0, 0, 0); end; function TSToc.AddPageNumber(page: TSPage); begin number := tostring(page.Number); tspage_.PdfPage.SetFontAndSize(font_, ppr_.RPr.Sz.Val); number_sz := tspage_.PdfPage.TextWidth(number); x := rect_[2] - number_sz; tspage_.PdfPage.BeginText(); tspage_.PdfPage.TextOut(x, y_, number); tspage_.PdfPage.EndText(); tspage_.PdfPage.SetRGBStroke(0, 0, 0); tspage_.PdfPage.SetDash(array(0.5, 2), 2, 0); tspage_.PdfPage.SetLineWidth(0.5); tspage_.PdfPage.SetLineCap(TSPdfEnumerations.ROUND_END); tspage_.PdfPage.MoveTo(x_+1, y_); tspage_.PdfPage.LineTo(x-0.5, y_); tspage_.PdfPage.Stroke(); end;