public virtual void SpecialScriptPreLayoutProcessing()
        {
            PdfDocument  pdfDocument           = new PdfDocument(new PdfWriter(new MemoryStream()));
            Document     document              = new Document(pdfDocument);
            int          thaiTextSplitPosition = THAI_TEXT.Length / 2;
            PdfFont      font = PdfFontFactory.CreateFont(THAI_FONT, PdfEncodings.IDENTITY_H);
            TextRenderer textRendererFirstPart = new TextRenderer(new Text(THAI_TEXT.JSubstring(0, thaiTextSplitPosition
                                                                                                )));

            textRendererFirstPart.SetProperty(Property.FONT, font);
            textRendererFirstPart.SetText(THAI_TEXT.JSubstring(0, thaiTextSplitPosition));
            TextRenderer textRendererSecondPart = new TextRenderer(new Text(THAI_TEXT.Substring(thaiTextSplitPosition)
                                                                            ));

            textRendererSecondPart.SetProperty(Property.FONT, font);
            textRendererSecondPart.SetText(THAI_TEXT.Substring(thaiTextSplitPosition));
            TableRenderer floatingNonTextRenderer = new TableRenderer(new Table(3));

            floatingNonTextRenderer.SetProperty(Property.FLOAT, FloatPropertyValue.RIGHT);
            TableRenderer regularNonTextRenderer = new TableRenderer(new Table(3));
            LineRenderer  lineRenderer           = new LineRenderer();

            lineRenderer.SetParent(document.GetRenderer());
            lineRenderer.AddChild(textRendererFirstPart);
            lineRenderer.AddChild(floatingNonTextRenderer);
            lineRenderer.AddChild(textRendererSecondPart);
            lineRenderer.AddChild(regularNonTextRenderer);
            LineRenderer.SpecialScriptsContainingTextRendererSequenceInfo info = lineRenderer.GetSpecialScriptsContainingTextRendererSequenceInfo
                                                                                     (0);
            int         numberOfSequentialTextRenderers = info.numberOfSequentialTextRenderers;
            String      sequentialTextContent           = info.sequentialTextContent;
            IList <int> indicesOfFloating = info.indicesOfFloating;

            NUnit.Framework.Assert.AreEqual(3, numberOfSequentialTextRenderers);
            NUnit.Framework.Assert.AreEqual(THAI_TEXT, sequentialTextContent);
            NUnit.Framework.Assert.AreEqual(1, indicesOfFloating.Count);
            NUnit.Framework.Assert.AreEqual(1, (int)indicesOfFloating[0]);
            IList <int> possibleBreaks = new List <int>(JavaUtil.ArraysAsList(3, 8, 10, 12, 15, 20, 23, 26, 28, 30, 36));

            lineRenderer.DistributePossibleBreakPointsOverSequentialTextRenderers(0, numberOfSequentialTextRenderers,
                                                                                  possibleBreaks, indicesOfFloating);
            IList <int> possibleBreaksFirstPart = textRendererFirstPart.GetSpecialScriptsWordBreakPoints();

            NUnit.Framework.Assert.IsNotNull(possibleBreaksFirstPart);
            IList <int> possibleBreaksSecondPart = textRendererSecondPart.GetSpecialScriptsWordBreakPoints();

            NUnit.Framework.Assert.IsNotNull(possibleBreaksSecondPart);
            int         indexOfLastPossibleBreakInTheFirstRenderer = 4;
            IList <int> expectedPossibleBreaksFirstPart            = possibleBreaks.SubList(0, indexOfLastPossibleBreakInTheFirstRenderer
                                                                                            + 1);
            IList <int> expectedPossibleBreaksSecondPart = possibleBreaks.SubList(indexOfLastPossibleBreakInTheFirstRenderer
                                                                                  + 1, possibleBreaks.Count);

            NUnit.Framework.Assert.AreEqual(expectedPossibleBreaksFirstPart, possibleBreaksFirstPart);
            for (int i = 0; i < expectedPossibleBreaksSecondPart.Count; i++)
            {
                expectedPossibleBreaksSecondPart[i] = expectedPossibleBreaksSecondPart[i] - thaiTextSplitPosition;
            }
            NUnit.Framework.Assert.AreEqual(expectedPossibleBreaksSecondPart, possibleBreaksSecondPart);
        }
        public virtual void MultipleFloatsFollowedByUnfittingThaiRenderer()
        {
            PdfDocument  pdfDocument  = new PdfDocument(new PdfWriter(new MemoryStream()));
            Document     document     = new Document(pdfDocument);
            LineRenderer lineRenderer = new LineRenderer();

            lineRenderer.SetParent(document.GetRenderer());
            PdfFont font = PdfFontFactory.CreateFont(THAI_FONT, PdfEncodings.IDENTITY_H);
            IDictionary <int, LayoutResult> specialScriptLayoutResults = new Dictionary <int, LayoutResult>();
            int indexOfThaiRenderer = 3;

            for (int i = 0; i < indexOfThaiRenderer; i++)
            {
                TableRenderer tableRenderer = new TableRenderer(new Table(3));
                tableRenderer.SetProperty(Property.FLOAT, FloatPropertyValue.LEFT);
                lineRenderer.AddChild(tableRenderer);
            }
            TextRenderer textRenderer = new TextRenderer(new Text(""));

            textRenderer.SetProperty(Property.FONT, font);
            textRenderer.SetText(THAI_WORD);
            textRenderer.SetSpecialScriptsWordBreakPoints(new List <int>(JavaUtil.ArraysAsList(THAI_WORD.Length)));
            lineRenderer.AddChild(textRenderer);
            LayoutArea layoutArea = new LayoutArea(1, new Rectangle(0, 0, 0, 100));

            specialScriptLayoutResults.Put(indexOfThaiRenderer, new LayoutResult(LayoutResult.NOTHING, layoutArea, null
                                                                                 , null));
            LineRenderer.LastFittingChildRendererData lastFittingChildRendererData = lineRenderer.GetIndexAndLayoutResultOfTheLastRendererToRemainOnTheLine
                                                                                         (indexOfThaiRenderer, specialScriptLayoutResults, false, new List <IRenderer>());
            NUnit.Framework.Assert.AreEqual(indexOfThaiRenderer, lastFittingChildRendererData.childIndex);
            NUnit.Framework.Assert.AreEqual(LayoutResult.NOTHING, lastFittingChildRendererData.childLayoutResult.GetStatus
                                                ());
        }
