整列交叉

时间:2019-01-17 08:31:05

标签: c# aspose aspose.words

我尝试删除表中的行。线必须位于中心垂直线的所有像元上方。 因此,我将新形状添加到单元格中,如下所示:

var cell = node as Cell;
var width = cell.CellFormat.Width;

var line = new Shape(args.Document, ShapeType.Line);
line.Width = width;
line.HorizontalAlignment = HorizontalAlignment.Center;
line.RelativeVerticalPosition = RelativeVerticalPosition.Paragraph;
line.Top = 5;
line.BehindText = true;
line.WrapType = WrapType.None;

line.StrokeColor = Color.Black;

line.Stroke.LineStyle = ShapeLineStyle.Single;

line.StrokeWeight = 1;
_builder.MoveTo(cell.LastParagraph);
_builder.InsertNode(line);

但是,仅当我在单元格中有单个文本行时,此功能才有效;如果是两个或更多行文本,则我的交叉线不在中心: enter image description here

如何解决?
也许是交叉整行的其他解决方案?

1 个答案:

答案 0 :(得分:0)

您可以在以下代码上构建逻辑,该代码在表中每个单元格的中间插入全角线形。

Document doc = new Document("E:\\temp\\in.docx");
DocumentBuilder builder = new DocumentBuilder(doc);

LayoutCollector collector = new LayoutCollector(doc);
LayoutEnumerator enumerator = new LayoutEnumerator(doc);

foreach (Table table in doc.FirstSection.Body.Tables)
{
    foreach (Row row in table.Rows)
    {
        foreach (Cell cell in row.Cells)
        {
            enumerator.Current = collector.GetEntity(cell.FirstParagraph);
            while (enumerator.Type != LayoutEntityType.Cell)
            {
                enumerator.MoveParent();
            }

            double top = enumerator.Rectangle.Top + (enumerator.Rectangle.Height / 2);
            double left = enumerator.Rectangle.Left;
            double width = enumerator.Rectangle.Width;

            builder.MoveTo(table.NextSibling);

            Shape line = builder.InsertShape(ShapeType.Line, width, 0);
            line.Top = top;
            line.Left = left;

            line.RelativeHorizontalPosition = RelativeHorizontalPosition.Page;
            line.RelativeVerticalPosition = RelativeVerticalPosition.Page;

            line.BehindText = true;
            line.WrapType = WrapType.None;
            line.StrokeColor = Color.Blue;
            line.Stroke.LineStyle = ShapeLineStyle.Single;
            line.StrokeWeight = 1;
        }
    }
}

doc.Save("E:\\temp\\19.1.docx");

希望,有帮助。我和Aspose一起担任开发人员推广人员。