# PDF 표 그리기

## Content

**PdfDocument**클래스에서는 테이블을 그릴 수도 있습니다.
이를 위해서는 **PdfPaths** 객체의 **rect** 와 **stroke** 메서드를 사용해야 합니다. **PdfPaths** 객체는 **PdfDocument.paths** 속성을 통해 접근할 수 있습니다.

**rect**메서드는 여러 인수를 받으며, 그 중에는 사각형의 시작 좌표(x, y)와 사각형의 너비와 높이 등도 포함됩니다. **stroke** 메서드는 매개변수 없이 호출하여 사각형 경로를 그릴 수 있습니다. 이 두 메서드는 다음과 같이 체이닝하여 사용할 수 있습니다:

```javascript
doc.paths
    .rect(x, y, colWidth, rowHeight)
    .stroke();
```

**drawText** 메서드는 셀에 텍스트를 그릴 때 사용되며, 텍스트의 크기도 정의할 수 있습니다. 또한, 만약 한 행이 페이지 크기를 초과하면 **addPage** 메서드를 사용하여 새 페이지를 추가할 수 있습니다.

#### 예제

이 코드 예시는 50개의 행과 3개의 열로 구성된 테이블을 생성합니다. 데이터 컬렉션에서 텍스트를 셀에 삽입하며, 페이지 오버플로우도 고려합니다.

```javascript
let colWidth = 100, 
    rowHeight = 18, 
    data = getData(50), 
    dataKeyMap = ['id', 'product', 'country'], 
    y = 0;

for (let i = 0; i < 50; i++) {
    for (let j = 0; j < dataKeyMap.length; j++) {
        let x = j * colWidth;
        
        doc.paths
            .rect(x, y, colWidth, rowHeight)
            .stroke();
        
        doc.drawText(data[i][dataKeyMap[j]] + '', x + 2, y + 2, {
            height: rowHeight,
            width: colWidth
        });
    }
    
    y += rowHeight;
    
    if (y >= doc.height) {
        y = 0;
        doc.addPage();
    }
}
```

##### 결과 

![pdf-table-page-overflow](https://gcdocumentsitekrblob.blob.core.windows.net/document-site-files/images/4153b498-0e9e-452c-b1b8-6a8130043972/pdf-table-page-overflow.682978.png?width=500)