itextsharp C#:如何在表格单元格内绘制对角线

Posted

技术标签:

【中文标题】itextsharp C#:如何在表格单元格内绘制对角线【英文标题】:itextsharp C#: How to draw Diagonal Line inside Table Cell 【发布时间】:2021-07-22 19:11:38 【问题描述】:

如何使用 itextsharp C# 在 pdf 表格的单元格内绘制对角线? 我想要这样的东西:Splitting table cells diagonally itextsharp 但在 C# 中。因为那篇文章是用java写的,我不能用C#来写

【问题讨论】:

将 Java 代码移植到 C# 非常简单。因此,我想知道,真的是移植阻止了你,还是实际上是移植代码的使用? 并非如此。它给了我很多错误:不存在的 PdfPCellEvent(在 C# 中)。我改变了它,但我有其他错误:“PdfPCell cell = new PdfPCell(); cell.setCellEvent(new Diagonal("Gravity", "Occ"));"这也给了我错误。单元格没有“setCellEvent”。和 canvas.moveTo(position.getLeft(), position.getTop()); canvas.lineTo(position.getRight(), position.getBottom());也不起作用,因为它等待接收一个 int,而不是空 这些都是简单的命名约定问题。 “不存在的 PdfPCellEvent(在 C# 中)” - 在 .Net 中(因此,在 iTextSharp 中)接口名称通常以 I 开头,因此它的 @987654322 @ 那里。 "cell dosen't have 'setCellEvent'" - 在 .Net 方法中通常以大写字母开头。您经常在 .Net 中看到属性,而不是 getter/setter 方法对。在这种情况下,它是一个属性,请尝试 cell.CellEvent"position.getLeft(), ..." - 再次属性,使用position.Left, ... 感谢您的时间(和耐心)。我进行了所有更改,但 cell.CellEvent(new Diagonal("Gravity", "Occ")); -> 错误:不能使用不可调用的成员“PdfPCell.CellEvent”作为方法。知道发生了什么吗? "我仍然有 cell.CellEvent(new Diagonal("Gravity", "Occ"))" - cell.CellEvent 是一个被视为成员变量。因此,您必须在 C# 中使用cell.CellEvent = new Diagonal("Gravity", "Occ") 【参考方案1】:

根据mkl在评论中的建议,可以尝试使用下面的代码在表格单元格中画一条对角线。

首先,请安装nuget-packageiTextSharp

其次,这是一个完整的代码示例,您可以参考。

 static void Main(string[] args)
        
            Program p = new Program();
            p.createPdf("E:\\test.pdf");
        


        public void createPdf(String dest)
        
            using (FileStream stream = new FileStream(dest,FileMode.Create,FileAccess.Write))
            
                using (Document document = new Document())
                
                    PdfWriter writer = PdfWriter.GetInstance(document, stream);
                    document.Open();
                    PdfPTable table = new PdfPTable(6);
                    table.DefaultCell.MinimumHeight=30;
                    PdfPCell cell = new PdfPCell();
                    cell.CellEvent = new PdfPCellEvent("Gravity", "Occ");
                    //cell.setCellEvent(new Diagonal("Gravity", "Occ"));
                    table.AddCell(cell);
                    table.AddCell("1");
                    table.AddCell("2");
                    table.AddCell("3");
                    table.AddCell("4");
                    table.AddCell("5");
                    for (int i = 0; i < 5;)
                    
                        table.AddCell((++i).ToString());
                        table.AddCell("");
                        table.AddCell("");
                        table.AddCell("");
                        table.AddCell("");
                        table.AddCell("");
                    
                    document.Add(table);
                    document.Close();
                    
                
            

        



public class PdfPCellEvent : IPdfPCellEvent
    
        protected String columns;
        protected String rows;

        public PdfPCellEvent(String columns, String rows)
        
            this.columns = columns;
            this.rows = rows;
        
        public void CellLayout(PdfPCell cell, Rectangle position, PdfContentByte[] canvases)
        
            PdfContentByte canvas = canvases[PdfPTable.TEXTCANVAS];
            ColumnText.ShowTextAligned(canvas, Element.ALIGN_RIGHT,
                new Phrase(columns), position.GetRight(2), position.GetTop(12), 0);
            ColumnText.ShowTextAligned(canvas, Element.ALIGN_LEFT,
                new Phrase(rows), position.GetLeft(2), position.GetBottom(2), 0);
            canvas = canvases[PdfPTable.LINECANVAS];
            canvas.MoveTo(position.Left, position.Top);
            canvas.LineTo(position.Right, position.Bottom);
            canvas.Stroke();
        
    

结果:

【讨论】:

以上是关于itextsharp C#:如何在表格单元格内绘制对角线的主要内容,如果未能解决你的问题,请参考以下文章

Cocoa:如何让表格视图在每个单元格中绘制自定义视图

c#导出excel,设置单元格存储格式为数值类型

如何在表格视图单元格内创建集合视图

vb.net中如何获得DataGridView单元格内容

当在同一个单元格内单击按钮时,如何在自定义表格视图单元格内隐藏/显示特定视图

如何在表格单元格内垂直对齐 div?