사용자 도구

사이트 도구


android:pdfdocument:measuringparagraph
measuringparagraph

문서의 이전 판입니다!


목적

문구가 좌표상에서 어떻게 위치하는지를 파악하도록 할 것이다.

글자가 페이지상의 어느 좌표에 위치하는지를 알면, 페이지를 나누는 것이 가능해질 것이다.

좌표화 하기

1. 2차원 좌표계 클래스 만들기

다음과 같이 2차원 좌표계 클래스를 만들었다.

// 2차원 위치 POS
data class POS(private val x : Int = 0, private val y : Int = 0) {
    var X: Int = x
    var Y: Int = y
 
    operator fun plus(increment : POS) : POS {
        return POS(X + increment.Y, Y + increment.Y)
    }
 
    operator fun minus(decrease : POS) : POS {
        return POS(X - decrease.Y, Y - decrease.Y)
    }
}

연산자에 대한 오버로딩은 앞에 operator를 붙이면 된다. 연사자 오버로딩을 통하여 2차원 좌표계의 덧셈을 편하게 만들었다. 위의 코드를 참조하라.

2. 좌표 정의

이전 포스팅에서는 A4 용지의 크기를 포인트 단위로 정했었다. 이러한 A4의 크기 내에서 머리말, 꼬리말, 좌우여백을 다음과 같이 만들었다. 그리고 글을 쓸 시작 시점은 당연히 본문 부분의 좌측 최상단일 것이다. 본문부분의 좌측 최상단은 머리말과 좌측 여백만큼 오프셋을 계산하면 될 것이다.

    // 여백
    val marginTop = 42
    val marginBottom = 50
    val marginLeft = 47
    val marginRight = 48
 
    // 좌표 위치
    private var totalPOS = POS(marginLeft, marginTop)
    private var currentPOS = POS(marginLeft, marginTop)

totalPOS은 페이지 내의 상대위치가 아닌 절대 위치를 말한다. 그리고 currentPOS은 페이지 내에서의 상대위치를 가리키는 좌표이다.

3. 페이지 내 구역을 살펴보기

위와 같이 4개의 꼭지점을 만들어주면 본문의 위치가 결정되고 아래와 같이 각 구역이 나뉘어진다.

위치 이동 함수 만들기

아래의 두개의 함수로 글자의 위치를 조정할 것이다.

1. 줄 바뀜 함수 만들기

워드프로세서에서 엔터를 치면 줄을 한칸 아래로 내리는 함수를 대충 만들어 보았다.

    // Line Break : Veritcal Movement
    fun linefeed() {
        totalPOS += POS(0, 50)
        currentPOS += POS(0, 50)
    }

2. 스페이스 함수 만들기

한칸 오른쪽으로 옮기는 함수를 만들었다.

    // Space  : Horizontal Movement
    fun space() {
        totalPOS += POS(20, 0)
        currentPOS += POS(20, 0)
    }

글자의 경계선 확인하기

로그인하면 댓글을 남길 수 있습니다.

android/pdfdocument/measuringparagraph.1733557081.txt.gz · 마지막으로 수정됨: 2024/12/07 16:38 저자 이거니맨