사용자 도구

사이트 도구


android:pdfdocument:commandmirroring
commandmirroring

문서의 이전 판입니다!


목적

저번 포스트에서는 각 구역을 나누어 머릿말(Header)과 꼬리말(Footer)를 만들어 보았는데, 전체 페이지수를 알려면 일단 모두 그려보아야만 알 수 있으므로 불가피하게 본문 부분을 비트맵으로 저장하여 PDF Canvas에 그려주는 방식을 택하였다.

그런데 이렇게 하면 본문 부분은 비트맵에 불과하므로 확대를 하면 글자가 깨지는 문제점이 생긴다.

따라서 다음과 같이 본문 부분 역시 벡터로 그리려고 한다.

본문 역시 벡터로 그려진 PDF
Vector1 Vector2

명령어 모음 만들기

1. 원리

지금까지 PDF로 그린 것을 명령어로 저장하여 다시 반복하려는 이유는 페이지가 여러장일 때에는 구역화(헤더와 푸터, 본문)를 할 때에전체 장수를 미리 알 수가 없기 때문이다. 즉, 한번 싹 다 그려야만 전체의 페이지수를 알 수 있기 때문에, 다시 반복하는 것이다.

그런데 지금까지 PDF를 그릴 떄에는, 정해진 사이즈의 캔버스 위에 특정한 좌표에다가 드로잉을 했다. 그리고 그 드로잉에는 인쇄될 글자들이 포함된다. 따라서 좌표와 명령어, 그리고 문구를 변수로 넘겨주면 명령어의 모음이 된다.

2. 구조

따라서 명령어의 구조를 다음과 같이 만들었다.

// 명령어 구조
data class COMMAND(
    val command : String,
    val page : Int,
    val textFirst : String,
    val textSecond : String,
    val pos : POS
)

3. 명령어 집합 선언

다음과 같이 명령어 집합을 선언했다.

    // 명령어 집합 
    val commandList : ArrayList<COMMAND> = arrayListOf()
    var isRecording = true

isRecording을 통하여 명령어를 기록하는 스위치를 만들었다. 이에 대하여는 다음 항목에서 서술하겠다.

4. isRecording을 통한 제어

가. 제어 함수 만들기

isRecording이라는 스위치를 통하여, 명령어를 저장할 때에 현재 상태의 변화(예 : 좌표의 변화)를 적용할지 여부를 고를 수 있게 했다.

isRecording은 다음의 함수로 호출할 것이다.

    // Recording commannd
    private fun recording(recoding : Boolean) {
        isRecording = recoding
    }
로그인하면 댓글을 남길 수 있습니다.

android/pdfdocument/commandmirroring.1734703354.txt.gz · 마지막으로 수정됨: 2024/12/20 23:02 저자 이거니맨