AddPageMark() private method

private AddPageMark ( int newPage, PdfIndirectReference struc ) : void
newPage int
struc PdfIndirectReference
return void
Exemplo n.º 1
0
 public void CopyStructTreeForPage(PdfNumber sourceArrayNumber, int newArrayNumber)
 {
     if (!openedDocuments[fileName])
     {
         PdfObject res = writer.CopyObject(writer.CopyObject(structTreeRoot.Get(PdfName.K), true, true));
         if (!(res is PdfIndirectReference))
         {
             res = writer.AddToBody(res).IndirectReference;
         }
         structureTreeRoot.AddPageMark(newArrayNumber, (PdfIndirectReference)res);
         AddKid(structureTreeRoot, res);
         openedDocuments.Add(fileName, true);
     }
     if (CopyPageMarks(parentTree, sourceArrayNumber, newArrayNumber) == returnType.NOTFOUND)
     {
         throw new BadPdfFormatException(MessageLocalization.GetComposedMessage("structparent.not.found"));
     }
 }
        private returnType FindAndCopyMarks(PdfArray pages, int arrayNumber, int newArrayNumber)
        {
            if (pages.GetAsNumber(0).IntValue > arrayNumber)
            {
                return(returnType.BELOW);
            }
            if (pages.GetAsNumber(pages.Size - 2).IntValue < arrayNumber)
            {
                return(returnType.ABOVE);
            }
            int cur   = pages.Size / 4;
            int begin = 0;
            int curNumber;

            while (true)
            {
                curNumber = pages.GetAsNumber((begin + cur) * 2).IntValue;
                if (curNumber == arrayNumber)
                {
                    PdfObject res = writer.CopyObject(pages[((begin + cur) * 2 + 1)], true, false);
                    if (!(res is PdfIndirectReference))
                    {
                        res = writer.AddToBody(res).IndirectReference;
                    }
                    structureTreeRoot.AddPageMark(newArrayNumber, (PdfIndirectReference)res);
                    AddKid(structureTreeRoot, res);
                    return(returnType.FOUND);
                }
                if (curNumber < arrayNumber)
                {
                    begin += cur;
                    cur   /= 2;
                    if (cur == 0)
                    {
                        cur = 1;
                    }
                    if (cur + begin == pages.Size)
                    {
                        return(returnType.NOTFOUND);
                    }
                    continue;
                }
                if (cur + begin == 0)
                {
                    return(returnType.BELOW);
                }
                if (cur == 0)
                {
                    return(returnType.NOTFOUND);
                }
                cur /= 2;
            }
        }