SetText() public method

public SetText ( Phrase phrase ) : void
phrase Phrase
return void
Exemplo n.º 1
0
 /**
 * Adds an iText element to the cell.
 * @param element
 */
 public void AddElement(IElement element) {
     if (table != null) {
         table = null;
         column.SetText(null);
     }
     column.AddElement(element);
 }
Exemplo n.º 2
0
 // ===========================================================================
 public override void Write(Stream stream)
 {
     // step 1
     using (Document document = new Document())
     {
         // step 2
         PdfWriter writer = PdfWriter.GetInstance(document, stream);
         // step 3
         document.Open();
         // step 4
         PdfContentByte canvas = writer.DirectContent;
         DrawRectangles(canvas);
         ColumnText ct = new ColumnText(canvas);
         ct.Alignment = Element.ALIGN_JUSTIFIED;
         ct.Leading = 14;
         int column = 0;
         ct.SetColumns(
           new float[] { 36, 806, 36, 670, 108, 670, 108, 596, 36, 596, 36, 36 },
           new float[] { 296, 806, 296, 484, 259, 484, 259, 410, 296, 410, 296, 36 }
         );
         ct.SetColumns(LEFT[column], RIGHT[column]);
         // ct.SetColumns(LEFT[column], RIGHT[column]);
         // iText-ONLY, 'Initial value of the status' => 0
         // iTextSharp **DOES NOT** include this member variable
         // int status = ColumnText.START_COLUMN;
         int status = 0;
         Phrase p;
         float y;
         IEnumerable<Movie> movies = PojoFactory.GetMovies();
         foreach (Movie movie in movies)
         {
             y = ct.YLine;
             p = CreateMovieInformation(movie);
             ct.AddText(p);
             status = ct.Go(true);
             if (ColumnText.HasMoreText(status))
             {
                 column = Math.Abs(column - 1);
                 if (column == 0)
                 {
                     document.NewPage();
                     DrawRectangles(canvas);
                 }
                 ct.SetColumns(LEFT[column], RIGHT[column]);
                 y = 806;
             }
             ct.YLine = y;
             ct.SetText(p);
             status = ct.Go();
         }
     }
 }
Exemplo n.º 3
0
 // ---------------------------------------------------------------------------
 public void Write(Stream stream)
 {
     // step 1
     using (Document document = new Document(PageSize.A4.Rotate()))
     {
         // step 2
         PdfWriter writer = PdfWriter.GetInstance(document, stream);
         // step 3
         document.Open();
         // step 4
         ColumnText ct = new ColumnText(writer.DirectContent);
         int column = 0;
         ct.SetSimpleColumn(
           COLUMNS[column, 0], COLUMNS[column, 1],
           COLUMNS[column, 2], COLUMNS[column, 3]
         );
         // iText-ONLY, 'Initial value of the status' => 0
         // iTextSharp **DOES NOT** include this member variable
         // int status = ColumnText.START_COLUMN;
         int status = 0;
         float y;
         Image img;
         IEnumerable<Movie> movies = PojoFactory.GetMovies();
         foreach (Movie movie in movies)
         {
             y = ct.YLine;
             img = Image.GetInstance(
               Path.Combine(RESOURCE, movie.Imdb + ".jpg")
             );
             img.ScaleToFit(80, 1000);
             AddContent(ct, movie, img);
             status = ct.Go(true);
             if (ColumnText.HasMoreText(status))
             {
                 column = (column + 1) % 4;
                 if (column == 0)
                 {
                     document.NewPage();
                 }
                 ct.SetSimpleColumn(
                   COLUMNS[column, 0], COLUMNS[column, 1],
                   COLUMNS[column, 2], COLUMNS[column, 3]
                 );
                 y = COLUMNS[column, 3];
             }
             ct.YLine = y;
             ct.SetText(null);
             AddContent(ct, movie, img);
             status = ct.Go();
         }
     }
 }
Exemplo n.º 4
0
 /**
  * Adds an iText element to the cell.
  * @param element
  */
 public void AddElement(IElement element)
 {
     if (table != null)
     {
         table = null;
         column.SetText(null);
     }
     if (element is PdfPTable)
     {
         ((PdfPTable)element).SplitLate = false;
     }
     column.AddElement(element);
 }
Exemplo n.º 5
0
 // ===========================================================================
 public override void Write(Stream stream)
 {
     // step 1
     using (Document document = new Document())
     {
         // step 2
         PdfWriter writer = PdfWriter.GetInstance(document, stream);
         // step 3
         document.Open();
         // step 4
         ColumnText ct = new ColumnText(writer.DirectContent);
         int column = 0;
         ct.SetSimpleColumn(
           COLUMNS[column][0], COLUMNS[column][1],
           COLUMNS[column][2], COLUMNS[column][3]
         );
         // iText-ONLY, 'Initial value of the status' => 0
         // iTextSharp **DOES NOT** include this member variable
         // int status = ColumnText.START_COLUMN;
         int status = 0;
         Phrase p;
         float y;
         IEnumerable<Movie> movies = PojoFactory.GetMovies();
         foreach (Movie movie in movies)
         {
             y = ct.YLine;
             p = CreateMovieInformation(movie);
             ct.AddText(p);
             status = ct.Go(true);
             if (ColumnText.HasMoreText(status))
             {
                 column = Math.Abs(column - 1);
                 if (column == 0)
                 {
                     document.NewPage();
                 }
                 ct.SetSimpleColumn(
                   COLUMNS[column][0], COLUMNS[column][1],
                   COLUMNS[column][2], COLUMNS[column][3]
                 );
                 y = COLUMNS[column][3];
             }
             ct.YLine = y;
             ct.SetText(p);
             status = ct.Go(false);
         }
     }
 }