Beispiel #3
0
        public virtual void TableRendererAddByIDTest()
        {
            DocumentRenderer documentRenderer = new DocumentRenderer(null);
            TableRenderer    tableRenderer    = new TableRenderer(new Table(5));

            tableRenderer.SetParent(documentRenderer);
            String id = "id5";

            tableRenderer.SetProperty(Property.ID, id);
            LayoutContext layoutContext = new LayoutContext(new LayoutArea(4, new Rectangle(50, 50)));

            tableRenderer.Layout(layoutContext);
            documentRenderer.GetTargetCounterHandler().PrepareHandlerToRelayout();
            NUnit.Framework.Assert.AreEqual((int?)4, TargetCounterHandler.GetPageByID(tableRenderer, id));
        }
Beispiel #4
0
 internal static void AdjustFloatedTableLayoutBox(TableRenderer tableRenderer, Rectangle layoutBox, float tableWidth
                                                  , IList <Rectangle> floatRendererAreas, FloatPropertyValue?floatPropertyValue)
 {
     tableRenderer.SetProperty(Property.HORIZONTAL_ALIGNMENT, null);
     UnitValue[] margins = tableRenderer.GetMargins();
     if (!margins[1].IsPointValue())
     {
         ILog logger = LogManager.GetLogger(typeof(iText.Layout.Renderer.FloatingHelper));
         logger.Error(MessageFormatUtil.Format(iText.IO.LogMessageConstant.PROPERTY_IN_PERCENTS_NOT_SUPPORTED, Property
                                               .MARGIN_RIGHT));
     }
     if (!margins[3].IsPointValue())
     {
         ILog logger = LogManager.GetLogger(typeof(iText.Layout.Renderer.FloatingHelper));
         logger.Error(MessageFormatUtil.Format(iText.IO.LogMessageConstant.PROPERTY_IN_PERCENTS_NOT_SUPPORTED, Property
                                               .MARGIN_LEFT));
     }
     AdjustBlockAreaAccordingToFloatRenderers(floatRendererAreas, layoutBox, tableWidth + margins[1].GetValue()
                                              + margins[3].GetValue(), FloatPropertyValue.LEFT.Equals(floatPropertyValue));
 }