2017-03-14 1 views
-1

데이터베이스에서 데이터를 읽고 iTextSharp를 사용하여 테이블을 채 웁니다. 당신이 볼 수 있듯이, 나는 데이터를 통해 루프 'foreach는'을 사용하고 테이블을 채우는거야iTextSharp로 셀 정렬 및 배경 행 색상 설정

var db = Database.Open("NewDatabase"); 
var sql = 
    @"SELECT FullName, 
       [2017-01-02], [2017-01-03], [2017-01-04], 
       ([2017-01-02] + [2017-01-03] + [2017-01-04]) as 'DatesSum', 
       [Week1] 
    FROM  [NewTable]"; 

var data = db.Query(sql); 
var columns = data.First().Columns;                   
var doc = new Document();                     
PdfWriter.GetInstance(doc, Response.OutputStream);               
doc.Open(); 
PdfPTable table = new PdfPTable(new float[] {30f, 10f, 10f, 10f, 10f, 10f}); 

foreach(var row in data)               
{ 
    foreach(var column in columns) 
    { 
     table.AddCell(new Phrase(row[column] != null ? row[column].ToString() : string.Empty)); 
    } 
} 

doc.Add(table); 
doc.Close(); 

: 이것은 내가 데이터를 읽고 있어요 방법입니다. 이것이 내가 테이블을 채우는 유일한 방법입니다 (저는 iTextSharp를 처음 접했습니다).

저는 데이터를 셀의 가운데에 정렬하려고했습니다. 또한 행의 색상을 다른 행마다 번갈아 사용하고 싶습니다. 나는 아무 결과, 루프 내부에이 같은 일을 시도하고있다 :

row[column].HorizontalAlignment = 1; 

참조 : https://www.mikesdotnetting.com/article/205/exporting-the-razor-webgrid-to-pdf-using-itextsharp

답변

3

설정 PdfPCellHorizontalAlignmentBackgroundColor 속성.

샘플 데이터 :

static readonly int[,] data = new int[,] 
{ 
    { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } 
}; 
static readonly int rows = data.GetLength(0); 
static readonly int columns = data.GetLength(1); 

PDF 파일을 만듭니다

var table = new PdfPTable(2) 
{ 
    HorizontalAlignment = Element.ALIGN_LEFT, 
    WidthPercentage = 50 
}; 
var cell = new PdfPCell() {HorizontalAlignment = Element.ALIGN_CENTER}; 
using (var stream = new MemoryStream()) 
{ 
    using (var document = new Document()) 
    { 
     PdfWriter.GetInstance(document, stream); 
     document.Open(); 

     for (int i = 0; i < rows; ++i) 
     { 
      cell.BackgroundColor = i % 2 == 0 
       ? BaseColor.LIGHT_GRAY : BaseColor.WHITE; 
      for (int j = 0; j < columns; ++j) 
      { 
       cell.Phrase = new Phrase(data[i, j].ToString()); 
       table.AddCell(cell); 
      } 
     } 
     document.Add(table); 
    } 
    File.WriteAllBytes(OUTPUT, stream.ToArray()); 
} 

출력 :

enter image description here

+0

덕분에 kuujinbo. 내 질문과 같이 데이터베이스 쿼리에 어떻게 답을 적용합니까? 이 정적 읽기 전용 int 행 = data.GetLength (0);'참조하지만 내 케이스 (데이터베이스에서 얻은 동안 자신의 테이블을 만든) 나머지 번역하는 방법을 모르겠습니다. 아니면 내 'foreach' 루프 내에서이 작업을 수행하는 방법을 알고있을 것입니까? –