Exemplo n.º 6
0
 /**
  * Adds an iText element to the cell.
  * @param element
  */
 virtual public void AddElement(IElement element)
 {
     if (table != null)
     {
         table = null;
         column.SetText(null);
     }
     if (element is PdfPTable)
     {
         ((PdfPTable)element).SplitLate = false;
     }
     else if (element is PdfDiv)
     {
         foreach (IElement divChildElement in ((PdfDiv)element).Content)
         {
             if (divChildElement is PdfPTable)
             {
                 ((PdfPTable)divChildElement).SplitLate = false;
             }
         }
     }
     column.AddElement(element);
 }
Exemplo n.º 7
0
        /**
         * Get the <code>PdfAppearance</code> of a text or combo field
         * @throws IOException on error
         * @throws DocumentException on error
         * @return A <code>PdfAppearance</code>
         */
        public PdfAppearance GetAppearance()
        {
            PdfAppearance app = GetBorderAppearance();

            app.BeginVariableText();
            if (text == null || text.Length == 0)
            {
                app.EndVariableText();
                return(app);
            }
            bool  borderExtra = borderStyle == PdfBorderDictionary.STYLE_BEVELED || borderStyle == PdfBorderDictionary.STYLE_INSET;
            float h           = box.Height - borderWidth * 2 - extraMarginTop;
            float bw2         = borderWidth;

            if (borderExtra)
            {
                h   -= borderWidth * 2;
                bw2 *= 2;
            }
            float offsetX = Math.Max(bw2, 1);
            float offX    = Math.Min(bw2, offsetX);

            app.SaveState();
            app.Rectangle(offX, offX, box.Width - 2 * offX, box.Height - 2 * offX);
            app.Clip();
            app.NewPath();
            String ptext;

            if ((options & PASSWORD) != 0)
            {
                ptext = ObfuscatePassword(text);
            }
            else if ((options & MULTILINE) == 0)
            {
                ptext = RemoveCRLF(text);
            }
            else
            {
                ptext = text; //fixed by Kazuya Ujihara (ujihara.jp)
            }
            BaseFont  ufont  = RealFont;
            BaseColor fcolor = (textColor == null) ? GrayColor.GRAYBLACK : textColor;
            int       rtl    = CheckRTL(ptext) ? PdfWriter.RUN_DIRECTION_LTR : PdfWriter.RUN_DIRECTION_NO_BIDI;
            float     usize  = fontSize;
            Phrase    phrase = ComposePhrase(ptext, ufont, fcolor, usize);

            if ((options & MULTILINE) != 0)
            {
                float      width  = box.Width - 4 * offsetX - extraMarginLeft;
                float      factor = ufont.GetFontDescriptor(BaseFont.BBOXURY, 1) - ufont.GetFontDescriptor(BaseFont.BBOXLLY, 1);
                ColumnText ct     = new ColumnText(null);
                if (usize == 0)
                {
                    usize = h / factor;
                    if (usize > 4)
                    {
                        if (usize > 12)
                        {
                            usize = 12;
                        }
                        float step = Math.Max((usize - 4) / 10, 0.2f);
                        ct.SetSimpleColumn(0, -h, width, 0);
                        ct.Alignment    = alignment;
                        ct.RunDirection = rtl;
                        for (; usize > 4; usize -= step)
                        {
                            ct.YLine = 0;
                            ChangeFontSize(phrase, usize);
                            ct.SetText(phrase);
                            ct.Leading = factor * usize;
                            int status = ct.Go(true);
                            if ((status & ColumnText.NO_MORE_COLUMN) == 0)
                            {
                                break;
                            }
                        }
                    }
                    if (usize < 4)
                    {
                        usize = 4;
                    }
                }
                ChangeFontSize(phrase, usize);
                ct.Canvas = app;
                float leading = usize * factor;
                float offsetY = offsetX + h - ufont.GetFontDescriptor(BaseFont.BBOXURY, usize);
                ct.SetSimpleColumn(extraMarginLeft + 2 * offsetX, -20000, box.Width - 2 * offsetX, offsetY + leading);
                ct.Leading      = leading;
                ct.Alignment    = alignment;
                ct.RunDirection = rtl;
                ct.SetText(phrase);
                ct.Go();
            }
            else
            {
                if (usize == 0)
                {
                    float maxCalculatedSize = h / (ufont.GetFontDescriptor(BaseFont.BBOXURX, 1) - ufont.GetFontDescriptor(BaseFont.BBOXLLY, 1));
                    ChangeFontSize(phrase, 1);
                    float wd = ColumnText.GetWidth(phrase, rtl, 0);
                    if (wd == 0)
                    {
                        usize = maxCalculatedSize;
                    }
                    else
                    {
                        usize = Math.Min(maxCalculatedSize, (box.Width - extraMarginLeft - 4 * offsetX) / wd);
                    }
                    if (usize < 4)
                    {
                        usize = 4;
                    }
                }
                ChangeFontSize(phrase, usize);
                float offsetY = offX + ((box.Height - 2 * offX) - ufont.GetFontDescriptor(BaseFont.ASCENT, usize)) / 2;
                if (offsetY < offX)
                {
                    offsetY = offX;
                }
                if (offsetY - offX < -ufont.GetFontDescriptor(BaseFont.DESCENT, usize))
                {
                    float ny = -ufont.GetFontDescriptor(BaseFont.DESCENT, usize) + offX;
                    float dy = box.Height - offX - ufont.GetFontDescriptor(BaseFont.ASCENT, usize);
                    offsetY = Math.Min(ny, Math.Max(offsetY, dy));
                }
                if ((options & COMB) != 0 && maxCharacterLength > 0)
                {
                    int textLen  = Math.Min(maxCharacterLength, ptext.Length);
                    int position = 0;
                    if (alignment == Element.ALIGN_RIGHT)
                    {
                        position = maxCharacterLength - textLen;
                    }
                    else if (alignment == Element.ALIGN_CENTER)
                    {
                        position = (maxCharacterLength - textLen) / 2;
                    }
                    float step  = (box.Width - extraMarginLeft) / maxCharacterLength;
                    float start = step / 2 + position * step;
                    if (textColor == null)
                    {
                        app.SetGrayFill(0);
                    }
                    else
                    {
                        app.SetColorFill(textColor);
                    }
                    app.BeginText();
                    foreach (Chunk ck in phrase)
                    {
                        BaseFont bf = ck.Font.BaseFont;
                        app.SetFontAndSize(bf, usize);
                        StringBuilder sb = ck.Append("");
                        for (int j = 0; j < sb.Length; ++j)
                        {
                            String c  = sb.ToString(j, 1);
                            float  wd = bf.GetWidthPoint(c, usize);
                            app.SetTextMatrix(extraMarginLeft + start - wd / 2, offsetY - extraMarginTop);
                            app.ShowText(c);
                            start += step;
                        }
                    }
                    app.EndText();
                }
                else
                {
                    float x;
                    switch (alignment)
                    {
                    case Element.ALIGN_RIGHT:
                        x = extraMarginLeft + box.Width - (2 * offsetX);
                        break;

                    case Element.ALIGN_CENTER:
                        x = extraMarginLeft + (box.Width / 2);
                        break;

                    default:
                        x = extraMarginLeft + (2 * offsetX);
                        break;
                    }
                    ColumnText.ShowTextAligned(app, alignment, phrase, x, offsetY - extraMarginTop, 0, rtl, 0);
                }
            }
            app.RestoreState();
            app.EndVariableText();
            return(app);
        }
