2017-02-02 2 views
0

Я пытаюсь добавить данные из файла csv в определенном формате в pdf-файл. Проблема заключается в том, что я успешно смог добавить данные, но по какой-то причине строки между строками таблицы не рисуются в моем pdf-документе. Я действительно потерялся, так как не знаю, что я могу делать неправильно.Стол Itextsharp не рисовал линии в C#?

Это то, что я пытался до сих пор: -

using System; 
using System.Web; 
using System.Web.UI; 
using TikaOnDotNet.TextExtraction; 
using iTextSharp.text; 
using iTextSharp.text.pdf; 
using System.IO; 
using Excel; 
using System.Data; 
using System.Collections.Generic; 

namespace Project 
{ 

    public partial class Default : System.Web.UI.Page 
    { 
     int y; 
     string[] res = null; 

     public void button1Clicked(object sender, EventArgs args) 
     { 
      button1.Text = "You clicked me"; 
      DPdfView v = new DPdfView(); 
      res = v.ReadCSV().ToArray(); 
      generatepdffile(res); 


     } 

     protected void generatepdffile(string[] res) 
     { 

      Document doc = new Document(); 

      PdfWriter.GetInstance(doc, new FileStream(Server.MapPath("file9.pdf"), FileMode.Create)); 
      doc.Open(); 
      PdfPTable table = new PdfPTable(7); 

      PdfPCell c1 = new PdfPCell(); 
      PdfPCell c2 = new PdfPCell(); 
      PdfPCell c3 = new PdfPCell(); 
      PdfPCell c4 = new PdfPCell(); 
      PdfPCell c5 = new PdfPCell(); 
      PdfPCell c6 = new PdfPCell(); 
      PdfPCell c7 = new PdfPCell(); 
      String con = null; 
      for (int i= 0;i<res.Length;i++) 
      { 
       List<String> col = new List<String>(); 

       foreach (string line in res[i].ToString().Split('|')) 
       { 
        con = res[i]; 
        col.Add(line); 
       } 

       string[] columns = col.ToArray(); 

        c1.AddElement(new Phrase(columns[0])); 
        c2.AddElement(new Phrase(columns[1])); 
        c3.AddElement(new Phrase(columns[2])); 
        c4.AddElement(new Phrase(columns[3])); 
        c5.AddElement(new Phrase(columns[4])); 
        c6.AddElement(new Phrase(columns[5])); 
        c7.AddElement(new Phrase(columns[6])); 

       table.Rows.Add(new PdfPRow(new PdfPCell[] { c1, c2, c3, c4, c5, c6, c7 })); 



      } 
      AddParagraph(doc, iTextSharp.text.Element.ALIGN_CENTER, _largeFont, table); 
      AddParagraph(doc, iTextSharp.text.Element.ALIGN_CENTER, _largeFont, new Chunk(con)); 

      doc.Close(); 
     } 

     private void AddParagraph(Document doc, int alignment, iTextSharp.text.Font font, iTextSharp.text.IElement content) 
     { 
      Paragraph paragraph = new Paragraph(); 
      paragraph.SetLeading(0f, 1.2f); 
      paragraph.Alignment = alignment; 
      paragraph.Font = font; 
      paragraph.Add(content); 
      doc.Add(paragraph); 
     } 

     private Font _largeFont = new Font(Font.FontFamily.HELVETICA, 18, Font.BOLD, BaseColor.BLACK); 

    } 
} 

Это как мой файл выглядит сейчас:

https://postimg.org/image/vbn3ui2qh/

+0

Я посмотрел на ваш код, и я не понимаю. Почему вы это делаете: 'table.Rows.Add (новый PdfPRow (новый PdfPCell [] {c1, c2, c3, c4, c5, c6, c7})):' Это не имеет никакого смысла, не так ли? Вы прочитали какую-либо документацию? (По-видимому, нет, иначе вы бы не использовали объект 'PdfPow'.) –

ответ

1

Ваш код занимает слишком много времени. Уменьшите его до:

PdfPTable table = new PdfPTable(7); 
for (int i= 0;i<res.Length;i++) 
{ 
    List<String> col = new List<String>(); 
    foreach (string line in res[i].ToString().Split('|')) 
    { 
     table.AddCell(new Phrase(line)); 
    } 
} 
document.Add(table); 

Как вы можете видеть, это намного короче, чем у вас.

Я не понимаю, почему:

  • Вы создаете List<String> col когда все, что вам нужно поставить string значения в таблице.
  • Для создания строки используется класс PdfPRow. Я являюсь # 1 производителем документации iText, и я не написал никакой документации, которая верит, что вы должны использовать класс PdfRow.
  • Вы разместили PdfPTable внутри Paragraph. Это не обязательно. Если вы так думаете, объясните, почему вы так думаете, и мы объясним, как вы можете достичь того, чего хотите, без использования Paragraph.