页定位自动增加书签

public class BookMarkHelper : PdfPageEventHelper
{
    private int currentPageNum;
    private List<int> pageNumList = new List<int>();
    private List<string> titleList = new List<string>();//中文标签也不用指定字体

    public void Add(string title)//需要在什么地方加标签就调用一下,title书签名
    {
        titleList.Add(title);
        pageNumList.Add(currentPageNum + 1);//页以0开始
    }
    public override void OnEndPage(PdfWriter writer, Document document)
    {
        currentPageNum = writer.PageNumber;
    }

    public void AddToPdf(PdfWriter writer)
    {        
        //书签树的根
        var root = writer.DirectContent.RootOutline;
        for (int i = 0; i < pageNumList.Count; i++)
        {
            var action = PdfAction.GotoLocalPage(pageNumList[i], new PdfDestination(PdfDestination.FIT), writer);
            var outLine = new PdfOutline(root, action, titleList[i]);
        }
    }
}
Uasage:var pdfWriter = PdfWriter.GetInstance(document, pdfMemoryStream);
            //pdfWriter.ViewerPreferences = PdfWriter.PageModeUseOutlines; //打开时显示书签
 var bookMarkHelper = new BookMarkHelper();
 pdfWriter.PageEvent = bookMarkHelper; 
 document.Open();
 document.Add(Paragraph).................

 bookMarkHelper.Add("书签一");

document.Add(Paragraph).................

 bookMarkHelper.Add("书签二");

document.Add(Paragraph).................

bookMarkHelper.AddToPdf(pdfWriter);//这时候才加入书签





你可能感兴趣的:(bookmark,iTextSharp,Outline)