Exemplo n.º 8
0
        private int FloatingLayout(List <IElement> floatingElements, bool simulate)
        {
            int   status     = ColumnText.NO_MORE_TEXT;
            float minYLine   = yLine;
            float leftWidth  = 0;
            float rightWidth = 0;

            ColumnText currentCompositeColumn = compositeColumn;

            if (simulate)
            {
                currentCompositeColumn = ColumnText.Duplicate(compositeColumn);
            }

            while (floatingElements.Count > 0)
            {
                IElement nextElement = floatingElements[0];
                floatingElements.RemoveAt(0);
                if (nextElement is PdfDiv)
                {
                    PdfDiv floatingElement = (PdfDiv)nextElement;
                    status = floatingElement.Layout(compositeColumn.Canvas, useAscender, true, floatLeftX, minY, floatRightX, yLine);
                    if ((status & ColumnText.NO_MORE_TEXT) == 0)
                    {
                        yLine       = minYLine;
                        floatLeftX  = leftX;
                        floatRightX = rightX;
                        status      = floatingElement.Layout(compositeColumn.Canvas, useAscender, true, floatLeftX, minY, floatRightX, yLine);
                        if ((status & ColumnText.NO_MORE_TEXT) == 0)
                        {
                            floatingElements.Insert(0, floatingElement);
                            break;
                        }
                    }
                    if (floatingElement.Float == PdfDiv.FloatType.LEFT)
                    {
                        status      = floatingElement.Layout(compositeColumn.Canvas, useAscender, simulate, floatLeftX, minY, floatRightX, yLine);
                        floatLeftX += floatingElement.getActualWidth();
                        leftWidth  += floatingElement.getActualWidth();
                    }
                    else if (floatingElement.Float == PdfDiv.FloatType.RIGHT)
                    {
                        status       = floatingElement.Layout(compositeColumn.Canvas, useAscender, simulate, floatRightX - floatingElement.getActualWidth() - 0.01f, minY, floatRightX, yLine);
                        floatRightX -= floatingElement.getActualWidth();
                        rightWidth  += floatingElement.getActualWidth();
                    }
                    minYLine = Math.Min(minYLine, yLine - floatingElement.getActualHeight());
                }
                else
                {
                    if (nextElement is ISpaceable)
                    {
                        yLine -= ((ISpaceable)nextElement).SpacingBefore;
                    }
                    if (simulate)
                    {
                        if (nextElement is PdfPTable)
                        {
                            currentCompositeColumn.AddElement(new PdfPTable((PdfPTable)nextElement));
                        }
                        else
                        {
                            currentCompositeColumn.AddElement(nextElement);
                        }
                    }
                    else
                    {
                        currentCompositeColumn.AddElement(nextElement);
                    }
                    if (yLine > minYLine)
                    {
                        currentCompositeColumn.SetSimpleColumn(floatLeftX, yLine, floatRightX, minYLine);
                    }
                    else
                    {
                        currentCompositeColumn.SetSimpleColumn(floatLeftX, yLine, floatRightX, minY);
                    }

                    currentCompositeColumn.FilledWidth = 0;

                    status = currentCompositeColumn.Go(simulate);
                    if (yLine > minYLine && (floatLeftX > leftX || floatRightX < rightX) && (status & ColumnText.NO_MORE_TEXT) == 0)
                    {
                        yLine       = minYLine;
                        floatLeftX  = leftX;
                        floatRightX = rightX;
                        if (leftWidth != 0 && rightWidth != 0)
                        {
                            filledWidth = rightX - leftX;
                        }
                        else
                        {
                            if (leftWidth > filledWidth)
                            {
                                filledWidth = leftWidth;
                            }
                            if (rightWidth > filledWidth)
                            {
                                filledWidth = rightWidth;
                            }
                        }

                        leftWidth  = 0;
                        rightWidth = 0;
                        if (simulate && nextElement is PdfPTable)
                        {
                            currentCompositeColumn.AddElement(new PdfPTable((PdfPTable)nextElement));
                        }

                        currentCompositeColumn.SetSimpleColumn(floatLeftX, yLine, floatRightX, minY);
                        status   = currentCompositeColumn.Go(simulate);
                        minYLine = currentCompositeColumn.YLine + currentCompositeColumn.Descender;
                        yLine    = minYLine;
                        if (compositeColumn.FilledWidth > filledWidth)
                        {
                            filledWidth = compositeColumn.FilledWidth;
                        }
                    }
                    else
                    {
                        if (rightWidth > 0)
                        {
                            rightWidth += currentCompositeColumn.FilledWidth;
                        }
                        else if (leftWidth > 0)
                        {
                            leftWidth += currentCompositeColumn.FilledWidth;
                        }
                        else if (currentCompositeColumn.FilledWidth > filledWidth)
                        {
                            filledWidth = currentCompositeColumn.FilledWidth;
                        }
                        minYLine = Math.Min(currentCompositeColumn.YLine + currentCompositeColumn.Descender, minYLine);
                        yLine    = currentCompositeColumn.YLine + currentCompositeColumn.Descender;
                    }

                    if ((status & ColumnText.NO_MORE_TEXT) == 0)
                    {
                        if (!simulate)
                        {
                            floatingElements.InsertRange(0, currentCompositeColumn.CompositeElements);
                            currentCompositeColumn.CompositeElements.Clear();
                        }
                        else
                        {
                            floatingElements.Insert(0, nextElement);
                            currentCompositeColumn.SetText(null);
                        }
                        break;
                    }
                    else
                    {
                        currentCompositeColumn.SetText(null);
                    }
                }
            }


            if (leftWidth != 0 && rightWidth != 0)
            {
                filledWidth = rightX - leftX;
            }
            else
            {
                if (leftWidth > filledWidth)
                {
                    filledWidth = leftWidth;
                }
                if (rightWidth > filledWidth)
                {
                    filledWidth = rightWidth;
                }
            }

            yLine       = minYLine;
            floatLeftX  = leftX;
            floatRightX = rightX;

            return(status);
        }
Exemplo n.º 9
0
 /**
 * Get the <code>PdfAppearance</code> of a text or combo field
 * @throws IOException on error
 * @throws DocumentException on error
 * @return A <code>PdfAppearance</code>
 */
 public PdfAppearance GetAppearance() {
     PdfAppearance app = GetBorderAppearance();
     app.BeginVariableText();
     if (text == null || text.Length == 0) {
         app.EndVariableText();
         return app;
     }
     bool borderExtra = borderStyle == PdfBorderDictionary.STYLE_BEVELED || borderStyle == PdfBorderDictionary.STYLE_INSET;
     float h = box.Height - borderWidth * 2 - extraMarginTop;
     float bw2 = borderWidth;
     if (borderExtra) {
         h -= borderWidth * 2;
         bw2 *= 2;
     }
     float offsetX = Math.Max(bw2, 1);
     float offX = Math.Min(bw2, offsetX);
     app.SaveState();
     app.Rectangle(offX, offX, box.Width - 2 * offX, box.Height - 2 * offX);
     app.Clip();
     app.NewPath();
     String ptext;
     if ((options & PASSWORD) != 0)
         ptext = ObfuscatePassword(text);
     else if ((options & MULTILINE) == 0)
         ptext = RemoveCRLF(text);
     else
         ptext = text; //fixed by Kazuya Ujihara (ujihara.jp)
     BaseFont ufont = RealFont;
     BaseColor fcolor = (textColor == null) ? GrayColor.GRAYBLACK : textColor;
     int rtl = CheckRTL(ptext) ? PdfWriter.RUN_DIRECTION_LTR : PdfWriter.RUN_DIRECTION_NO_BIDI;
     float usize = fontSize;
     Phrase phrase = ComposePhrase(ptext, ufont, fcolor, usize);
     if ((options & MULTILINE) != 0) {
         float width = box.Width - 4 * offsetX - extraMarginLeft;
         float factor = ufont.GetFontDescriptor(BaseFont.BBOXURY, 1) - ufont.GetFontDescriptor(BaseFont.BBOXLLY, 1);
         ColumnText ct = new ColumnText(null);
         if (usize == 0) {
             usize = h / factor;
             if (usize > 4) {
                 if (usize > 12)
                     usize = 12;
                 float step = Math.Max((usize - 4) / 10, 0.2f);
                 ct.SetSimpleColumn(0, -h, width, 0);
                 ct.Alignment = alignment;
                 ct.RunDirection = rtl;
                 for (; usize > 4; usize -= step) {
                     ct.YLine = 0;
                     ChangeFontSize(phrase, usize);
                     ct.SetText(phrase);
                     ct.Leading = factor * usize;
                     int status = ct.Go(true);
                     if ((status & ColumnText.NO_MORE_COLUMN) == 0)
                         break;
                 }
             }
             if (usize < 4) {
                 usize = 4;
             }
         }
         ChangeFontSize(phrase, usize);
         ct.Canvas = app;
         float leading = usize * factor;
         float offsetY = offsetX + h - ufont.GetFontDescriptor(BaseFont.BBOXURY, usize);
         ct.SetSimpleColumn(extraMarginLeft + 2 * offsetX, -20000, box.Width - 2 * offsetX, offsetY + leading);
         ct.Leading = leading;
         ct.Alignment = alignment;
         ct.RunDirection = rtl;
         ct.SetText(phrase);
         ct.Go();
     }
     else {
         if (usize == 0) {
             float maxCalculatedSize = h / (ufont.GetFontDescriptor(BaseFont.BBOXURX, 1) - ufont.GetFontDescriptor(BaseFont.BBOXLLY, 1));
             ChangeFontSize(phrase, 1);
             float wd = ColumnText.GetWidth(phrase, rtl, 0);
             if (wd == 0)
                 usize = maxCalculatedSize;
             else
                 usize = Math.Min(maxCalculatedSize, (box.Width - extraMarginLeft - 4 * offsetX) / wd);
             if (usize < 4)
                 usize = 4;
         }
         ChangeFontSize(phrase, usize);
         float offsetY = offX + ((box.Height - 2*offX) - ufont.GetFontDescriptor(BaseFont.ASCENT, usize)) / 2;
         if (offsetY < offX)
             offsetY = offX;
         if (offsetY - offX < -ufont.GetFontDescriptor(BaseFont.DESCENT, usize)) {
             float ny = -ufont.GetFontDescriptor(BaseFont.DESCENT, usize) + offX;
             float dy = box.Height - offX - ufont.GetFontDescriptor(BaseFont.ASCENT, usize);
             offsetY = Math.Min(ny, Math.Max(offsetY, dy));
         }
         if ((options & COMB) != 0 && maxCharacterLength > 0) {
             int textLen = Math.Min(maxCharacterLength, ptext.Length);
             int position = 0;
             if (alignment == Element.ALIGN_RIGHT) {
                 position = maxCharacterLength - textLen;
             }
             else if (alignment == Element.ALIGN_CENTER) {
                 position = (maxCharacterLength - textLen) / 2;
             }
             float step = (box.Width - extraMarginLeft) / maxCharacterLength;
             float start = step / 2 + position * step;
             if (textColor == null)
                 app.SetGrayFill(0);
             else
                 app.SetColorFill(textColor);
             app.BeginText();
             foreach (Chunk ck in phrase) {
                 BaseFont bf = ck.Font.BaseFont;
                 app.SetFontAndSize(bf, usize);
                 StringBuilder sb = ck.Append("");
                 for (int j = 0; j < sb.Length; ++j) {
                     String c = sb.ToString(j, 1);
                     float wd = bf.GetWidthPoint(c, usize);
                     app.SetTextMatrix(extraMarginLeft + start - wd / 2, offsetY - extraMarginTop);
                     app.ShowText(c);
                     start += step;
                 }
             }
             app.EndText();
         }
         else {
             float x;
             switch (alignment) {
                 case Element.ALIGN_RIGHT:
                     x = extraMarginLeft + box.Width - (2 * offsetX);
                     break;
                 case Element.ALIGN_CENTER:
                     x = extraMarginLeft + (box.Width / 2);
                     break;
                 default:
                     x = extraMarginLeft + (2 * offsetX);
                     break;
             }
             ColumnText.ShowTextAligned(app, alignment, phrase, x, offsetY - extraMarginTop, 0, rtl, 0);
         }
     }
     app.RestoreState();
     app.EndVariableText();
     return app;
 }
