android:pdfdocument:drawingtagble
drawingtagble
문서의 이전 판입니다!
소개
표 그리기
1. 개념
표를 그릴려면 어떻게 해야 할까? 여러가지 방법이 있을 것인데 하나는 큰 박스를 넣은 후 그 안에 선을 그리는 방법이 있을 것이다. 또다른 방법은 박스를 여러개 그리는 것이다. 이를테면 한 줄에 2개의 칸이 있는 2×1 표를 그린다고 해보자. 그러면 긴 박스와 작은 박스를 겹쳐서 그리면 될 것이다. 나는 선을 그리는 방법보다는 박스를 겹치는 방법을 선택했다.
왜냐하면 위의 그림에서도 보듯이 셀에 음영을 넣는 경우가 생길텐데, 음영을 넣으려면 이 역시 박스를 그리는 방식으로 진행된다. 따라서 선을 그리고 음영을 넣는다는 것은 중복된 일을 하는 것가 마차가지가 되는 것이다. 그리고 박스를 중첩하는 방식으로 표를 만들면, 각 셀 안에 들어간 텍스트의 위치를 계산하는 것도 쉽다.
2. 셀 그리기
표를 그리려면 기준점이 있어야 한다. 좌측 상단을 기준점으로 잡는 것이 통상적이고, 가장 이해하기 쉬울 것이다. 좌측 상단을 기준으로 2개의 박스를 겹쳐서 1줄짜리 표를 그리면 다음과 같이 될 것이다.
/** 변수 **/ val cellHeight = 30 // Row Height : 40 val columnWidth = 180f // 내부선 val vcOffset = 4f // 세로 중간을 맞추기 위한 오프셋 // Rect canvas.drawRect(currentPOS.X.toFloat(), currentPOS.Y.toFloat(), endOfBody, currentPOS.Y.toFloat() + cellHeight, linePaint) // 첫쨰 줄 canvas.drawRect(currentPOS.X.toFloat(), currentPOS.Y.toFloat(), currentPOS.X.toFloat() + columnWidth, currentPOS.Y.toFloat() + cellHeight, linePaint) // 제목박스
여기서 endOfBody는 본문 영역의 너비를 말한다. 사전에 다음과 같이 정의되었다.
// 여백 val marginTop = 42 val marginBottom = 50 val marginLeft = 47 val marginRight = 48 // end of 본문 val endOfBody = (PDF_PAGE_WIDTH - marginRight).toFloat()
android/pdfdocument/drawingtagble.1733845987.txt.gz · 마지막으로 수정됨: 2024/12/11 00:53 저자 이거니맨
로그인