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 · 마지막으로 수정됨: 2024/12/11 00:53 저자 이거니맨