Exemplo n.º 10
0
        private void DrawOverlayText(PdfContentByte canvas, IList<Rectangle> textRectangles, PdfString overlayText, 
                                     PdfString otDA, PdfNumber otQ, PdfBoolean otRepeat) {
            ColumnText ct = new ColumnText(canvas);
            ct.SetLeading(0, 1.2F);
            ct.UseAscender = true;

            String otStr = overlayText.ToUnicodeString();

            canvas.SaveState();
            IDictionary<string, IList<object>> parsedDA = ParseDAParam(otDA);

            Font font = null;

            if (parsedDA.ContainsKey(STROKE_COLOR)) {
                IList<object> strokeColorArgs = parsedDA[STROKE_COLOR];
                SetStrokeColor(canvas, strokeColorArgs);
            }

            if (parsedDA.ContainsKey(FILL_COLOR)) {
                IList<object> fillColorArgs = parsedDA[FILL_COLOR];
                SetFillColor(canvas, fillColorArgs);
            }

            if (parsedDA.ContainsKey("Tf")) {
                IList<object> tfArgs = parsedDA["Tf"];
                font = RetrieveFontFromAcroForm((PdfName) tfArgs[0], (PdfNumber) tfArgs[1]);
            }

            foreach (Rectangle textRect in textRectangles) {
                ct.SetSimpleColumn(textRect);

                if (otQ != null) {
                    ct.Alignment = otQ.IntValue;
                }

                Phrase otPhrase;

                if (font != null) {
                    otPhrase = new Phrase(otStr, font);
                } else {
                    otPhrase = new Phrase(otStr);
                }

                float y = ct.YLine;

                if (otRepeat != null && otRepeat.BooleanValue) {
                    int status = ct.Go(true);

                    while (!ColumnText.HasMoreText(status)) {
                        otPhrase.Add(otStr);
                        ct.SetText(otPhrase);
                        ct.YLine = y;
                        status = ct.Go(true);
                    }
                }

                ct.SetText(otPhrase);
                ct.YLine = y;
                ct.Go();
            }

            canvas.RestoreState();
        }
