İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır
Zafer Teker
tekzaf@yahoo.com

Bir XML Belgesinin FOP ile PDF'e Çevrilmesi

Giriş

Bir xml dökümanı data tutar. XML'in en büyük güçlerinden bir sakladığı verinin başka tiplere dönüştürülebilimesidir. Bu makalede deneme olarak hazırladığımız bir HelloWorld.xml dökümanını FOP ile HelloWorld.pdf'e çevireceğiz. Bunun için kullanılan teknolojilerden biraz bahsedelim.

Bir XML belgesi bilgi tutar. FOP ise apache tarafından geliştirilen bir projedir. Ana amacı bir XML belgesini başka tiplere çevirmektir. Biz pdf'e (Acrobat Reader) çevirme ile uğraşacağız. Önce FOP'u download edip bir klasöre açmalısınız. http://xml.apache.org adresinden download edebilirsiniz. Biz "fop-0.20.5rc-bin.tar.gz" dosyasını download ettik ve bir klasöre açtık.

HelloWorld.xml oluşturalım.

Göster Gizle Kopar Satır Gizle Satır Göster
  1 <test>
  2 	<message>Hello World</message>
  3 </test>

Bu dosyayı hemen fop'u açtığınız klasörün içine kopyaladık. HelloWorld.xml'in koyulduğu klasörde fop.bat dosyası olması gerekiyor.(Windows için) İşte fop.bat kullanılarak HelloWorld.xml HelloWorld.pdf'e çevrilecek. Ancak önce XSL yaratmalıyız. Bu XSL XML belgesini alıp "formatting object" ler oluşturacak ve bu "formatting object"'ler pdf'e çevrilecek. Şimdi biraz "Formatting Object" ne demek ondan bahsedelim.

Formatting Object'ler biraz HTML'deki element'lere benzerler. Örneğin HTML'de de bu tür object'ler vardır. Örnek olarak tablo,liste,paragraf,div,span,link verilebilir. Formatting Object'ler ise dilden bağımsız bir şekilde tanımlanıyor. Örneğin siz tablo yaratıyor ve içine cell'ler ekliyorsunuz. Ancak nasıl gözükeceğini siz bilmiyorsunuz. Siz sadece object'leri formatlıyorsunuz. Siz bu işlemi bitirdikten sonra bu object'ler bir web browser tarafından veya herhangi bir program tarafından sizin istekleriniz doğrultusunda gösterilirler. İşte FOP sizin yazmış olduğunuz XML'i yine sizin yapmış olduğunuz XSL'den geçirerek bu "Formatting Object"leri oluşturuyor. Bu object'ler oluştuktan sonra pdf'e çevriliyor. Bu object'ler ps(post script) veya başka formatlara da çevrilebilir. Şimdi XML belgesini Formatting Object'lere çeviren bir XSL yaratıyoruz. Adına test.xsl diyelim.

Göster Gizle Kopar Satır Gizle Satır Göster
  1 <?xml version="1.0" encoding="utf-8">
  2 <xsl:stylesheet
  3 	xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  4 	xmlns:fo="http://www.w3.org/1999/XSL/Format"
  5 	version="1.0">
  6 	
  7 <xsl:template match="test">
  8 	<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
  9 		<fo:layout-master-set>
 10 		   	<fo:simple-page-master master-name="all">
 11 		   		<fo:region-body margin="30pt"/>		
 12 		   	</fo:simple-page-master>
 13 		</fo:layout-master-set>
 14 		<fo:page-sequence master-reference="all" format="1">
 15 		  	<fo:flow flow-name="xsl-region-body">
 16 				<xsl:apply-templates select="message"/>
 17 			</fo:flow>
 18 		</fo:page-sequence>
 19 	</fo:root>
 20 </xsl:template>
 21 <xsl:template match="message">
 22 	<fo:block text-align="center" font-size="20pt"><xsl:value-of select="."/></fo:block>
 23 </xsl:template>
 24 </xsl:stylesheet>

test.xsl iki template'ten oluşmakta. Birincisi xml belgemizin root elementi olan "test" element'ini yakalamakta. Diğeri ise mesajın yazıldığı mesaj element'ini yakalamkta.

<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">

tüm yapının root elementidir. Her şey bu element'inin içinde olmalıdır. <fo:layout-master-set> genel ayarların yapıldığı yer olarak düşünülebilir. <fo:page-sequence master-reference="all" format="1"> ise sayfanın akışını belirler. Bizde hemen

<xsl:apply-templates select="message"/>

ile message template'tini yakalıyoruz. Bu template ise

<fo:block text-align="center" font-size="20pt"><xsl:value-of select="."/></fo:block>

ile ekranda mesajın gözükmesini sağlıyor. fo:block elementi HTML'deki div element'ine karşılık gelir.

Bu XSL'i yazdıktan sonra fop.bat'ı çalıştırıp pdf üretebiliriz. Bunun için önce java.exe komutunun tanınması için path değişkeni set edilmelidir. Bunun için setenv.bat yaratılabilir ve aşağıdakiler yazılabilir.

set PATH=C:\JBuilder7\jdk1.3.1\bin;%PATH%

siz sizin sistemdeki jdk'nın bin klasörünü vermelisiniz. Eğer bin klasörü PATH'te ise bu işlemlere gerek yoktur. Artık çevirebiliriz. MSDOS'ta FOP'un klasörünü içine girip aşağıdaki komutu verirseniz HelloWorld.pdf oluşturulur.

fop -xsl test.xsl -xml HelloWorld.xml -pdf HelloWorld.pdf

Dosya Listesi

İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır