2016-08-17 2 views
2

Table 및 Cell 클래스를 사용하여 iText 7에서 테이블을 만들면 기본적으로 테이블 셀에 내장 된 패딩이 제공됩니다. 생성 된 문서를 보면 알 수 있듯이 약 2 개의 PDF 단위로 보입니다.iText 7에서 기본 셀 패딩을 설정 및 검색하는 방법

계산에 사용하기 위해이 값을 검색 할 수있는 방법이 있습니까? 또한 모든 셀에서 개별적으로 설정하지 않고 모든 테이블의 모든 셀에서 내 패딩을 사용할 수 있도록이 기본값을 변경할 수있는 방법이 있습니까?

답변

3

iText 7: Building Blocks 자습서를 살펴보십시오.

Before we start 섹션에서 모든 빌딩 블록은 ElementPropertyContainer이라는 클래스에서 파생 된 것으로 나타났습니다. 이 클래스는 속성의 컨테이너입니다.

Cell 클래스의 경우에는 패딩을 정의하는 속성 집합이 있습니다. 이러한 속성이 같은 일반적인 방법합니다 (AbstractElement 클래스의 방법을 사용하여) 얻을 수 있습니다 :

System.out.println(cell.getProperty(Property.PADDING_LEFT)); 
System.out.println(cell.getProperty(Property.PADDING_RIGHT)); 
System.out.println(cell.getProperty(Property.PADDING_TOP)); 
System.out.println(cell.getProperty(Property.PADDING_BOTTOM)); 

를 왜 어려운 당신은 또한 단순히 BlockElement 클래스에서 사용할 수 있습니다 편리한 방법을 사용할 수 있는지 확인하십시오

를 당신이 튜토리얼에서 볼 수 있듯이
System.out.println(cell.getPaddingLeft()); 
System.out.println(cell.getPaddingRight()); 
System.out.println(cell.getPaddingTop()); 
System.out.println(cell.getPaddingBottom()); 

Cell 클래스는 BlockElement 클래스의 서브 클래스입니다. BlockElementAbstractElement 클래스의 하위 클래스입니다. AbstractElement 클래스는 ElementPropertyContainer 클래스의 하위 클래스입니다.

패딩 (또는 너무 기울어 진 경우 여백)을 변경하려면 해당 튜토리얼의 chapter 5을 읽으십시오. 그것은 예는, CellMarginPadding 임명했다 : 나는 눈을 약간 아픈 경우 죄송하지만, 사용하는 색상이처럼 보였다

enter image description here

:

public void createPdf(String dest) throws IOException { 
    PdfDocument pdf = new PdfDocument(new PdfWriter(dest)); 
    Document document = new Document(pdf); 
    Table table = new Table(new float[]{2, 1, 1}); 
    table.setBackgroundColor(Color.ORANGE); 
    table.setWidthPercent(80); 
    table.setHorizontalAlignment(HorizontalAlignment.CENTER); 
    table.addCell(
     new Cell(1, 3).add("Cell with colspan 3") 
      .setPadding(10).setMargin(5).setBackgroundColor(Color.GREEN)); 
    table.addCell(new Cell(2, 1).add("Cell with rowspan 2") 
     .setMarginTop(5).setMarginBottom(5).setPaddingLeft(30) 
     .setFontColor(Color.WHITE).setBackgroundColor(Color.BLUE)); 
    table.addCell(new Cell().add("row 1; cell 1") 
     .setFontColor(Color.WHITE).setBackgroundColor(Color.RED)); 
    table.addCell(new Cell().add("row 1; cell 2")); 
    table.addCell(new Cell().add("row 2; cell 1").setMargin(10) 
     .setFontColor(Color.WHITE).setBackgroundColor(Color.RED)); 
    table.addCell(new Cell().add("row 2; cell 2").setPadding(10) 
     .setFontColor(Color.WHITE).setBackgroundColor(Color.RED)); 
    document.add(table); 
    document.close(); 
} 

이는 것처럼 보이는 것입니다 마진과 패딩의 차이점을 설명하는 가장 좋은 방법입니다.