Exemplo n.º 11
0
        private int FloatingLayout(List <IElement> floatingElements, bool simulate)
        {
            int   status     = ColumnText.NO_MORE_TEXT;
            float minYLine   = yLine;
            float leftWidth  = 0;
            float rightWidth = 0;

            ColumnText currentCompositeColumn = compositeColumn;

            if (simulate)
            {
                currentCompositeColumn = ColumnText.Duplicate(compositeColumn);
            }

            bool ignoreSpacingBefore = maxY == yLine;

            while (floatingElements.Count > 0)
            {
                IElement nextElement = floatingElements[0];
                floatingElements.RemoveAt(0);
                if (nextElement is PdfDiv)
                {
                    PdfDiv floatingElement = (PdfDiv)nextElement;
                    status = floatingElement.Layout(compositeColumn.Canvas, useAscender, true, floatLeftX, minY, floatRightX, yLine);
                    if ((status & ColumnText.NO_MORE_TEXT) == 0)
                    {
                        yLine       = minYLine;
                        floatLeftX  = leftX;
                        floatRightX = rightX;
                        status      = floatingElement.Layout(compositeColumn.Canvas, useAscender, true, floatLeftX, minY, floatRightX, yLine);
                        if ((status & ColumnText.NO_MORE_TEXT) == 0)
                        {
                            floatingElements.Insert(0, floatingElement);
                            break;
                        }
                    }
                    if (floatingElement.Float == PdfDiv.FloatType.LEFT)
                    {
                        status      = floatingElement.Layout(compositeColumn.Canvas, useAscender, simulate, floatLeftX, minY, floatRightX, yLine);
                        floatLeftX += floatingElement.getActualWidth();
                        leftWidth  += floatingElement.getActualWidth();
                    }
                    else if (floatingElement.Float == PdfDiv.FloatType.RIGHT)
                    {
                        status       = floatingElement.Layout(compositeColumn.Canvas, useAscender, simulate, floatRightX - floatingElement.getActualWidth() - 0.01f, minY, floatRightX, yLine);
                        floatRightX -= floatingElement.getActualWidth();
                        rightWidth  += floatingElement.getActualWidth();
                    }
                    minYLine = Math.Min(minYLine, yLine - floatingElement.getActualHeight());
                }
                else
                {
                    if (minY > minYLine)
                    {
                        status = ColumnText.NO_MORE_COLUMN;
                        floatingElements.Insert(0, nextElement);
                        if (currentCompositeColumn != null)
                        {
                            currentCompositeColumn.SetText(null);
                        }
                        break;
                    }
                    else
                    {
                        if (nextElement is ISpaceable && (!ignoreSpacingBefore || !currentCompositeColumn.IgnoreSpacingBefore || ((ISpaceable)nextElement).PaddingTop != 0))
                        {
                            yLine -= ((ISpaceable)nextElement).SpacingBefore;
                        }
                        if (simulate)
                        {
                            if (nextElement is PdfPTable)
                            {
                                currentCompositeColumn.AddElement(new PdfPTable((PdfPTable)nextElement));
                            }
                            else
                            {
                                currentCompositeColumn.AddElement(nextElement);
                            }
                        }
                        else
                        {
                            currentCompositeColumn.AddElement(nextElement);
                        }

                        if (yLine > minYLine)
                        {
                            currentCompositeColumn.SetSimpleColumn(floatLeftX, yLine, floatRightX, minYLine);
                        }
                        else
                        {
                            currentCompositeColumn.SetSimpleColumn(floatLeftX, yLine, floatRightX, minY);
                        }

                        currentCompositeColumn.FilledWidth = 0;

                        status = currentCompositeColumn.Go(simulate);
                        if (yLine > minYLine && (floatLeftX > leftX || floatRightX < rightX) &&
                            (status & ColumnText.NO_MORE_TEXT) == 0)
                        {
                            yLine       = minYLine;
                            floatLeftX  = leftX;
                            floatRightX = rightX;
                            if (leftWidth != 0 && rightWidth != 0)
                            {
                                filledWidth = rightX - leftX;
                            }
                            else
                            {
                                if (leftWidth > filledWidth)
                                {
                                    filledWidth = leftWidth;
                                }
                                if (rightWidth > filledWidth)
                                {
                                    filledWidth = rightWidth;
                                }
                            }

                            leftWidth  = 0;
                            rightWidth = 0;
                            if (simulate && nextElement is PdfPTable)
                            {
                                currentCompositeColumn.AddElement(new PdfPTable((PdfPTable)nextElement));
                            }

                            currentCompositeColumn.SetSimpleColumn(floatLeftX, yLine, floatRightX, minY);
                            status   = currentCompositeColumn.Go(simulate);
                            minYLine = currentCompositeColumn.YLine + currentCompositeColumn.Descender;
                            yLine    = minYLine;
                            if (currentCompositeColumn.FilledWidth > filledWidth)
                            {
                                filledWidth = currentCompositeColumn.FilledWidth;
                            }
                        }
                        else
                        {
                            if (rightWidth > 0)
                            {
                                rightWidth += currentCompositeColumn.FilledWidth;
                            }
                            else if (leftWidth > 0)
                            {
                                leftWidth += currentCompositeColumn.FilledWidth;
                            }
                            else if (currentCompositeColumn.FilledWidth > filledWidth)
                            {
                                filledWidth = currentCompositeColumn.FilledWidth;
                            }
                            minYLine = Math.Min(currentCompositeColumn.YLine + currentCompositeColumn.Descender, minYLine);
                            yLine    = currentCompositeColumn.YLine + currentCompositeColumn.Descender;
                        }

                        if ((status & ColumnText.NO_MORE_TEXT) == 0)
                        {
                            if (!simulate)
                            {
                                floatingElements.InsertRange(0, currentCompositeColumn.CompositeElements);
                                currentCompositeColumn.CompositeElements.Clear();
                            }
                            else
                            {
                                floatingElements.Insert(0, nextElement);
                                currentCompositeColumn.SetText(null);
                            }
                            break;
                        }
                        else
                        {
                            currentCompositeColumn.SetText(null);
                        }
                    }
                }
                if (nextElement is Paragraph)
                {
                    Paragraph p = (Paragraph)nextElement;
                    foreach (IElement e in p)
                    {
                        if (e is WritableDirectElement)
                        {
                            WritableDirectElement writableElement = (WritableDirectElement)e;
                            if (writableElement.DirectElemenType == WritableDirectElement.DIRECT_ELEMENT_TYPE_HEADER && !simulate)
                            {
                                PdfWriter   writer = compositeColumn.Canvas.PdfWriter;
                                PdfDocument doc    = compositeColumn.Canvas.PdfDocument;

                                // here is used a little hack:
                                // writableElement.write() method implementation uses PdfWriter.getVerticalPosition() to create PdfDestination (see com.itextpdf.tool.xml.html.Header),
                                // so here we are adjusting document's currentHeight in order to make getVerticalPosition() return value corresponding to real current position
                                float savedHeight = doc.currentHeight;
                                doc.currentHeight = doc.Top - yLine - doc.indentation.indentTop;
                                writableElement.Write(writer, doc);
                                doc.currentHeight = savedHeight;
                            }
                        }
                    }
                }
                if (ignoreSpacingBefore && nextElement.Chunks.Count == 0)
                {
                    if (nextElement is Paragraph)
                    {
                        Paragraph p = (Paragraph)nextElement;
                        IElement  e = p[0];
                        if (e is WritableDirectElement)
                        {
                            WritableDirectElement writableDirectElement = (WritableDirectElement)e;
                            if (writableDirectElement.DirectElemenType != WritableDirectElement.DIRECT_ELEMENT_TYPE_HEADER)
                            {
                                ignoreSpacingBefore = false;
                            }
                        }
                    }
                    else if (nextElement is ISpaceable)
                    {
                        ignoreSpacingBefore = false;
                    }
                }
                else
                {
                    ignoreSpacingBefore = false;
                }
            }

            if (leftWidth != 0 && rightWidth != 0)
            {
                filledWidth = rightX - leftX;
            }
            else
            {
                if (leftWidth > filledWidth)
                {
                    filledWidth = leftWidth;
                }
                if (rightWidth > filledWidth)
                {
                    filledWidth = rightWidth;
                }
            }

            yLine       = minYLine;
            floatLeftX  = leftX;
            floatRightX = rightX;

            return(status);
        }
