돈 안 들이고 PDF 파일 만들기 4장 : XSL-FO
글쓴이: 세벌 / 작성시간: 수, 2010/05/26 - 10:31오전
돈 안 들이고 PDF 파일 만들기 4장 : XSL-FO
http://kldp.org/node/115125 에서 예고한 형식과 내용의 분리에 대해 다루어 보겠습니다.
이번 장에서는 XSL(eXtensible Stylesheet Language)에 대해 이야기 하겠습니다.
2장에서 FO 파일을 만들었듯이 일단 간단한 XSL 하나 만들면서 시작합니다.
frm.xsl
<?xml version="1.0" encoding="UTF-8" ?> <xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format"> <xsl:template match="/"> <fo:root> <fo:layout-master-set> <fo:simple-page-master master-name="my-page"> <fo:region-body margin="1cm"/> </fo:simple-page-master> </fo:layout-master-set> <fo:page-sequence master-reference="my-page"> <fo:flow flow-name="xsl-region-body"> <xsl:apply-templates/> </fo:flow> </fo:page-sequence> </fo:root> </xsl:template> </xsl:transform>
별로 간단하지 않나요? 사실 이게 가장 간단한 xsl은 아닌데 우리의 목표가 pdf 파일 만들기 이므로 이를 위한 xsl 파일을 만들었습니다.
이 파일은 XSL이기도 하고 FO이기도 합니다. XSL도 XML이고, FO도 XML입니다. 역은 성립하지 않습니다. XML이라고 해서 FO가 된다는 건 아니란 얘기죠.
이 장의 목표는 문서의 내용이 들어있는 파일을 하나 만들고, 형식이 들어간 파일을 따로 하나 만들어서 pdf 파일을 만들려는 것입니다.
book.xml
<?xml version='1.0' encoding='utf-8'?> <book> <title>XML 용어 정리</title> <p>XML 관련 용어들을 정리해 보았습니다.</p> <p>XML : extensible markup language</p> <p>FO : Formatting Object</p> <p>XSL : extensible stylesheet language</p> <p>XSLT : XSL Transformation</p> <p>XSL-FO : extensible stylesheet language formattiing object</p> </book>
이 XML 파일에는 문서의 내용을 넣었습니다.
위의 XML 파일을 보면 title 태그 안에 문서의 제목이 있고, p 태그 하나에 문장이 하나씩 들어가 있습니다.
이번에는 이 장의 처음에 소개드린 .xsl 파일을 좀 수정하겠습니다.
gen.xsl
<?xml version='1.0' encoding='utf-8'?> <xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format"> <xsl:output method="xml" indent="yes"/> <xsl:template match="/"> <fo:root font-family="unbatang"> <fo:layout-master-set> <fo:simple-page-master master-name="my-page"> <fo:region-body margin="1cm"/> </fo:simple-page-master> </fo:layout-master-set> <fo:page-sequence master-reference="my-page"> <fo:flow flow-name="xsl-region-body"> <fo:block text-align="center" font-size="20pt"> <xsl:value-of select="/book/title"/> </fo:block> <xsl:for-each select="book/p"> <fo:block> <xsl:value-of select="."/> </fo:block> </xsl:for-each> </fo:flow> </fo:page-sequence> </fo:root> </xsl:template> </xsl:transform>
이 xsl 파일에는 문서의 형식이 들어갑니다. 이 파일에 대해 부분 별로 설명 드리겠습니다.
<fo:root font-family="unbatang">
fo:block 마다 매번 폰트를 설정하려면 귀찮으니 위처럼 fo:root 에 글꼴을 지정해 주었습니다. 이렇게 하면 문서 전체에 적용이 됩니다.
<fo:block text-align="center" font-size="20pt"> <xsl:value-of select="/book/title"/> </fo:block>
제목이 들어간 줄은 글꼴을 좀 크게 지정했습니다. 위의 xml파일에서 book 아래 title 에 들어간 것을 어떻게 나타낼지 지정합니다.
<xsl:for-each select="book/p"> <fo:block> <xsl:value-of select="."/> </fo:block> </xsl:for-each>
위 xml 파일에서 book 아래의 p 태그 안에 들어간 것을 어떻게 나타낼지 지정합니다..
이제 이 파일들을 이용하여 문서를 pdf로 만들어 봅시다.
d:\lec> fop -c cfg.xml -xml book.xml -xsl gen.xsl -pdf mybook.pdf
-xml 다음에는 xml 문서 파일명 -xsl 다음에는 xsl 문서 파일명 -pdf 뒤에는 만들려는 pdf 파일명을 넣으면 됩니다.
Forums:
잘 읽고 있습니다
그냥 읽고만 가기 뭐해서 댓글을...
고맙습니다.
고맙습니다. 근데 읽기만 하시면 안 되는데... 직접 실행도 해 보시고 하다 안 되면 질문도 하시면 더 좋겠죠?
http://sebul.sarang.net/
세벌 https://sebuls.blogspot.kr/
댓글 달기