대부분의 속성이 상속됩니다. 예를 들어, 글꼴을 Div으로 설정하면 해당 글꼴이 Div에 추가 된 모든 요소의 기본 글꼴이됩니다. 그러나 몇 가지 예외가 있습니다. 패딩은 그 중 하나입니다. 이것은 Cell 클래스에 특정 속성의 기본 값이 정의 된 방법입니다

@Override 
public <T1> T1 getDefaultProperty(int property) { 
    switch (property) { 
     case Property.BORDER: 
      return (T1) (Object) DEFAULT_BORDER; 
     case Property.PADDING_BOTTOM: 
     case Property.PADDING_LEFT: 
     case Property.PADDING_RIGHT: 
     case Property.PADDING_TOP: 
      return (T1) (Object) 2f; 
     default: 
      return super.<T1>getDefaultProperty(property); 
    } 
} 

당신이 볼 수 있듯이이, 전체 셀 패딩 값이 없습니다; 패딩은 부수적으로 기본적으로 동일한 4 개의 값으로 구성됩니다.

Cell에 대해 기본값과 다른 패딩을 정의하지 않으려면 Cell의 하위 클래스를 만들고 MyCustomCell이라고 부릅니다. getDefaultProperty() 클래스를 재정 의하여 원하는 패딩을 사용한다는 점에서 사용자 정의하십시오.

자습서에서는 둥근 모서리를 도입 할 때마다 렌더러를 선언 할 필요가 없도록 모서리가 둥근 경계선이있는 셀을 그리는 하위 클래스의 예를 찾을 수 있습니다.

본인은 해당 문서의 원본 독자입니다. 난 당신이 유용

+0

죄송합니다. 브루노,하지만 이것은 내 질문에 대답하지 않습니다. 나는 기본적으로 모든 셀에 개별적으로 설정해야하는 기본 셀 패딩 _without_을 설정하는 방법을 요청했습니다. 나는 또한 기본값을 가져 오는 방법을 요청했지만 getPaddingLeft() (또는 무엇이든)는이 값을 반환하지 않습니다. 대신 생성 된 PDF에 기본 채우기가 명확하게 표시 되어도 null을 반환합니다. 2 단위와 비슷한 것. 명시 적으로 0으로 설정하면 암시 적 패딩이 사라집니다. –

+0

방금 ​​편집 한 것을 보았습니다.이 질문의 두 번째 부분에 대답하려고 시도합니다.이 작업을 수행하기 위해 셀을 하위 클래스로 채워야한다는 점이 조금 실망 스럽지만 액세스 할 수있는 방법이없는 것으로 보입니다. 암시 적 기본값을 변경 하시겠습니까? –

+0

그리고 모든 셀에 렌더러를 설정하지 않아도되는 'Cell'의 하위 클래스 예제를 제공했습니다. 또한 상자 *에 기본 덧씌움 *이 없음을 이해하지 못하는 것 같습니다. 패딩은 동일 할 수있는 네 개의 값으로 구성되지만 동일 할 필요는 없습니다. –

0

나는 패딩없이 테두리로 기본 설정 @Bruno Lowagie 재정의 경로에 따라 C#으로 이런 짓을 iText를 7 년 Cell 및 기타 개체에 대한 이들과 다른 질문에 대한 답변이되기를 바랍니다 :

public class BorderlessCell : Cell 
    { 
     public BorderlessCell(int rowSpan, int colSpan) : base(rowSpan, colSpan) { } 
     public BorderlessCell() : base() { } 
     public override T1 GetDefaultProperty<T1>(int property) 
     { 
      switch (property) 
      { 
       case Property.BORDER: 
        return (T1)(Object)(Border.NO_BORDER); 
       case Property.PADDING_BOTTOM: 
       case Property.PADDING_LEFT: 
       case Property.PADDING_RIGHT: 
       case Property.PADDING_TOP: 
        return (T1)(Object)(0); 
       default: 
        return base.GetDefaultProperty<T1>(property); 
      } 
     } 
    } 
관련 문제