2017-03-07 128 views
0

我觉得这很有趣,但我不知道Iam卡在哪里。 荫尝试使用iTextSharp的创建PDF文档中的表格,并成功的在创建表,你可以看到图像Pdfptable获取重复表

Duplicate table

下面是用来生成PDF的代码IAM。

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); 
    } 

回答

0

为什么添加表格两次?

您在绝对位置与该行一次添加:

document.Add(table); 

它不应该感到惊讶,你该表是:

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

然后你这一行添加它第二次增加了两次。下定决心,并删除其中的一行。

+0

Hi @Bruno Lowagie在我开始使用iTextSharp之前一周,我对此感到困惑,但是感谢你的快速回复,这很好。 – shiva

+0

如果它解决了您的问题,则接受该答案是自定义的。 (查看当前0分数旁边的复选标记) –