public void AllignmentPropertyTestForTable()
        {
            var rtfTable = new RtfTable(3, 3, 20, 20);

            rtfTable.Alignment = Align.Center;
            Assert.AreEqual(Align.Center, rtfTable.Alignment);
        }
        public void ColCountPropertyTestForTable()
        {
            var rtfTable = new RtfTable(3, 3, 20, 20);

            rtfTable.StartNewPage = false;
            Assert.AreEqual(3, rtfTable.ColCount);
        }
        public void StartNewPagePropertyTestForTable()
        {
            var rtfTable = new RtfTable(3, 3, 20, 20);

            rtfTable.StartNewPage = false;
            Assert.AreEqual(false, rtfTable.StartNewPage);
        }
示例#4
0
        private static void old_CreateTableTitle(RtfTable table)
        {
            for (var j = 0; j < table.ColCount; j++)
            {
                for (var i = 0; i < 2; i++)
                {
                    table.Cell(i, j).DefaultCharFormat.FontStyle.AddStyle(FontStyleFlag.Bold);
                }
            }
            RTFWorkingProvider.AddTextToCell(0, 0, table, "№ п/п");
            RTFWorkingProvider.AddTextToCell(0, 1, table, "Идентификатор");
            RTFWorkingProvider.AddTextToCell(0, 2, table, "Тип велопарковки");
            RTFWorkingProvider.AddTextToCell(0, 3, table, "Вид велопарковки");
            RTFWorkingProvider.AddTextToCell(0, 4, table, "Статус");
            RTFWorkingProvider.AddTextToCell(0, 5, table, "Длина, м");
            RTFWorkingProvider.AddTextToCell(0, 6, table, "Ширина, м");
            RTFWorkingProvider.AddTextToCell(0, 7, table, "Количество секций");
            RTFWorkingProvider.AddTextToCell(0, 8, table, "Дата установки");
            RTFWorkingProvider.AddTextToCell(0, 9, table, "Дата обслуживания");


            for (var i = 0; i < table.ColCount; i++)
            {
                RTFWorkingProvider.AddTextToCell(1, i, table, (i + 1).ToString());
            }
        }
        public void GetCellForTableTest()
        {
            var rtfTable     = new RtfTable(3, 3, 20, 20);
            var rtfTableCell = rtfTable.cell(1, 2);

            Assert.AreEqual(2, rtfTableCell.ColIndex);
        }
        public void CheckRightDirectionForTable()
        {
            var rtfTable = new RtfTable(3, 3, 20, 20);

            rtfTable.ReadingDirection = ReadingDirection.RightToLeft;
            Assert.AreEqual(ReadingDirection.RightToLeft, rtfTable.ReadingDirection);
        }
        public void MergeInTableTest()
        {
            var rtfTable     = new RtfTable(3, 3, 20, 20);
            var rtfTableCell = rtfTable.merge(1, 1, 1, 2);

            Assert.AreEqual(1, rtfTableCell.RowIndex);
            Assert.AreEqual(1, rtfTableCell.ColIndex);
        }
        public void MergeShouldReturnCellWhenRowSpanAndColSpanAreEqual()
        {
            var rtfTable     = new RtfTable(3, 3, 20, 20);
            var rtfTableCell = rtfTable.merge(1, 1, 1, 1);

            Assert.AreEqual(1, rtfTableCell.RowIndex);
            Assert.AreEqual(1, rtfTableCell.ColIndex);
        }