Exemplo n.º 12
0
        private int FloatingLayout(List <IElement> floatingElements, bool simulate)
        {
            int   status     = ColumnText.NO_MORE_TEXT;
            float minYLine   = yLine;
            float leftWidth  = 0;
            float rightWidth = 0;

            ColumnText currentCompositeColumn = compositeColumn;

            if (simulate)
            {
                currentCompositeColumn = ColumnText.Duplicate(compositeColumn);
            }

            bool ignoreSpacingBefore = maxY == yLine;

            while (floatingElements.Count > 0)
            {
                IElement nextElement = floatingElements[0];
                floatingElements.RemoveAt(0);
                if (nextElement is PdfDiv)
                {
                    PdfDiv floatingElement = (PdfDiv)nextElement;
                    status = floatingElement.Layout(compositeColumn.Canvas, useAscender, true, floatLeftX, minY, floatRightX, yLine);
                    if ((status & ColumnText.NO_MORE_TEXT) == 0)
                    {
                        yLine       = minYLine;
                        floatLeftX  = leftX;
                        floatRightX = rightX;
                        status      = floatingElement.Layout(compositeColumn.Canvas, useAscender, true, floatLeftX, minY, floatRightX, yLine);
                        if ((status & ColumnText.NO_MORE_TEXT) == 0)
                        {
                            floatingElements.Insert(0, floatingElement);
                            break;
                        }
                    }
                    if (floatingElement.Float == PdfDiv.FloatType.LEFT)
                    {
                        status      = floatingElement.Layout(compositeColumn.Canvas, useAscender, simulate, floatLeftX, minY, floatRightX, yLine);
                        floatLeftX += floatingElement.getActualWidth();
                        leftWidth  += floatingElement.getActualWidth();
                    }
                    else if (floatingElement.Float == PdfDiv.FloatType.RIGHT)
                    {
                        status       = floatingElement.Layout(compositeColumn.Canvas, useAscender, simulate, floatRightX - floatingElement.getActualWidth() - 0.01f, minY, floatRightX, yLine);
                        floatRightX -= floatingElement.getActualWidth();
                        rightWidth  += floatingElement.getActualWidth();
                    }
                    minYLine = Math.Min(minYLine, yLine - floatingElement.getActualHeight());
                }
                else
                {
                    if (minY > minYLine)
                    {
                        status = ColumnText.NO_MORE_COLUMN;
                        floatingElements.Insert(0, nextElement);
                        if (currentCompositeColumn != null)
                        {
                            currentCompositeColumn.SetText(null);
                        }
                        break;
                    }
                    else
                    {
                        if (nextElement is ISpaceable && (!ignoreSpacingBefore || !currentCompositeColumn.IgnoreSpacingBefore || ((ISpaceable)nextElement).PaddingTop != 0))
                        {
                            yLine -= ((ISpaceable)nextElement).SpacingBefore;
                        }
                        if (simulate)
                        {
                            if (nextElement is PdfPTable)
                            {
                                currentCompositeColumn.AddElement(new PdfPTable((PdfPTable)nextElement));
                            }
                            else
                            {
                                currentCompositeColumn.AddElement(nextElement);
                            }
                        }
                        else
                        {
                            currentCompositeColumn.AddElement(nextElement);
                        }

                        if (yLine > minYLine)
                        {
                            currentCompositeColumn.SetSimpleColumn(floatLeftX, yLine, floatRightX, minYLine);
                        }
                        else
                        {
                            currentCompositeColumn.SetSimpleColumn(floatLeftX, yLine, floatRightX, minY);
                        }

                        currentCompositeColumn.FilledWidth = 0;

                        status = currentCompositeColumn.Go(simulate);
                        if (yLine > minYLine && (floatLeftX > leftX || floatRightX < rightX) &&
                            (status & ColumnText.NO_MORE_TEXT) == 0)
                        {
                            yLine       = minYLine;
                            floatLeftX  = leftX;
                            floatRightX = rightX;
                            if (leftWidth != 0 && rightWidth != 0)
                            {
                                filledWidth = rightX - leftX;
                            }
                            else
                            {
                                if (leftWidth > filledWidth)
                                {
                                    filledWidth = leftWidth;
                                }
                                if (rightWidth > filledWidth)
                                {
                                    filledWidth = rightWidth;
                                }
                            }

                            leftWidth  = 0;
                            rightWidth = 0;
                            if (simulate && nextElement is PdfPTable)
                            {
                                currentCompositeColumn.AddElement(new PdfPTable((PdfPTable)nextElement));
                            }

                            currentCompositeColumn.SetSimpleColumn(floatLeftX, yLine, floatRightX, minY);
                            status   = currentCompositeColumn.Go(simulate);
                            minYLine = currentCompositeColumn.YLine + currentCompositeColumn.Descender;
                            yLine    = minYLine;
                            if (currentCompositeColumn.FilledWidth > filledWidth)
                            {
                                filledWidth = currentCompositeColumn.FilledWidth;
                            }
                        }
                        else
                        {
                            if (rightWidth > 0)
                            {
                                rightWidth += currentCompositeColumn.FilledWidth;
                            }
                            else if (leftWidth > 0)
                            {
                                leftWidth += currentCompositeColumn.FilledWidth;
                            }
                            else if (currentCompositeColumn.FilledWidth > filledWidth)
                            {
                                filledWidth = currentCompositeColumn.FilledWidth;
                            }
                            minYLine = Math.Min(currentCompositeColumn.YLine + currentCompositeColumn.Descender, minYLine);
                            yLine    = currentCompositeColumn.YLine + currentCompositeColumn.Descender;
                        }

                        if ((status & ColumnText.NO_MORE_TEXT) == 0)
                        {
                            if (!simulate)
                            {
                                floatingElements.InsertRange(0, currentCompositeColumn.CompositeElements);
                                currentCompositeColumn.CompositeElements.Clear();
                            }
                            else
                            {
                                floatingElements.Insert(0, nextElement);
                                currentCompositeColumn.SetText(null);
                            }
                            break;
                        }
                        else
                        {
                            currentCompositeColumn.SetText(null);
                        }
                    }
                }
                if (ignoreSpacingBefore && nextElement.Chunks.Count == 0)
                {
                    if (nextElement is Paragraph)
                    {
                        Paragraph p = (Paragraph)nextElement;
                        IElement  e = p[0];
                        if (e is WritableDirectElement)
                        {
                            WritableDirectElement writableDirectElement = (WritableDirectElement)e;
                            if (writableDirectElement.DirectElemenType != WritableDirectElement.DIRECT_ELEMENT_TYPE_HEADER)
                            {
                                ignoreSpacingBefore = false;
                            }
                        }
                    }
                    else if (nextElement is ISpaceable)
                    {
                        ignoreSpacingBefore = false;
                    }
                }
                else
                {
                    ignoreSpacingBefore = false;
                }
            }

            if (leftWidth != 0 && rightWidth != 0)
            {
                filledWidth = rightX - leftX;
            }
            else
            {
                if (leftWidth > filledWidth)
                {
                    filledWidth = leftWidth;
                }
                if (rightWidth > filledWidth)
                {
                    filledWidth = rightWidth;
                }
            }

            yLine       = minYLine;
            floatLeftX  = leftX;
            floatRightX = rightX;

            return(status);
        }