2016-05-31 2 views
0

부모 테이블로 사용할 열이 하나있는 주 PdfpTable이 있습니다. 그런 다음 부모 테이블에 동적 # 열로 만든 테이블을 추가합니다.PdfpTable 셀에 중첩 된 PdfpTable의 양쪽에 공백이 있습니다.

각 테이블은 부모 테이블의 행입니다. 몇 가지 사항을 제외하고는 내가 원하는 것을 얻고 있습니다.

1) 테이블에 왼쪽과 오른쪽 모두에 중요한 공백이 추가됩니다. 서브 테이블에서 행 공간을 채우고 싶습니다.

2) 열 너비가 유지되지 않습니다. 각 새 테이블의 첫 번째 열은 보유하고있는 전체 열의 수를 기준으로 너비를 변경합니다.

3) 기본 테이블 폭은 .TotalWidth 패딩을 제거하고, 부모 모두 총 폭을 설정

PdfPTable mainTable = new PdfPTable(1); 
    mainTable.TotalWidth = 1000f; 

     //Iterating through some data, get the count then create tables. 
     PdfPTable subTable = new PdfPTable(colCount); 

//I tried setting the widths to fix issue 2 
    float[] colWidths = new float[colCount]; 
         colWidths[0] = 50f; 
         for (int i = 1; i < colCount; i++) 
         { 
          colWidths[i] = 50f; 
         } 
         subTable.SetWidths(colWidths); 

     PdfPCell cell = new PdfPCell(); 
           cell.AddElement("test"); 
           subTable.AddCell(cell); 

     PdfPCell tblCell = new PdfPCell(); 
          //tblCell.Padding = 0f; 
          //tblCell.PaddingLeft = 0f; 
          //tblCell.PaddingRight = 0f; 
          tblCell.AddElement(subTable); 
          mainTable.AddCell(tblCell); 

나는 각 열의 폭을 설정하려고했습니다

설정에 의해 영향을 보이지 않는다 혼합 된 결과가있는 하위 테이블이 있습니다.

+0

전적으로 대답 할 시간이 없지만 'SetWidths()'세트의 _relative_ 너비 열이 혼란 스럽습니다.따라서 "50, 100"을 넘기면 50 단위와 100 단위를 전달하는 것이 아니라 첫 번째 열이 1/3 (50/(50 + 100))을 얻고 두 번째 열이 2/3 (100/(50 + 100))'이다. 대신에'SetTotalWidth (float [])'를'LockedWidth'와 함께 사용하고 싶을 것입니다. –

답변

0

테이블을 중첩하는 데는 여러 가지 방법이 있지만 각기 다른 접근 방식에는 고유 한 특정 동작이 있습니다. 나는 NestedTables6 예에서 이것을 입증했습니다

먼저 우리가 기본 테이블을 만들 : 우리는 전체 폭을 정의로

PdfPTable mainTable = new PdfPTable(1); 
mainTable.setTotalWidth(1000); 
mainTable.setLockedWidth(true); 

, 우리는 또한 폭을 고정해야합니다. 내 코드는 Java이지만 코드를 C#에 쉽게 적용 할 수 있습니다. 그것은 mainTable.LockedWidth = true;과 같습니다. (저는 C#에 익숙하지 않습니다. 그래서 제 C#이 완전히 올바르지 않으면 용서해야합니다.)

표를 중첩하는 가장 쉬운 방법은 표를 addCell()과 함께 추가하는 것입니다. 그러나이 경우 기본 채우기가 사용됩니다. 즉, 기본 채우기를 0으로 설정해야합니다. 자바에서 mainTable.DefaultCell.Padding = 0;, 그것은 다음과 같이 이루어집니다 : C#에서 그 같은 일이 될 것

mainTable.getDefaultCell().setPadding(0); 
PdfPTable subTable1 = new PdfPTable(5); 
subTable1.setTotalWidth(new float[]{200, 200, 200, 100, 300}); 
subTable1.setLockedWidth(true); 
subTable1.addCell("test 1"); 
subTable1.addCell("test 2"); 
subTable1.addCell("test 3"); 
subTable1.addCell("test 4"); 
subTable1.addCell("test 5"); 
mainTable.addCell(subTable1); 

둥지 두 번째 방법은 테이블, 매개 변수로 테이블과 PdfPCell를 만드는 것입니다. 이 경우 기본 채우기는 0입니다.

PdfPTable subTable2 = new PdfPTable(5); 
subTable2.setTotalWidth(new float[]{200, 100, 200, 200, 300}); 
subTable2.setLockedWidth(true); 
subTable2.addCell("test 1"); 
subTable2.addCell("test 2"); 
subTable2.addCell("test 3"); 
subTable2.addCell("test 4"); 
subTable2.addCell("test 5"); 
PdfPCell cell2 = new PdfPCell(subTable2); 
mainTable.addCell(cell2); 

AddElement() 메서드를 사용하고 있습니다. 그것도 작동하지만, 당신은 0에 패딩을 설정해야합니다 : 나는 천으로 테이블의 전체 폭을 정의

PdfPTable subTable3 = new PdfPTable(5); 
subTable3.setTotalWidth(new float[]{200, 200, 100, 200, 300}); 
subTable3.setLockedWidth(true); 
subTable3.addCell("test 1"); 
subTable3.addCell("test 2"); 
subTable3.addCell("test 3"); 
subTable3.addCell("test 4"); 
subTable3.addCell("test 5"); 
PdfPCell cell3 = new PdfPCell(); 
cell3.setPadding(0); 
cell3.addElement(subTable3); 
mainTable.addCell(cell3); 

참고하고 확실하게하는 것이 그 서브 테이블의 모든 열 너비의 합 1000과 동일합니다. 절대 값을 전달하기 때문에 (상대 값을 전달하는 반면) setTotalWidths() 메서드를 사용했습니다.

최종 결과는 다음과 같습니다 cmp_nested_tables6.pdf

enter image description here

당신이 볼 수 있듯이, 양쪽에는 공백이 없습니다.

+0

감사합니다. 나는 이것을 시험해보고 업데이트 할 것이다. – JWiley

관련 문제