Markdown-Pod

 view release on metacpan or  search on metacpan

t/mkd/2011-12-08.mkd  view on Meta::CPAN

    $ sudo cpan OpenDocument::Template Catalyst

사용자 계정으로 모듈을 설치하는 방법을 정확하게 알고 있거나
`perlbrew`를 이용해서 자신만의 Perl을 사용하고 있다면
다음 명령을 이용해서 모듈을 설치합니다.

    #!bash
    $ cpan OpenDocument::Template Catalyst


오픈도큐먼트와 함께라면
------------------------

오픈도큐먼트와 함께라면 문서를 찍어내는데 거리낄 것이 없습니다.
지금부터 ODT를 이용하여, 문서를 찍어낼 것입니다.
ODT를 이용해서 문서를 생성하기 위해 우선 ODF 파일의 구조를 파악해야합니다.

### ODF: OpenDocumentFormat

오픈도큐먼트 형식(ODF)은 초기 [오픈오피스][openoffice]에서 XML파일 포맷을
기반으로 구현한 것을 [OASIS 컨소시엄][oasis](Organization for the Advancement
of Structured Information Standards)이 표준화 한 파일 형식입니다.
이 포맷은 오픈 XML기반 문서 파일 포맷으로, 기준에 따라 재사용 가능하고,
텍스트 문서(ODT), 스프레드시트(ODS), 차트 및 그래픽 요소(ODG)등에 이용됩니다.

ODF포맷을 사용한 대표적인 응용 프로그램 및 오피스 제품은 다음과 같습니다.

- [LibreOffice][libreoffice]
- [OpenOffice][openoffice]
- [AbiWord][abiword]
- [KOffice][koffice]
- [Google Docs][google-docs]
- [MS Office 2010/2007 SP2][msoffice]


### ODT: OpenDocumentText

즉, ODT란 오픈도큐먼트 포맷(ODF)이 사용된 워드프로세서 텍스트 문서 입니다.
그럼 ODT는 어떻게 구성되어 있을까요?
오픈도큐먼트포맷(ODF)은 일반적으로 여러 개의 XML 문서와 이진 파일을
하나의 ZIP 컨테이너 안에 묶는 형태입니다.
확장자는 `.odt` 형식을 따르지만 실제로는 ZIP 압축 파일인 것이죠.

ODT 뿐만 아니라 일반적인 오픈도큐먼트포맷(ODF)의 파일 구성을 살펴봅시다.
오픈오피스(또는 ODF 쓰기를 지원하는 프로그램)를 열어
아무 글이나 작성한 후 `sample.odt` 파일로 저장합니다.
이제 `unzip` 유틸리티를 써서 압축을 풀고 디렉터리 구조가 어떤지 살펴보죠.

    #!bash
    $ unzip sample.odt
    Archive:  sample.odt
     extracting: mimetype
      inflating: content.xml
      inflating: manifest.rdf
      inflating: styles.xml
     extracting: meta.xml
      inflating: Thumbnails/thumbnail.png
      inflating: Configurations2/accelerator/current.xml
       creating: Configurations2/progressbar/
       creating: Configurations2/floater/
       creating: Configurations2/popupmenu/
       creating: Configurations2/menubar/
       creating: Configurations2/toolbar/
       creating: Configurations2/images/Bitmaps/
       creating: Configurations2/statusbar/
      inflating: settings.xml
      inflating: META-INF/manifest.xml

무언가 굉장히 많은 파일들이 생겼지만, 우리가 하려는 작업인
문서의 내용을 조작하고 생성하는 관점에서 다가간다면
핵심은 `content.xml`, `meta.xml`, `styles.xml` 세 개의 파일입니다.
`content.xml` 파일은 문서를 통해 보여지는 대부분의 내용을 담고있습니다.
일반적으로 텍스트, 표, 프레젠테이션 등의 구조와 내용입니다.
`meta.xml` 파일은 문서의 MIME 타입을 기술합니다.
생성 시간, 최종 수정 시간, 문서 수정 시 걸린 전체 시간,
낱말/쪽/표/그림 개수 같은 문서 정보에 해당하는 항목들이 담겨있습니다.
`styles.xml` 파일은 XML 형식으로 된 CSS라고 보면 됩니다.
글꼴(font), 인치 당 문자 수(pitch), 장식(decoration), 여백(spacing),
탭 위치(tab stop) 등 문서 편집시 이용할 수 있는 다양한 스타일이 정의되어 있습니다.


크리스마스 카드
----------------

내친 김에 연말이니, 크리스마스 카드나 연하장을 만들어볼까요?
어릴 적 크리스마스 카드를 쓰던 기억이 나나요?
처음엔 공 들여서 이런저런 이야기를 쓰다가 써야 할 친구들이 점차 늘어나면,
내용은 계속 똑같이 베껴 쓰면서 받는 친구의 이름만 바꾸곤 했죠. :-)
그렇다면 처음 한번만 예쁘게 카드를 꾸미고,
이름만 쓰면 크리스마스 카드가 나오게 할 수 있다면,
트위터나 페이스북 친구에게 크리스마스 카드를 돌리는 것은 일도 아니겠죠.
만들어 봅시다.

우선 오픈오피스를 열어 `xmas-card.odt`를 만듭니다.
여기서 만든다는 것은 *꾸미고 싶은 만큼 잔뜩 꾸미는 것*을 말합니다.
다음으로 자료가 변경해서 들어갈 부분을 표시합니다.
예를 들어, 크리스마스 카드의 경우 받는 사람의 이름이나 날짜는 계속 바뀌겠죠.
네, 그것이 핵심입니다!
문서를 계속 *우려서* 자동 생성하되, 필요한 부분의 데이터만 받아서 이용하자구요!
그렇다면 가변 데이터에 해당하는 부분을 `xxxx`라고 표시합니다.

![xxxx 표시][img-01]
<br />
*그림 1.* xxxx 표시 [(원본)][img-01-original]

사실 여기까지(틀을 만드는 것) 진행했으면 벌써 절반 이상 된 것입니다.
이젠 `unzip` 유틸리티를 사용해 `xmas-card.odt` 파일의 압축을 풉니다.
압축을 푼 다음 `content.xml`과 `style.xml`만 남겨두고 나머지는 모두 지웁니다.

이제 `content.xml`을 열어 `xxxx`를 찾아봅니다.
`xxxx`로 표시한 것은 가변 데이터의 위치를 쉽게 찾기 위해서 입니다.
수 많은 문자열 중 절대 겹치지 않을 것 같은 `xxxx`로
표시했기 때문에 편집기의 찾기 기능을 잘 이용하면 손쉽게 편집할 수 있습니다.
그리고 `xxxx`를 찾아서 사용할 변수로 바꿔줍시다.
이 때 변경할 변수라 함은 [CPAN의 Template 모듈][cpan-template] 모듈에서
사용하는 문법을 이용한 변수이니 자세한 내용은 해당 모듈의 공식 문서를 확인하세요.

앗! 그런데 `content.xml`을 열어보면 XML 형식인 만큼 바이너리 형식은 아니라서
읽을 수는 있지만 용량을 줄이기 위해 불필요한 빈 칸이 모두 제거되어
알아보기가 너무 힘들어 어떻게 수정해야 할지 막막합니다.
이럴 땐, [CPAN의 XML::Tidy 모듈][cpan-xml-tidy]을 설치하고



( run in 1.396 second using v1.01-cache-2.11-cpan-364913b4093 )