C# Pdfptable正在获取重复的表

C# Pdfptable正在获取重复的表,c#,itext,pdf-generation,C#,Itext,Pdf Generation,我觉得这很有趣,但我不知道我被困在哪里了。 我正在尝试使用itextsharp在PDF文档中创建一个表,并成功地创建了可以看到图像的表 下面是iam用来生成PDF的代码 private static void TestPDF() { Document document = new Document(iTextSharp.text.PageSize.A4, 60, 60, 10, 0); try { PdfWrit

我觉得这很有趣,但我不知道我被困在哪里了。 我正在尝试使用itextsharp在PDF文档中创建一个表,并成功地创建了可以看到图像的表

下面是iam用来生成PDF的代码

 private static void TestPDF()
    {
        Document document = new Document(iTextSharp.text.PageSize.A4, 60, 60, 10, 0);
        try
        {
            PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(@"C:\PdfUpload\" + "testFile" + ".pdf", FileMode.Create));
            document.Open();
            PdfPTable table = new PdfPTable(new float[] { 4, 16, 4, 10, 4, 10, 4, 10, 10, 10, 4, 10, 10, 7, 6, 8 });
            table.TotalWidth = 580;
            //table.WidthPercentage = 120;

            PdfPCell cell = null;

            modifycell(cell, "", ref table, 2, 0);
            modifycell(cell, "Formative Asssessment", ref table, 8, 0);
            modifycell(cell, "Summetive Assessment", ref table, 3, 0);
            modifycell(cell, "Final Result", ref table, 3, 0);

            modifycell(cell, "Year", ref table, 0, 2);
            modifycell(cell, "Module Name", ref table, 0, 2);
            modifycell(cell, "Digital Assessment", ref table, 2, 0);
            modifycell(cell, "Group work", ref table, 2, 0);
            modifycell(cell, "Assignment", ref table, 2, 0);
            modifycell(cell, "Subtotal", ref table, 2, 0);
            modifycell(cell, "Examanation", ref table, 3, 0);
            modifycell(cell, "Final (100%)", ref table, 0, 2);
            modifycell(cell, "Symbol", ref table, 0, 2);
            modifycell(cell, "Status (Pass/Fail)", ref table, 0, 2);

            modifycell(cell, "%", ref table, 0, 0);
            modifycell(cell, "Weighted Controbution (20%)", ref table, 0, 0);
            modifycell(cell, "%", ref table, 0, 0);
            modifycell(cell, "Weighted Controbution (10%)", ref table, 0, 0);
            modifycell(cell, "%", ref table, 0, 0);
            modifycell(cell, "Weighted Controbution (30%)", ref table, 0, 0);
            modifycell(cell, "Weighted Controbution (60%)", ref table, 0, 0);
            modifycell(cell, "Subminimum achieved", ref table, 0, 0);
            modifycell(cell, "%", ref table, 0, 0);
            modifycell(cell, "Weighted Controbution (40%)", ref table, 0, 0);
            modifycell(cell, "Subminimum achieved", ref table, 0, 0);
            table.WriteSelectedRows(0, -1, 8, 700, writer.DirectContent);
            document.Add(table);
            document.Close();
        }
        catch (Exception oException) { string sMessage = oException.ToString(); }
    }

    private static void modifycell(PdfPCell cell, string str, ref PdfPTable table, int Colspan = 0, int RowSpan = 0,
        int Width = 0)
    {
        BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.EMBEDDED);
        Font font = new Font(bf, 6);
        cell = new PdfPCell(new Phrase(str, font));
        if (RowSpan > 0)
            cell.Rowspan = RowSpan;
        if (Colspan > 0)
            cell.Colspan = Colspan;
        if (Width > 0)
            cell.Width = Width;
        cell.HorizontalAlignment = Element.ALIGN_CENTER;
        cell.VerticalAlignment = Element.ALIGN_MIDDLE;
        cell.BackgroundColor = new iTextSharp.text.BaseColor(220, 220, 220);
        cell.Border = 1;
        cell.BorderColorLeft = BaseColor.BLACK;
        cell.BorderWidthLeft = .5f;
        cell.BorderColorRight = BaseColor.BLACK;
        cell.BorderWidthRight = .5f;
        cell.BorderColorBottom = BaseColor.BLACK;
        cell.BorderWidthBottom = .5f;
        table.AddCell(cell);
    }

为什么要添加两次表

使用以下行在绝对位置添加一次:

table.WriteSelectedRows(0, -1, 8, 700, writer.DirectContent);
document.Add(table);
然后,使用以下行再次添加它:

table.WriteSelectedRows(0, -1, 8, 700, writer.DirectContent);
document.Add(table);

表被添加了两次,这并不奇怪。下定决心,删除其中一行。

Hi@Bruno Lowagie就在我开始使用iTextSharp的前一周,我在那里有点困惑,但感谢您的快速回复,效果很好。如果答案解决了您的问题,我们习惯于接受答案。(请参见当前为0的分数旁边的复选标记。)