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 ~ 928978px
오른쪽 페이지 (odd)1028 ~ 1906978px

지원 요소 타입

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 요소는 고유한 element_id가 필요합니다.
접두사 규칙: bl-odd-*, bl-even-* 접두사를 사용하면 시스템이 중복 적용을 방지합니다.
좌표 주의: odd(오른쪽) 요소는 x 좌표를 1028 이상으로, even(왼쪽) 요소는 50 근처로 설정해야 합니다.
콘텐츠 영역 고려: 헤더/푸터 영역과 콘텐츠 영역이 겹치지 않도록 layoutRules.margin을 적절히 설정하세요.