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

itextsharp C#:如何在表格单元格内绘制对角线,c#,asp.net-mvc,visual-studio,pdf,itext,C#,Asp.net Mvc,Visual Studio,Pdf,Itext,如何使用itextsharp C#在pdf表格的单元格内绘制对角线? 我想要这样的东西:但在C。根据mkl在评论中的建议,因为那篇文章是用java写的,我不能用C来写,所以您可以尝试使用下面的代码在表格单元格中画一条对角线 首先,请安装nuget软件包iTextSharp 其次,这里是一个完整的代码示例,您可以参考 static void Main(string[] args) { Program p = new Program();

如何使用itextsharp C#在pdf表格的单元格内绘制对角线?
我想要这样的东西:但在C。根据mkl在评论中的建议,因为那篇文章是用java写的,我不能用C来写,所以您可以尝试使用下面的代码在表格单元格中画一条对角线

首先,请安装nuget软件包
iTextSharp

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

 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();
        }
    }
static void Main(字符串[]args)
{
程序p=新程序();
p、 createPdf(“E:\\test.pdf”);
}
公共void createPdf(字符串dest)
{
使用(FileStream stream=newfilestream(dest,FileMode.Create,FileAccess.Write))
{
使用(文档=新文档())
{
PdfWriter writer=PdfWriter.GetInstance(文档,流);
document.Open();
PdfPTable=新的PdfPTable(6);
表.DefaultCell.MinimumHeight=30;
PdfPCell cell=新的PdfPCell();
cell.CellEvent=新的PdfPCellEvent(“重力”、“Occ”);
//cell.setCellEvent(新对角线(“重力”、“Occ”));
表2.AddCell(cell);
表2.AddCell(“1”);
表1.AddCell(“2”);
表1.AddCell(“3”);
表1.AddCell(“4”);
表1.AddCell(“5”);
对于(int i=0;i<5;)
{
table.AddCell(++i.ToString());
表1.AddCell(“”);
表1.AddCell(“”);
表1.AddCell(“”);
表1.AddCell(“”);
表1.AddCell(“”);
}
文件。添加(表);
document.Close();
}
}
}
公共类PdfPCellEvent:IPdfPCellEvent
{
受保护的字符串列;
受保护的字符串行;
公共PdfPCellEvent(字符串列、字符串行)
{
this.columns=列;
this.rows=行;
}
公共空单元格布局(PdfPCell单元格,矩形位置,PdfContentByte[]画布)
{
PdfContentByte canvas=画布[PdfPTable.TEXTCANVAS];
ColumnText.ShowTextAligned(画布,Element.ALIGN_RIGHT,
新短语(列),position.GetRight(2),position.GetTop(12),0;
ColumnText.ShowTextAligned(画布,Element.ALIGN_左,
新短语(行),position.GetLeft(2),position.GetBottom(2),0);
canvas=画布[PdfPTable.LINECANVAS];
canvas.MoveTo(position.Left,position.Top);
canvas.LineTo(position.Right,position.Bottom);
canvas.Stroke();
}
}
结果:


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