示例#9
0
 public static void AligmentColumn(RtfTable table, int column, int row1, int row2, HorizontalAlignment alignment, int fontSize = 12)
 {
     try
     {
         for (var i = row1; i <= row2; i++)
         {
             table.Cell(i, column).HorizontalAlignment        = alignment;
             table.Cell(i, column).DefaultCharFormat.FontSize = fontSize;
         }
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }
示例#10
0
        /// <summary>
        /// Adds the specified ESCommon.Rtf.RtfTableCell to the collection.
        /// </summary>
        public void Add(RtfTableCell rtfTableCell)
        {
            OnAddingCell(rtfTableCell);

            int num = list.Count;

            list.Add(rtfTableCell);
            Row.Definitions.AddInternal(rtfTableCell.Definition);

            rtfTableCell.ColumnIndexInternal = num;
            rtfTableCell.RowIndexInternal    = Row.Index;

            RtfTable table = Row.Table;

            if (table != null && table.ColumnCount > num)
            {
                rtfTableCell.ColumnInternal = table.Columns[num];
            }

            if (!rtfTableCell.Definition.IsWidthSet)
            {
                if (table != null && table.ColumnCount > 0 && table.Columns[num].IsWidthSet)
                {
                    rtfTableCell.Definition.Width = table.Columns[num].Width;
                }
            }

            if (!rtfTableCell.Definition.HasStyle)
            {
                if (table != null && table.ColumnCount > 0 && table.Columns[num].DefaultCellStyle != null)
                {
                    table.Columns[num].DefaultCellStyle.CopyTo(rtfTableCell.Definition.StyleInternal);
                }
                else if (table != null && table.DefaultCellStyle != null)
                {
                    table.DefaultCellStyle.CopyTo(rtfTableCell.Definition.StyleInternal);
                }
                else
                {
                    rtfTableCell.Definition.StyleInternal = new RtfTableCellStyle();
                }
            }

            Row.ResizeCellsInternal();
        }
        public void RTL_TableRendereTestWithReadingDirectionLeftToRight()
        {
            var rtfTable = new RtfTable(1, 2, 20, 20, ReadingDirection.LeftToRight);
            var sb       = new StringBuilder();

            sb.AppendLine(string.Format(@"{{\trowd\{0}row\trgaph\trpaddl0\trpaddt0\trpaddr0\trpaddb0", LtrContent))
            .AppendLine(@"\trleft0")
            .AppendLine()
            .AppendLine(
                @"\clbrdrt\brdrw40\brdrs\brdrcf0\clbrdrr\brdrw20\brdrdot\brdrcf0\clbrdrb\brdrw40\brdrs\brdrcf0\clbrdrl\brdrw40\brdrs\brdrcf0\clvertalt\cellx200")
            .AppendLine(
                @"\clbrdrt\brdrw40\brdrs\brdrcf0\clbrdrr\brdrw40\brdrs\brdrcf0\clbrdrb\brdrw40\brdrs\brdrcf0\clbrdrl\brdrw20\brdrdot\brdrcf0\clvertalt\cellx400")
            .AppendLine(@"\pard\intbl\fi0\ltrpar\ql")
            .AppendLine("CELL 0,0")
            .AppendLine()
            .AppendLine()
            .AppendLine(@"\cell")
            .AppendLine(@"\pard\intbl\fi0\ltrpar\ql")
            .AppendLine("CELL 0,1")
            .AppendLine()
            .AppendLine()
            .AppendLine(@"\cell")
            .AppendLine(@"\row}")
            .Append(@"\sl-400\slmult");

            rtfTable.Margins[Direction.Bottom] = 20;
            rtfTable.setInnerBorder(BorderStyle.Dotted, 1f);
            rtfTable.setOuterBorder(BorderStyle.Single, 2f);

            var expectString = sb.ToString();

            for (var i = 0; i < rtfTable.RowCount; i++)
            {
                for (var j = 0; j < rtfTable.ColCount; j++)
                {
                    rtfTable.cell(i, j).addParagraph().setText("CELL " + i.ToString() + "," + j.ToString());
                }
            }

            var result = rtfTable.render();

            Assert.AreEqual(expectString, result);
        }
示例#12
0
        private static void old_FillDataTable(RtfTable table, IList <VeloObject> someobjs)
        {
            var i = 2;

            foreach (var so in someobjs)
            {
                RTFWorkingProvider.AddTextToCell(i, 0, table, (i - 1).ToString());
                RTFWorkingProvider.AddTextToCell(i, 1, table, so.ID.ToString());
                RTFWorkingProvider.AddTextToCell(i, 2, table, so.TypeAsString);
                RTFWorkingProvider.AddTextToCell(i, 3, table, so.ViewAsString);
                RTFWorkingProvider.AddTextToCell(i, 4, table, so.StatusAsString);
                RTFWorkingProvider.AddTextToCell(i, 5, table, so.VeloLength.ToString());
                RTFWorkingProvider.AddTextToCell(i, 6, table, so.VeloWidth.ToString());
                RTFWorkingProvider.AddTextToCell(i, 7, table, so.VeloSection.ToString());
                RTFWorkingProvider.AddTextToCell(i, 8, table, so.DataCheck?.ToShortDateString() ?? "");
                RTFWorkingProvider.AddTextToCell(i, 9, table, so.DataSet?.ToShortDateString() ?? "");

                i++;
            }
        }
示例#13
0
        private void _btTable_Click(object sender, System.EventArgs e)
        {
            // create document
            C1WordDocument c1Word = new C1WordDocument();

            c1Word.Info.Title = "Sample with tables";
            _statusBar.Text   = "Creating document...";

            int      rows  = 4;
            int      cols  = 2;
            RtfTable table = new RtfTable(rows, cols);

            table.BottomBorderStyle = table.LeftBorderStyle = table.RightBorderStyle = table.TopBorderStyle = RtfBorderStyle.Single;
            table.BottomBorderWidth = table.LeftBorderWidth = table.RightBorderWidth = table.TopBorderWidth = 1;
            c1Word.Add(table);
            for (int row = 0; row < rows; row++)
            {
                for (int col = 0; col < cols; col++)
                {
                    var cell = table.Rows[row].Cells[col];
                    cell.BottomBorderStyle = cell.LeftBorderStyle = cell.RightBorderStyle = cell.TopBorderStyle = RtfBorderStyle.Single;
                    cell.BottomBorderWidth = cell.LeftBorderWidth = cell.RightBorderWidth = cell.TopBorderWidth = 1;
                    RtfParagraph paragraph = new RtfParagraph();
                    paragraph.Content.Add(new RtfString(string.Format("table cell {0}:{1}.", row, col)));
                    cell.Content.Add(paragraph);
                }
            }

            Font font = new Font("Arial", 10, FontStyle.Regular);

            c1Word.AddParagraph("Simple table.", font, Color.Blue);

            _statusBar.Text = "Saving document...";
            string fileName = GetFileName(c1Word, "table.rtf");

            c1Word.Save(fileName);
            Process.Start(fileName);
            _statusBar.Text = "Ready.";
        }
        public void RowHeightForTableTest()
        {
            var rtfTable = new RtfTable(3, 3, 20, 20);

            Assert.DoesNotThrow(() => rtfTable.setRowHeight(1, 20));
        }
        public void ShouldThrowExceptionWhenColumnValueIsNegative()
        {
            var rtfTable = new RtfTable(3, 3, 20, 20);

            Assert.Throws <Exception>(() => rtfTable.setColWidth(-1, 20));
        }
        public void SetColumnWidthForTableTest()
        {
            var rtfTable = new RtfTable(3, 3, 20, 20);

            Assert.DoesNotThrow(() => rtfTable.setColWidth(1, 20));
        }
        public void MergeShouldThrowExceptionWhenLeftColumnIsNegative()
        {
            var rtfTable = new RtfTable(3, 3, 20, 20);

            Assert.Throws <Exception>(() => rtfTable.merge(1, -2, 3, 3));
        }
示例#18
0
 /**
 * Constructs a RtfRow for a Row.
 * 
 * @param doc The RtfDocument this RtfRow belongs to
 * @param rtfTable The RtfTable this RtfRow belongs to
 * @param row The Row this RtfRow is based on
 * @param rowNumber The number of this row
 * @since 2.1.3
 */
 protected internal RtfRow(RtfDocument doc, RtfTable rtfTable, PdfPRow row, int rowNumber) : base(doc) {
     this.parentTable = rtfTable;
     this.rowNumber = rowNumber;
     ImportRow(row);
 }
示例#19
0
        private void btnReport_Click(object sender, EventArgs e)
        {
            try
            {
                RtfDocument  doc = new RtfDocument(PaperSize.A4, PaperOrientation.Portrait, Lcid.Russian);
                RtfParagraph p   = doc.addParagraph();
                p.Alignment = Align.Center;
                p.DefaultCharFormat.FontSize = 14.0f;
                p.DefaultCharFormat.FontStyle.addStyle(FontStyleFlag.Bold);
                p.Text = "Статистика баллов ЕГЭ по регионам";
                if (chbEntered.Checked)
                {
                    p.Text += " среди зачисленных абитуриентов";
                }

                doc.addParagraph().Text = "";
                p           = doc.addParagraph();
                p.Alignment = Align.Left;
                if (FacultyId.HasValue)
                {
                    p.Text = cbFaculty.Text;
                }
                else
                {
                    p.Text = "По всему университету";
                }

                if (LicenseProgramId.HasValue)
                {
                    p           = doc.addParagraph();
                    p.Alignment = Align.Left;
                    p.Text      = "Направление: " + cbLicenseProgram.Text;
                }

                if (ObrazProgramId.HasValue)
                {
                    p           = doc.addParagraph();
                    p.Alignment = Align.Left;
                    p.Text      = "Образовательная программа: " + cbObrazProgram.Text;
                }

                p = doc.addParagraph();
                //p.LineSpacing = RtfConstants.MILLIMETERS_TO_POINTS
                if (StudyFormId.HasValue)
                {
                    p.Text = "Форма обучения: " + cbStudyForm.Text;
                }
                else
                {
                    p.Text = "Все формы обучения";
                }

                p = doc.addParagraph();
                //p.LineSpacing = RtfConstants.MILLIMETERS_TO_POINTS
                if (StudyFormId.HasValue)
                {
                    p.Text = "Основа обучения: " + cbStudyBasis.Text;
                }
                else
                {
                    p.Text = "Все основы обучения";
                }

                p = doc.addParagraph();
                //p.LineSpacing = RtfConstants.MILLIMETERS_TO_POINTS
                p.Text = "Предмет: " + cbEgeExamName.Text;

                doc.addParagraph().Text = "";

                RtfTable table = doc.addTable(dgv.Rows.Count + 1, dgv.ColumnCount);

                table.setInnerBorder(RtfWriter.BorderStyle.Single, 0.25f);
                table.setOuterBorder(RtfWriter.BorderStyle.Single, 0.25f);
                //заголовки
                for (int i = 0; i < dgv.ColumnCount; i++)
                {
                    table.cell(0, i).Alignment           = Align.Center;
                    table.cell(0, i).addParagraph().Text = dgv.Columns[i].Name;
                }

                table.setColWidth(0, (float)(60.0m * RtfConstants.MILLIMETERS_TO_POINTS));
                table.setColWidth(1, (float)(25.0m * RtfConstants.MILLIMETERS_TO_POINTS));
                table.setColWidth(2, (float)(20.0m * RtfConstants.MILLIMETERS_TO_POINTS));
                table.setColWidth(3, (float)(20.0m * RtfConstants.MILLIMETERS_TO_POINTS));
                table.setColWidth(4, (float)(20.0m * RtfConstants.MILLIMETERS_TO_POINTS));

                DataView dv = new DataView((DataTable)dgv.DataSource);
                dv.Sort = "Кол-во абитуриентов DESC";
                int rowId = 1;
                foreach (DataRow rw in dv.ToTable().Rows)
                {
                    int colId = 0;
                    foreach (DataColumn col in dv.ToTable().Columns)
                    {
                        var par = table.cell(rowId, colId).addParagraph();
                        par.Text      = rw[col.ColumnName].ToString();
                        par.Alignment = Align.Center;
                        colId++;
                    }
                    //запрет переноса строк
                    table.setRowKeepInSamePage(rowId++, false);
                }

                doc.save(MainClass.saveTempFolder + "/Report.rtf");
                System.Diagnostics.Process.Start(MainClass.saveTempFolder + "/Report.rtf");
            }
            catch (Exception ex)
            {
                WinFormsServ.Error(ex.Message);
            }
        }
        public void SetRowKeepInSamePageTest()
        {
            var rtfTable = new RtfTable(3, 3, 20, 20);

            Assert.DoesNotThrow(() => rtfTable.setRowKeepInSamePage(1, true));
        }
        public void ShouldThrowExceptionWhenRowKeepInSamePageIsNegative()
        {
            var rtfTable = new RtfTable(3, 3, 20, 20);

            Assert.Throws <Exception>(() => rtfTable.setRowKeepInSamePage(-1, false));
        }
        public void MergeShouldThrowExceptionWhenTopRowIsNegative()
        {
            var rtfTable = new RtfTable(3, 3, 20, 20);

            Assert.Throws <Exception>(() => rtfTable.merge(-1, 2, 3, 3));
        }
        public void MergeShouldThrowExceptionWhenColumnSpanIsLessThanOne()
        {
            var rtfTable = new RtfTable(3, 3, 20, 20);

            Assert.Throws <Exception>(() => rtfTable.merge(1, 2, 2, -2));
        }
        public void ShouldThrowExceptionWhenRowValueIsNegative()
        {
            var rtfTable = new RtfTable(3, 3, 20, 20);

            Assert.Throws <Exception>(() => rtfTable.setRowHeight(-1, 20));
        }
示例#25
0
        private void CPK_Rtf()
        {
            RtfDocument doc = new RtfDocument(PaperSize.A4, PaperOrientation.Landscape, Lcid.Russian);

            string sFac = cbFaculty.Text.ToLower();

            if (sFac.CompareTo("все") == 0)
            {
                sFac = "всех факультетов ";
            }
            else
            {
                if (ComboServ.GetComboId(cbFaculty) == "10")
                {
                    sFac = "медицинского колледжа ";
                }
                else if (ComboServ.GetComboId(cbFaculty) == "3")
                {
                    sFac = "высшей школы менеджмента ";
                }
                else
                {
                    sFac = sFac.Replace("кий", "кого ").Replace("ый", "ого ").Replace("акультет", "акультета");
                }
            }

            string sForm = cbStudyForm.Text.ToLower();

            if (sForm.CompareTo("все") == 0)
            {
                sForm = " всех форм обучения ";
            }
            else
            {
                sForm = sForm.Replace("ая", "ой").Replace("яя", "ей") + " формы обучения ";
            }

            doc.addParagraph().Text =
                string.Format("Ежедневная информация (форма ЦПК)\r\n{0}\r\n{1}", sFac + " " + sForm, "на " + DateTime.Now.ToShortDateString());

            RtfTable tbl = doc.addTable(2 + dgvData.Rows.Count, 1 + dgvData.ColumnCount);

            //делаем заголовки
            //
            tbl.merge(0, 0, 2, 1);
            tbl.FillCell(0, 0, "", FontStyleFlag.Normal);

            tbl.merge(0, 1, 2, 1);
            tbl.FillCell(0, 1, "Направление, специальность", FontStyleFlag.Normal);

            tbl.merge(0, 2, 2, 1);
            tbl.FillCell(0, 0, "Шифр", FontStyleFlag.Normal);

            tbl.merge(0, 3, 1, 2);
            tbl.FillCell(0, 0, "План приема", FontStyleFlag.Normal);

            tbl.merge(0, 5, 1, 2);
            tbl.FillCell(0, 0, "Количество поданных заявлений", FontStyleFlag.Normal);

            tbl.merge(0, 7, 1, 2);
            tbl.FillCell(0, 0, "Конкурс", FontStyleFlag.Normal);

            tbl.FillCell(1, 3, "бюджет", FontStyleFlag.Normal);
            tbl.FillCell(1, 4, "догов.", FontStyleFlag.Normal);
            tbl.FillCell(1, 5, "бюджет", FontStyleFlag.Normal);
            tbl.FillCell(1, 6, "догов.", FontStyleFlag.Normal);
            tbl.FillCell(1, 7, "бюджет", FontStyleFlag.Normal);
            tbl.FillCell(1, 8, "догов.", FontStyleFlag.Normal);

            int          iRow = 3;
            RtfParagraph p;

            foreach (DataGridViewRow row in dgvData.Rows)
            {
                string sProgramName = row.Cells[1].Value.ToString();
                if (!sProgramName.StartsWith("   ", StringComparison.OrdinalIgnoreCase))
                {
                }

                p      = tbl.cell(iRow, 0).addParagraph();
                p.Text = (iRow - 2).ToString();
            }

            doc.render();
        }
示例#26
0
 public override void BeginTable(int columnsCount, int rowsCount)
 {
     fTable    = fDocument.addTable(rowsCount, columnsCount, 0);
     fTableRow = 0;
     fTableCol = 0;
 }
        public void RowCountPropertyTestForTable()
        {
            var rtfTable = new RtfTable(3, 3, 20, 20);

            Assert.AreEqual(3, rtfTable.RowCount);
        }
示例#28
0
 /// <summary>
 /// Initializes a new instance of ESCommon.Rtf.RtfTableColumnCollection class.
 /// </summary>
 /// <param name="table">Owning table.</param>
 internal RtfTableColumnCollection(RtfTable table)
 {
     list  = new List <RtfTableColumn>();
     Table = table;
 }
示例#29
0
        //---------------------------------------------------------------------------------
        #region ** text

        static void CreateDocumentText(C1WordDocument word)
        {
            // use landscape for more impact
            word.Landscape = true;

            // measure and show some text
            var text = "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.";
            var font = new Font("Segoe UI Light", 14, RtfFontStyle.Italic);

            // add paragraph
            word.AddParagraph(text, font, Colors.BlueViolet, RtfHorizontalAlignment.Justify);
            var paragraph = (RtfParagraph)word.Current;

            paragraph.LeftBorderColor   = Colors.Blue;
            paragraph.LeftBorderStyle   = RtfBorderStyle.Emboss;
            paragraph.LeftBorderWidth   = 1f;
            paragraph.TopBorderColor    = Colors.Blue;
            paragraph.TopBorderStyle    = RtfBorderStyle.Emboss;
            paragraph.TopBorderWidth    = 2f;
            paragraph.RightBorderColor  = Colors.Purple;
            paragraph.RightBorderStyle  = RtfBorderStyle.DotDash;
            paragraph.RightBorderWidth  = 5f;
            paragraph.BottomBorderColor = Colors.Red;
            paragraph.BottomBorderStyle = RtfBorderStyle.Dotted;
            paragraph.BottomBorderWidth = 3f;

            // add table
            word.LineBreak();
            int      rows  = 4;
            int      cols  = 2;
            RtfTable table = new RtfTable(rows, cols);

            word.Add(table);
            table.Rows[0].Cells[0].SetMerged(1, 2);

            for (int row = 0; row < rows; row++)
            {
                if (row == 0)
                {
                    table.Rows[row].Height = 50;
                }
                for (int col = 0; col < cols; col++)
                {
                    if (row == 0 && col == 0)
                    {
                        text = "Word/RTF works in WPF!";
                        table.Rows[row].Cells[col].Alignment   = ContentAlignment.MiddleCenter;
                        table.Rows[row].Cells[col].BackFilling = Colors.LightPink;
                    }
                    else
                    {
                        text = string.Format("table cell {0}:{1}.", row, col);
                        table.Rows[row].Cells[col].BackFilling = Colors.LightYellow;
                    }
                    table.Rows[row].Cells[col].Content.Add(new RtfString(text));
                    table.Rows[row].Cells[col].BottomBorderWidth = 2;
                    table.Rows[row].Cells[col].TopBorderWidth    = 2;
                    table.Rows[row].Cells[col].LeftBorderWidth   = 2;
                    table.Rows[row].Cells[col].RightBorderWidth  = 2;
                    if (col == cols - 1)
                    {
                        table.Rows[row].Cells[col].Alignment = ContentAlignment.BottomRight;
                    }
                }
            }
        }
        static void CreateDocumentTOC(C1WordDocument doc)
        {
            // calculate page rect (discounting margins)
            Rect rcPage = WordUtils.PageRectangle(doc);
            var  height = rcPage.Top;

            // initialize fonts
            Font titleFont  = new Font("Tahoma", 20, RtfFontStyle.Bold);
            Font headerFont = new Font("Arial", 14, RtfFontStyle.Bold);
            Font bodyFont   = new Font("Times New Roman", 11);

            // add title
            doc.AddParagraph(Strings.TableOfContentsDocumentTitle, titleFont, Colors.DeepPink, RtfHorizontalAlignment.Center);
            doc.AddParagraph(string.Empty);

            // create context of the document
            var pageIndex = 2;
            var data      = new List <List <string> >();

            for (int i = 0; i < 30; i++)
            {
                // iniialization data
                var list = new List <string>();
                data.Add(list);

                // create it header (as a link target and outline entry)
                string header = string.Format("{0}. {1}", i + 1, BuildRandomTitle());
                var    h      = 2 * doc.MeasureString(header, headerFont, rcPage.Width).Height;

                // create some text
                for (int j = 0; j < 3 + _rnd.Next(20); j++)
                {
                    // some paragraph
                    string text = BuildRandomParagraph();
                    var    sf   = new StringFormat();
                    sf.Alignment = HorizontalAlignment.Stretch;
                    h           += doc.MeasureString(text, bodyFont, rcPage.Width, sf).Height;
                    h           += 6;

                    // test next page
                    if (height + h > rcPage.Bottom)
                    {
                        pageIndex++;
                        height = rcPage.Top;
                    }
                    height += h;
                    h       = 0;

                    // page index for header
                    if (j == 0)
                    {
                        list.Add(pageIndex.ToString());
                        list.Add(header.ToString());
                    }

                    // page index for paragraph
                    list.Add(pageIndex.ToString());
                    list.Add(text.ToString());
                }

                // last line
                height += 20;
            }

            // render Table of Contents
            RtfTable table = new RtfTable(data.Count, 2);

            doc.Add(table);
            for (int row = 0; row < data.Count; row++)
            {
                // get bookmark info
                var list   = data[row];
                var page   = list[0];
                var header = list[1];

                // add cells
                table.Rows[row].Cells[0].Content.Add(new RtfString(header));
                //var hlink = new RtfHyperlink(string.Format("hdr{0}", 1 + row));
                //hlink.Content.Add(new RtfString(page));
                //table.Rows[row].Cells[1].Content.Add(hlink);
                table.Rows[row].Cells[1].Content.Add(new RtfString(page));

                // set attributes
                table.Rows[row].Cells[0].Alignment = ContentAlignment.BottomLeft;
                table.Rows[row].Cells[1].Alignment = ContentAlignment.BottomRight;
                table.Rows[row].BottomBorderWidth  = 1;
                table.Rows[row].BottomBorderStyle  = RtfBorderStyle.Dotted;
            }

            // next page
            doc.PageBreak();
            pageIndex = 1;

            // render contents
            foreach (var list in data)
            {
                for (int i = 0; i < list.Count; i += 2)
                {
                    int page = int.Parse(list[i]);
                    if (page != pageIndex)
                    {
                        doc.PageBreak();
                        pageIndex = page;
                    }
                    var text = list[i + 1];
                    if (i == 0)
                    {
                        // header
                        //doc.AddBookmark(string.Format("hdr{0}", 1 + data.IndexOf(list)));
                        doc.AddParagraph(text, headerFont, Colors.DarkGray, RtfHorizontalAlignment.Center);
                        var paragraph = (RtfParagraph)doc.Current;
                        paragraph.TopBorderColor = Colors.DarkGray;
                        paragraph.TopBorderStyle = RtfBorderStyle.Single;
                        paragraph.TopBorderWidth = 1f;
                        doc.AddParagraph(string.Empty, bodyFont, Colors.Black);
                    }
                    else
                    {
                        // context
                        doc.AddParagraph(text, bodyFont, Colors.Black, RtfHorizontalAlignment.Justify);
                    }
                }
                doc.AddParagraph(string.Empty, bodyFont, Colors.Black);
            }
        }
        public void CheckDefaultDirectionForTable()
        {
            var rtfTable = new RtfTable(3, 3, 20, 20);

            Assert.AreEqual(ReadingDirection.LeftToRight, rtfTable.ReadingDirection);
        }