baseLayer (페이지 배경 레이어)
템플릿에 페이지별 헤더/푸터를 자동으로 적용하는 기능입니다. 콘텐츠 아래에 깔리는 배경 레이어로, 모든 페이지에 일관된 헤더/푸터/장식 요소를 자동 적용합니다.
개요
| 특징 | 설명 |
|---|---|
| 페이지별 자동 적용 | 콘텐츠가 여러 페이지에 걸쳐 분할되면 각 페이지에 맞는 baseLayer가 자동 적용 |
| 홀수/짝수 페이지 분리 | 책의 좌우 페이지에 서로 다른 레이아웃 적용 가능 |
| 시스템 변수 지원 | 페이지 번호, 날짜 등 동적 값 자동 치환 |
| 사용자 파라미터 바인딩 | $$변수명$$ 형식으로 사용자 입력 값 바인딩 |
구조
json
{
"baseLayer": {
"odd": {
"elements": [ /* 홀수 페이지(오른쪽)용 요소 */ ]
},
"even": {
"elements": [ /* 짝수 페이지(왼쪽)용 요소 */ ]
}
}
}페이지 규칙
| 페이지 번호 | 물리적 위치 | baseLayer |
|---|---|---|
| 1 | 오른쪽 (첫 페이지) | odd |
| 2 | 왼쪽 | even |
| 3 | 오른쪽 | odd |
| 4 | 왼쪽 | even |
요소 정의
각 요소에는 고유한 element_id가 필요합니다. 접두사 규칙: bl-odd-* (홀수 페이지용), bl-even-* (짝수 페이지용).
예시: 헤더/푸터
json
{
"baseLayer": {
"odd": {
"elements": [
{
"element_id": "bl-odd-header",
"type": "text",
"position": { "x": 1028, "y": 25 },
"width": 878,
"height": 35,
"text": "$$headerTitle$$ | 페이지 @@pageNum@@",
"fontFamily": "Malgun Gothic",
"fontSize": 12.0,
"textAlignment": "Right",
"verticalAlignment": "Center"
},
{
"element_id": "bl-odd-footer",
"type": "text",
"position": { "x": 1028, "y": 960 },
"width": 878,
"height": 25,
"text": "@@datetime.year@@년 @@datetime.month@@월 | 오른쪽 페이지",
"textAlignment": "Right"
}
]
},
"even": {
"elements": [
{
"element_id": "bl-even-header",
"type": "text",
"position": { "x": 50, "y": 25 },
"width": 878,
"height": 35,
"text": "페이지 @@pageNum@@ | $$headerTitle$$",
"fontFamily": "Malgun Gothic",
"fontSize": 12.0,
"textAlignment": "Left",
"verticalAlignment": "Center"
},
{
"element_id": "bl-even-footer",
"type": "text",
"position": { "x": 50, "y": 960 },
"width": 878,
"height": 25,
"text": "왼쪽 페이지 | @@datetime.year@@년 @@datetime.month@@월",
"textAlignment": "Left"
}
]
}
}
}변수 바인딩
사용자 파라미터 ($$변수명$$)
템플릿의 parameters에 정의된 값으로 치환됩니다. API 호출 시 "headerTitle": "나의 포토북"을 전달하면 $$headerTitle$$이 나의 포토북으로 치환됩니다.
시스템 변수 (@@변수명@@)
| 변수 | 설명 | 예시 |
|---|---|---|
@@pageNum@@ | 실제 페이지 번호 | 1, 2, 3, ... |
@@datetime.year@@ | 현재 연도 | 2026 |
@@datetime.month@@ | 현재 월 | 1, 2, ..., 12 |
@@datetime.date@@ | 현재 일 | 1, 2, ..., 31 |
@@bookTitle@@ | 책 제목 | 나의 포토북 |
좌표 시스템
양페이지(spread) 기준 좌표입니다. 전체 너비: 약 1956px (bookSpec에 따라 다름).
| 페이지 | X 좌표 범위 | 너비 |
|---|---|---|
| 왼쪽 페이지 (even) | 50 ~ 928 | 978px |
| 오른쪽 페이지 (odd) | 1028 ~ 1906 | 978px |
지원 요소 타입
baseLayer에서 사용 가능한 요소 타입:
text: 텍스트 요소 (헤더, 푸터, 페이지 번호 등)graphic: 이미지/장식 요소 (라인, 로고 등)
완전한 템플릿 예시
json
{
"templateName": "헤더/푸터가 있는 본문 템플릿",
"bookSpecUid": "SQUAREBOOK_HC",
"templateKind": "content",
"parameters": {
"definitions": {
"headerTitle": {
"binding": "text",
"type": "string",
"required": false,
"description": "헤더 제목"
},
"contents": {
"binding": "text",
"type": "string",
"required": true,
"description": "본문 내용"
}
}
},
"baseLayer": {
"odd": {
"elements": [
{
"element_id": "bl-odd-header",
"type": "text",
"position": { "x": 1028, "y": 25 },
"width": 878,
"height": 35,
"text": "$$headerTitle$$ | 페이지 @@pageNum@@",
"textAlignment": "Right"
}
]
},
"even": {
"elements": [
{
"element_id": "bl-even-header",
"type": "text",
"position": { "x": 50, "y": 25 },
"width": 878,
"height": 35,
"text": "페이지 @@pageNum@@ | $$headerTitle$$",
"textAlignment": "Left"
}
]
}
},
"layout": {
"itemIndex": "0",
"tag": "Print",
"width": 424,
"height": 860,
"elements": [
{
"element_id": "content-text",
"type": "text",
"position": { "x": 0, "y": 0 },
"width": 424,
"height": 800,
"text": "$$contents$$",
"splittable": true,
"isDynamic": true
}
]
},
"layoutRules": {
"space": "page",
"margin": {
"pageMargin": { "spine": 50, "fore": 50, "head": 80, "tail": 60 }
},
"flow": {
"columns": 2,
"columnGap": 30
}
}
}주의사항
element_id 필수: 모든 baseLayer 요소는 고유한
접두사 규칙:
좌표 주의: odd(오른쪽) 요소는 x 좌표를 1028 이상으로, even(왼쪽) 요소는 50 근처로 설정해야 합니다.
콘텐츠 영역 고려: 헤더/푸터 영역과 콘텐츠 영역이 겹치지 않도록
element_id가 필요합니다.접두사 규칙:
bl-odd-*, bl-even-* 접두사를 사용하면 시스템이 중복 적용을 방지합니다.좌표 주의: odd(오른쪽) 요소는 x 좌표를 1028 이상으로, even(왼쪽) 요소는 50 근처로 설정해야 합니다.
콘텐츠 영역 고려: 헤더/푸터 영역과 콘텐츠 영역이 겹치지 않도록
layoutRules.margin을 적절히 설정하세요.