드디어 Coding을 해보자.
오늘은 어제까지 만든 dll을 가지고 간단한 예제 파일을 작성해 보자.
먼저 xml 과 xslt 파일을 준비하자.
sample.xml
<?xml version="1.0" encoding="UTF-8"?>
<projectteam>
<projectname>The Killer Application</projectname>
<member>
<name>John Doe</name>
<function>lead</function>
<email>jon.doe@killerapp.fun</email>
</member>
<member>
<name>Paul Coder</name>
<function>dev</function>
<email>paul.coder@killerapp.fun</email>
</member>
<member>
<name>Max Hacker</name>
<function>dev</function>
<email>max.hacker@killerapp.fun</email>
</member>
<member>
<name>Donna Book</name>
<function>doc</function>
<email>donna.book@killerapp.fun</email>
</member>
<member>
<name>Henry Tester</name>
<function>qa</function>
<email>henry.tester@killerapp.fun</email>
</member>
<member>
<name>홍길동</name>
<function>dev</function>
<email>yhseo93@gmail.com</email>
</member>
</projectteam>
sample.xsl
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" exclude-result-prefixes="fo">
<xsl:output method="xml" version="1.0" omit-xml-declaration="no" indent="yes"/>
<xsl:param name="versionParam" select="'1.0'"/>
<xsl:template match="projectteam">
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="simpleA4" page-height="29.7cm" page-width="21cm" margin-top="2cm" margin-bottom="2cm" margin-left="2cm" margin-right="2cm">
<fo:region-body/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="simpleA4">
<fo:flow flow-name="xsl-region-body">
<fo:block font-size="16pt" font-weight="bold" space-after="5mm">Project: <xsl:value-of select="projectname"/>
</fo:block>
<fo:block font-size="12pt" space-after="5mm">Version <xsl:value-of select="$versionParam"/>
</fo:block>
<fo:block font-size="10pt">
<fo:table table-layout="fixed" width="100%" border-collapse="separate">
<fo:table-column column-width="4cm"/>
<fo:table-column column-width="4cm"/>
<fo:table-column column-width="5cm"/>
<fo:table-body>
<xsl:apply-templates select="member"/>
</fo:table-body>
</fo:table>
</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>
</xsl:template>
<xsl:template match="member">
<fo:table-row>
<xsl:if test="function = 'lead'">
<xsl:attribute name="font-weight">bold</xsl:attribute>
</xsl:if>
<fo:table-cell>
<fo:block>
<xsl:value-of select="name"/>
</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block>
<xsl:value-of select="function"/>
</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block>
<xsl:value-of select="email"/>
</fo:block>
</fo:table-cell>
</fo:table-row>
</xsl:template>
</xsl:stylesheet>
위의 파일을 저장 한 후에 VS.Net 2003의 Console Project를 하나 생성한다.
참조 추가를 하여
fop.dll 과 ikvm\bin 디렉토리에 있는 IKVM.OpenJDK.ClassLibrary.dll 을 참조한다
그리고 Source를 작성한다. 아래와 같다.
using System;
using java.io;
using org.apache.fop.apps;
using javax.xml.transform;
using javax.xml.transform.sax;
using javax.xml.transform.stream;
namespace PrjConsole
{
class PDFClass
{
[STAThread]
static void Main(string[] args)
{
try
{
File baseDir = new File("c:/pdf");
File xmlfile = new File(baseDir, "xml/xml/sample.xml");
File xsltfile = new File(baseDir, "xml/xslt/sample.xsl");
File pdffile = new File(baseDir, "pdf/sample.pdf");
FopFactory fopFactory = FopFactory.newInstance();
FOUserAgent foUserAgent = fopFactory.newFOUserAgent();
OutputStream bout = new FileOutputStream(pdffile);
bout = new BufferedOutputStream(bout);
try
{
Fop fop = fopFactory.newFop(MimeConstants.__Fields.MIME_PDF, foUserAgent, bout);
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer(new StreamSource(xsltfile));
Source src = new StreamSource(xmlfile);
Result res = new SAXResult(fop.getDefaultHandler());
transformer.transform(src, res);
System.Console.WriteLine("Success!!!");
}
finally {
bout.close();
}
}
catch(Exception ex)
{
System.Console.WriteLine(ex.Message);
}
}
}
}
sample.pdf
짜잔~~ PDF 화면
엥 한글이 깨졌당 ㅠㅠ
다음시간에 한글폰트를 사용해서 한글뿐만 아니라 다양한 글꼴을 사용해 보자.
보너스 : 소스 파일을 첨부 해 드릴께요.
그럼 다음 시간에..