epubedit

/usr/local/m2/setting.json 다음 영역에 대해 기술한다.

{
  "functions": {
    "contents": {
      "epubedit": {
        ...
      }
    }
  }
}

Important

epubedit 함수는 unzip 함수에 의존성을 가지므로 반드시 같이 활성화되어야 한다.

How to use

명령어 리스트

epub 파일에 대해 용량제한 없는 가공을 지원한다.

# 페이지 편집 - 추출할 id 값을 문자열 그대로 개별 입력.
https://example.com/src.epub/epubedit/trim/cover,001,002,003,004

# 페이지 범위 편집 - id가 숫자라면 범위 표현 지원.
https://example.com/src.epub/epubedit/trim/1-10,100-120
https://example.com/src.epub/epubedit/trim/-30
https://example.com/src.epub/epubedit/trim/-30,100-

# 개별콘텐츠 후가공 연계
https://example.com/src.epub/epubedit/archive/resize200
https://example.com/src.epub/epubedit/trim/1-10/archive/resize_encrypt

meta

# functions.contents.epubedit

"meta" : {
  "enable": false,
  "keyword": "epubedit"
}
enable (기본: false)

epubedit 활성화

keyword (기본: epubedit)

키워드

trim

root 문서로 /META-INF/container.xml 를 분석하며 일반적으로 standard.opf 를 중심으로 편집한다. trim 명령어는 문서 내 id , idref 속성을 찾아 추출한다.

Note

페이지 범위추출은 반드시 연속된 숫자 형태의 id 또는 idref 값이어야 한다.

<item media-type="application/xhtml+xml" id="p-cover"   href="xhtml/p-cover.xhtml">
<item media-type="application/xhtml+xml" id="p-001"     href="xhtml/p-001.xhtml">
<item media-type="application/xhtml+xml" id="p-002"     href="xhtml/p-002.xhtml">
<item media-type="application/xhtml+xml" id="p-003"     href="xhtml/p-003.xhtml">
... (생략) ...
<item media-type="application/xhtml+xml" id="p-200"     href="xhtml/p-200.xhtml">
  • /trim/cover 단일 페이지 표현

  • /trim/80-105 페이지 범위는 - 로 연결이 가능하다.

  • /trim/10- 시작 페이지만 지정

  • /trim/-20 끝 페이지만 지정

prefix

# functions.contents.epubedit.trim

"prefix": [
  "i-",
  "p-"
]
prefix

페이지 추출시 입력된 값과 일치하는 페이지와 더불어, prefix 에 정의된 문자열을 추가로 추출한다. 예를 들어 위와 같이 설정한 경우 /trim/10id10 뿐만 아니라 i-10 , p-10 를 대상으로 지정한다.

Note

trim 순서는 입력순서가 아닌 원본에 명시된 순서이다.

include

# functions.contents.epubedit.trim

"include": [
    "<item (.*) properties=\"cover-image\"/>",
    "id=\"toc\"",
    "id=\"p-cover\""
]
include

페이지 추출시 해당 문자열과 매칭(정규식)하는 라인은 항상 추출한다. 해당 문자열은 standard.opf 문서의 <manifest> 에 포함되는 요소이며, 문자열 매칭을 통해 페이지를 남길 수 있도록 설정한다.

예를 들어 위 예제 설정의 경우 다음 라인은 trim 으로 입력하지 않아도 항상 추출된다.

# <item (.*) properties=\"cover-image\"/> 패턴과 일치한다.
<item media-type="image/jpeg" id="cover" href="image/cover.jpg" properties="cover-image"/>

pageSpread

추출된 페이지의 page-spread-left , page-spread-right 속성을 재정렬한다.

# functions.contents.epubedit.trim

"pageSpread": {
  "enable": false,
  "order": "auto"
}
enable (기본: false)

재정렬 기능을 사용한다.

order (기본: auto)

재정렬 방식

  • auto 원본 첫 페이지를 기준으로 정렬한다.

  • left 추출된 첫 페이지를 기준으로 page-spread-left -> page-spread-right 순으로 설정한다.

  • right 추출된 첫 페이지를 기준으로 page-spread-right -> page-spread-left 순으로 설정한다.

다음은 예제이다.

# pageSpread.enable: false
<itemref idref="p01" properties="page-spread-left" />
<itemref idref="p03" properties="page-spread-left" />
<itemref idref="p05" properties="page-spread-left" />
<itemref idref="p07" properties="page-spread-left" />
<itemref idref="p09" properties="page-spread-left" />

# pageSpread.enable: true
# pageSpread.order: right
<itemref idref="p01" properties="page-spread-right" />
<itemref idref="p03" properties="page-spread-left" />
<itemref idref="p05" properties="page-spread-right" />
<itemref idref="p07" properties="page-spread-left" />
<itemref idref="p09" properties="page-spread-right" />

archive

epub 아카이빙 전 개별 콘텐츠를 함수체인을 이용하여 가공한다.

# functions.contents.epubedit

"archive": {
  "enable": true,
  "rules": [
    {
      "name": "resize200",
      "matchingList": [
        {
          "pattern": "/image/i-([^/]+).jpg",
          "replace": "/image/i-#1.jpg/dims/resize/200"
        },
        {
          "pattern": "/image/cover.jpg",
          "replace": "/image/cover.jpg/dims/grayscale/true"
        }
      ]
    },
    {
      "name": "encrypt",
      "matchingList": [
        {
          "pattern": "/image/([^/]+).jpg",
          "replace": "/image/i-#1.jpg/dims/resize/1024/denc/bluk/true"
        }
      ]
    }
  ]
}
enable (기본: false)

archive 기능을 활성화한다.

rules

archive 규칙 리스트

name

규칙 이름

matchingList

매칭 리스트

pattern

추출된 개별 콘텐츠 URL 패턴

replace

함수체인이 반영된 URL

위 설정 예제는 다음과 같이 호출 가능하다.

# 후가공없는 페이지 추출
https://example.com/src.epub/epubedit/trim/cover,001-013

# cover는 흑백으로 추출, 1~13페이지는 가로 200으로 리사이즈
https://example.com/src.epub/epubedit/trim/cover,001-013/archive/resize200

# 추출된 페이지 가로 1024 리사이즈 후 암호화
https://example.com/src.epub/epubedit/trim/cover,001-013/archive/encrypt