돈 안 들이고 PDF 파일 만들기 4장 : XSL-FO

세벌의 이미지

돈 안 들이고 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: 
buelgsk8er의 이미지

그냥 읽고만 가기 뭐해서 댓글을...

세벌의 이미지

고맙습니다. 근데 읽기만 하시면 안 되는데... 직접 실행도 해 보시고 하다 안 되면 질문도 하시면 더 좋겠죠?

http://sebul.sarang.net/

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.