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 ()); }
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)); }
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)); }