Markdown-Pod

 view release on metacpan or  search on metacpan

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

=over

=item -

L<LibreOffice|http://www.libreoffice.org>


=item -

L<OpenOffice|http://www.openoffice.org>


=item -

L<AbiWord|http://www.abisource.com>


=item -

L<KOffice|http://www.koffice.org>


=item -

L<Google Docs|https://docs.google.com/>


=item -

L<MS Office 2010/2007 SP2|http://office.microsoft.com/ko-kr/>


=back


=head3 ODT: OpenDocumentText

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

ODT 뿐만 아니라 일반적인 오픈도큐먼트포맷(ODF)의 파일 구성을 살펴봅시다.
오픈오피스(또는 ODF 쓰기를 지원하는 프로그램)를 열어
아무 글이나 작성한 후 C<sample.odt> 파일로 저장합니다.
이제 C<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

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


=head2 크리스마스 카드

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

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

=for html <img src="2011-12-08-1.png" alt="xxxx 표시" width="700" />
<br />

I<그림 1.> xxxx 표시 L<(원본)|2011-12-08-1.png>

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

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

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



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