android:pdfdocument:commandmirroring
commandmirroring
차이
문서의 선택한 두 판 사이의 차이를 보여줍니다.
| 양쪽 이전 판이전 판다음 판 | 이전 판 | ||
| android:pdfdocument:commandmirroring [2024/12/22 02:23] – 이거니맨 | android:pdfdocument:commandmirroring [2024/12/24 19:55] (현재) – 이거니맨 | ||
|---|---|---|---|
| 줄 398: | 줄 398: | ||
| </ | </ | ||
| + | |||
| + | |||
| + | ===== 여러개의 정보를 스트링으로 넘기기 ===== | ||
| + | |||
| + | ==== 1. 텍스트 합치기와 나누기 ==== | ||
| + | |||
| + | === 가. 텍스트 합치기 === | ||
| + | |||
| + | 여러 줄의 데이터를 하나의 텍스트로 합치려면 다음과 같이 하면 될 것이다. 이 때 구분자는 세미콜론(; | ||
| + | |||
| + | <code kotlin> | ||
| + | var totalStr = "" | ||
| + | bodyStr.forEach (){ | ||
| + | if (totalStr != "" | ||
| + | totalStr += it | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | |||
| + | === 나. 텍스트 나누기 === | ||
| + | |||
| + | 텍스트를 나누는 함수는 kotlin에서 split함수로 제공한다. 다음과 같이 하면 된다. | ||
| + | |||
| + | <code kotlin> | ||
| + | val wordsBits = bodyStr.split(";" | ||
| + | val line = wordsBits.size | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== 2. 텍스트 합쳐서 데이터로 전송해주기 ==== | ||
| + | |||
| + | 처음에는 다음과 같이 데이터를 뿌려준 다음 이를, command 모음에 다음과 같이 전송해준다. | ||
| + | |||
| + | <code kotlin> | ||
| + | // MultiLine Table Text | ||
| + | fun tableText(header : String, bodyStr : MutableList< | ||
| + | /** 변수 **/ | ||
| + | val cellHeight = 20 // Row Height : 40 | ||
| + | val columnWidth = 180f // 내부선 | ||
| + | val vcOffset = 4f // 세로 중간을 맞추기 위한 오프셋 | ||
| + | val line = bodyStr.size | ||
| + | nextPage(cellHeight * line + 20) | ||
| + | // Rect | ||
| + | canvasList[pageNum].drawRect(currentPOS.X.toFloat(), | ||
| + | canvasList[pageNum].drawRect(currentPOS.X.toFloat(), | ||
| + | |||
| + | // Text | ||
| + | canvasList[pageNum].drawText(header, | ||
| + | |||
| + | // 칸 내에 여러줄의 글을 쓰기 | ||
| + | for (i : Int in 0 until line ) { | ||
| + | canvasList[pageNum].drawText(bodyStr[i], | ||
| + | } | ||
| + | |||
| + | var totalStr = "" | ||
| + | bodyStr.forEach (){ | ||
| + | if (totalStr != "" | ||
| + | totalStr += it | ||
| + | } | ||
| + | |||
| + | if (isRecording) { | ||
| + | commandList.add(COMMAND(" | ||
| + | } | ||
| + | |||
| + | |||
| + | // 아래 여백 | ||
| + | totalPOS += POS(0, cellHeight * line + 20) | ||
| + | currentPOS += POS(0, cellHeight * line + 20) | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== 3. 2차 그리기에서 텍스트 나눠서 다시 그리기 ==== | ||
| + | |||
| + | 이렇게 묶음으로 받은 텍스트를 나눠서 다시 뿌려주면 된다. | ||
| + | |||
| + | <code kotlin> | ||
| + | // Table Text 2nd paint | ||
| + | fun tableTextMultiLine(header : String, bodyStr : String, canvas: Canvas, pos: POS) { | ||
| + | /** 변수 **/ | ||
| + | val cellHeight = 20 // Row Height : 40 | ||
| + | val columnWidth = 180f // 내부선 | ||
| + | val vcOffset = 4f // 세로 중간을 맞추기 위한 오프셋 | ||
| + | |||
| + | val wordsBits = bodyStr.split(";" | ||
| + | val line = wordsBits.size | ||
| + | |||
| + | // Rect | ||
| + | canvas.drawRect(pos.X.toFloat(), | ||
| + | canvas.drawRect(pos.X.toFloat(), | ||
| + | |||
| + | // Text | ||
| + | canvas.drawText(header, | ||
| + | |||
| + | // 칸 내에 여러줄의 글을 쓰기 | ||
| + | for (i : Int in 0 until line ) { | ||
| + | canvas.drawText(wordsBits[i], | ||
| + | } | ||
| + | |||
| + | } | ||
| + | </ | ||
| + | |||
| + | ===== 최종 결과물 ===== | ||
| + | |||
| + | 이렇게 PDF 2차로 그리면 본문과 머릿말 꼬릿말을 모두 벡터형식으로 그릴 수가 있다. | ||
| + | |||
| + | 최종 결과물은 다음과 같다. 실제 PDF로 파일을 다운 받아 보면, 스케일을 키워도 글자가 깨지지 않고 자연스럽게 크기가 커지는 것을 볼 수 있다. | ||
| + | |||
| + | ^ 벡터로 저장된 PDF 문서 ^^ | ||
| + | | {{android: | ||
android/pdfdocument/commandmirroring.1734801806.txt.gz · 마지막으로 수정됨: 저자 이거니맨
