android:pdfdocument:drawingtagble
drawingtagble
차이
문서의 선택한 두 판 사이의 차이를 보여줍니다.
| 양쪽 이전 판이전 판다음 판 | 이전 판 | ||
| android:pdfdocument:drawingtagble [2024/12/11 00:53] – 표 그리기 이거니맨 | android:pdfdocument:drawingtagble [2024/12/11 01:32] (현재) – 이거니맨 | ||
|---|---|---|---|
| 줄 4: | 줄 4: | ||
| - | {{: | + | {{: |
| 줄 14: | 줄 14: | ||
| 또다른 방법은 박스를 여러개 그리는 것이다. 이를테면 한 줄에 2개의 칸이 있는 2X1 표를 그린다고 해보자. 그러면 긴 박스와 작은 박스를 겹쳐서 그리면 될 것이다. 나는 선을 그리는 방법보다는 박스를 겹치는 방법을 선택했다. | 또다른 방법은 박스를 여러개 그리는 것이다. 이를테면 한 줄에 2개의 칸이 있는 2X1 표를 그린다고 해보자. 그러면 긴 박스와 작은 박스를 겹쳐서 그리면 될 것이다. 나는 선을 그리는 방법보다는 박스를 겹치는 방법을 선택했다. | ||
| - | | + | 왜냐하면 위의 |
| | | ||
| 줄 20: | 줄 20: | ||
| 표를 그리려면 기준점이 있어야 한다. 좌측 상단을 기준점으로 잡는 것이 통상적이고, | 표를 그리려면 기준점이 있어야 한다. 좌측 상단을 기준점으로 잡는 것이 통상적이고, | ||
| + | |||
| + | {{: | ||
| + | |||
| + | |||
| + | 따라서 다음의 코드가 될 것이다. | ||
| <code kotlin> | <code kotlin> | ||
| 줄 44: | 줄 49: | ||
| val endOfBody = (PDF_PAGE_WIDTH - marginRight).toFloat() | val endOfBody = (PDF_PAGE_WIDTH - marginRight).toFloat() | ||
| </ | </ | ||
| + | |||
| + | 이러한 셀들을 여러개를 연결하면 표가 될 것이다. | ||
| + | |||
| + | |||
| + | ==== 3. 셀안에 글자를 집어 넣기 ==== | ||
| + | |||
| + | 각 셀의 좌측상단을 기준점으로 잡았으므로 글자는 이를 기준으로 상대 좌표를 구하면 된다. | ||
| + | |||
| + | 만약 셀안에 가로정렬을 한다고 해보자. 셀 안의 가운데 점을 잡아야 하므로 | ||
| + | |||
| + | 가로좌표는 기준점 + (cellwidth) / 2가 될 것이다. 세로좌표는 기준점 + (cellHeight) / 2가 될 것이다. | ||
| + | |||
| + | 따라서 셀 안에 글자를 집어 넣는 것은 다음 코드가 될 것이다. | ||
| + | |||
| + | <code kotlin> | ||
| + | // Text | ||
| + | canvas.drawText(header, | ||
| + | canvas.drawText(body, | ||
| + | </ | ||
| + | |||
| + | 참고로 세로좌표의 경우에는 오프셋을 추가하였는데, | ||
| + | |||
| + | 안드로이드의 폰트메트릭스에 대해서는 [[android: | ||
| + | |||
| + | |||
| + | |||
| + | ===== 결론 ===== | ||
| + | |||
| + | 이 포스팅의 서두부분에 나온 표를 그린다면 다음의 코드를 사용하면 될 것이다. | ||
| + | |||
| + | <file kotlin tablePlaintiff.kt> | ||
| + | // 표 : 고소인 | ||
| + | fun tablePlaintiff(canvas: | ||
| + | |||
| + | /** 변수 **/ | ||
| + | val cellHeight = 30 // Row Height : 40 | ||
| + | val columnWidth = 60f // 내부선 | ||
| + | val secondColumn = 260f // 두번쨰 열 | ||
| + | val vcOffset = 4f // 세로 중간을 맞추기 위한 오프셋 | ||
| + | |||
| + | plaintiffList? | ||
| + | // 첫째 행 | ||
| + | // Rect | ||
| + | canvas.drawRect(currentPOS.X.toFloat(), | ||
| + | canvas.drawRect(currentPOS.X.toFloat(), | ||
| + | canvas.drawRect(currentPOS.X.toFloat() + secondColumn, | ||
| + | |||
| + | // Text | ||
| + | canvas.drawText(" | ||
| + | canvas.drawText(it.pName, | ||
| + | canvas.drawText(" | ||
| + | canvas.drawText(it.socialNumber, | ||
| + | |||
| + | |||
| + | // 둘재 행 | ||
| + | // Rect | ||
| + | canvas.drawRect(currentPOS.X.toFloat(), | ||
| + | canvas.drawRect(currentPOS.X.toFloat(), | ||
| + | |||
| + | // Text | ||
| + | canvas.drawText(" | ||
| + | canvas.drawText(it.pAddress, | ||
| + | |||
| + | // 셋쨰 행 | ||
| + | // Rect | ||
| + | canvas.drawRect(currentPOS.X.toFloat(), | ||
| + | canvas.drawRect(currentPOS.X.toFloat(), | ||
| + | |||
| + | // Text | ||
| + | canvas.drawText(" | ||
| + | canvas.drawText(it.pPhoneNumber, | ||
| + | |||
| + | // 아래 여백 | ||
| + | totalPOS += POS(0, cellHeight * 3 + 20) | ||
| + | currentPOS += POS(0, cellHeight * 3 + 20) | ||
| + | }?:{ | ||
| + | |||
| + | canvas.drawRect(currentPOS.X.toFloat(), | ||
| + | canvas.drawText(" | ||
| + | |||
| + | // 아래 여백 | ||
| + | linefeed() | ||
| + | } | ||
| + | |||
| + | } | ||
| + | </ | ||
android/pdfdocument/drawingtagble.1733845987.txt.gz · 마지막으로 수정됨: 저자 이거니맨
