itextsharp C#:如何在表格单元格内绘制对角线
如何使用itextsharp C#在pdf表格的单元格内绘制对角线?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();
我想要这样的东西:但在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”)
。