/// <summary> /// The CellRange will be collapsed into a single Cell (with the lowest row and column index) /// This method will automatically sets the colspan and rowspan of the first Cell of the Range. /// </summary> public void MergeCells() { try { PdfCell pc = this.owner.Rows[startRow][startColumn]; pc.RowSpan = endRow - startRow + 1; pc.ColSpan = endColumn - startColumn + 1; } catch { throw new Exception("Impossible to merge the CellAreas"); } }
internal PdfTablePage createTablePage() { int index = this.renderingIndex; double h = this.Rows[index].Height; double oh = 0; while ((h <= this.TableArea.height) && (index < this.rows)) { index++; oh = h; if (index < this.rows) { h += this.Rows[index].Height; } } this.renderingRows = index - this.renderingIndex; this.TableArea.height = (double)oh; PdfTablePage ptp = new PdfTablePage(renderingIndex, renderingIndex + renderingRows - 1, columns); //ptp.stream=""; //caculates areas double y = this.TableArea.posy; for (int rowIndex = this.renderingIndex; (rowIndex < this.renderingIndex + this.renderingRows); rowIndex++) { double x = this.TableArea.posx; for (int columnIndex = 0; columnIndex < this.columns; columnIndex++) { PdfCell pc = this.Cell(rowIndex, columnIndex); double width = pc.Width; pc.area = new PdfArea(this.PdfDocument, x, y, width, pc.Height); x += width; } y += this.Rows[rowIndex].Height; } for (int rowIndex = this.renderingIndex; (rowIndex < this.renderingIndex + this.renderingRows); rowIndex++) { for (int columnIndex = 0; columnIndex < this.columns; columnIndex++) { PdfCell pc = this.Cell(rowIndex, columnIndex); if (!pc.isSpanned) { ptp.cellAreas.Add(pc.row + "," + pc.column, pc.Area); } } } ptp.stream = this.ToLineStream(); ptp.SetArea(); this.renderingIndex = index; this.renderingRows = 0; return(ptp); }
/// <summary> /// returns a specific cell of the row /// </summary> public PdfCell this[int column] { get { PdfCell pc = this.owner.Cell(this.index, column); if (pc == null) { throw new Exception("Column " + column + " does not exist"); } return(pc); } }
internal string ToLineStream() { System.Text.StringBuilder sb = new StringBuilder(); // draw background rectangles for (int rowIndex = this.renderingIndex; (rowIndex < this.renderingIndex + this.renderingRows); rowIndex++) { for (int columnIndex = 0; columnIndex < this.columns; columnIndex++) { PdfCell pc = this.Cell(rowIndex, columnIndex); if (!pc.isSpanned) { if (!pc.transparent) { sb.Append(pc.Area.InnerArea(1).ToRectangle(pc.backgroundColor , pc.backgroundColor).ToLineStream()); } } } } sb.Append("BT\n"); Font actualFont = null; Color actualColor = Color.Black; sb.Append(Utility.ColorrgLine(Color.Black)); for (int rowIndex = this.renderingIndex; (rowIndex < this.renderingIndex + this.renderingRows); rowIndex++) { for (int columnIndex = 0; columnIndex < this.columns; columnIndex++) { PdfCell pc = this.Cell(rowIndex, columnIndex); if (!pc.isSpanned) { PdfTextArea pt = new PdfTextArea(pc.Font, pc.foregroundColor , pc.Area.InnerArea(pc.cellPadding * 2), pc.ContentAlignment, pc.text); if (pc.Font != actualFont) { string actualFontLine = Utility.FontToFontLine(pc.Font); if (!this.PdfDocument.FontNameList.Contains(PdfFont.FontToPdfType(pc.Font))) { this.PdfDocument.AddFont(pc.Font); } sb.Append(actualFontLine); actualFont = pc.Font; } if (pc.foregroundColor != actualColor) { sb.Append(Utility.ColorrgLine(pc.foregroundColor)); actualColor = pc.foregroundColor; } sb.Append(pt.ToLineStream()); } } } sb.Append("ET\n"); if (this.borderWidth > 0) { sb.Append(new PdfRectangle(this.PdfDocument, new PdfArea(this.PdfDocument, 0, 0, 1, 1), this.borderColor , this.borderWidth).ToColorAndWidthStream()); int bt = (int)this.borderType; if ((bt == 1) || (bt == 3) || (bt == 5) || (bt == 6)) { sb.Append(this.TableArea.ToRectangle(this.borderColor, this.borderWidth).ToRectangleStream()); } for (int rowIndex = this.renderingIndex; (rowIndex < this.renderingIndex + this.renderingRows); rowIndex++) { for (int columnIndex = 0; columnIndex < this.columns; columnIndex++) { PdfCell pc = this.Cell(rowIndex, columnIndex); if (!pc.isSpanned) { if (rowIndex != this.renderingIndex) { if ((bt == 6) || (bt == 2) || (bt == 3) || (bt == 7)) { sb.Append(pc.Area.UpperBound(this.borderColor, this.borderWidth).ToLineStream()); } } if (columnIndex != 0) { if ((bt == 6) || (bt == 4) || (bt == 5) || (bt == 7)) { sb.Append(pc.Area.LeftBound(this.borderColor, this.borderWidth).ToLineStream()); } } } } } } return(sb.ToString()); }