You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
ALLIANZ TÜRKIYE<br />
ITEXT - <strong>JAVA</strong> <strong>ile</strong> <strong>PDF</strong><br />
<strong>Yaratma</strong> <strong>ve</strong> <strong>Düzenleme</strong><br />
Dokümantasyon<br />
Sedat Çelik<br />
9/4/2012<br />
Bu dokümanın yapılmasındaki amaç iText kütüphanesini kullanarak Java üzerinden basit <strong>PDF</strong> dosyalırı<br />
yaratmak <strong>ve</strong> düzenlemek konusunda kaynak sağlamaktır. Genel anlamda bir çeviri olduğu söylenebilir<br />
Doküma’ın hazırlık aşamasında, eklemeler <strong>ve</strong> düzenlemeler yapılırken çok ayrıntıya girilmemeye<br />
çalışıldı <strong>ve</strong> okuyucunun temel Java bilgisi olduğu varsayıldı.
Contents<br />
Giriş .......................................................................................................................................................... 2<br />
Kurulum ................................................................................................................................................... 3<br />
İçerik <strong>ve</strong> Kullanım .................................................................................................................................... 4<br />
Örnek Doküman .................................................................................................................................. 4<br />
iText nesneleri ..................................................................................................................................... 6<br />
Document ........................................................................................................................................ 6<br />
Chunk ............................................................................................................................................... 7<br />
Phrase .............................................................................................................................................. 8<br />
Paragraph ...................................................................................................................................... 11<br />
Bölüm <strong>ve</strong> Kısım (alt bölüm) ........................................................................................................... 14<br />
Link ................................................................................................................................................ 15<br />
List ................................................................................................................................................. 18<br />
Table .............................................................................................................................................. 21<br />
Imajlar ............................................................................................................................................ 28<br />
Alt <strong>ve</strong> Üst yazılar ............................................................................................................................ 34<br />
Alt <strong>ve</strong> Üst Çizg<strong>ile</strong>r ........................................................................................................................... 35<br />
Font ................................................................................................................................................ 36<br />
Faydalanılan kaynaklar: ......................................................................................................................... 40<br />
1
Giriş<br />
Bu dokümanın amacı Java programlama dili <strong>ile</strong>, iText açık kaynak kodlu kütüphanesini kullanarak<br />
nasıl <strong>PDF</strong> dosyası yaratılacağını göstermektir. iText web sitesinden kütüphane incelenebilir <strong>ve</strong><br />
buradan indir<strong>ile</strong>bilir. Ancak ticari sürümü de mevcuttur <strong>ve</strong> ticari sürümüyle, özel bir araç kullanılarak,<br />
burada anlatılacak işlemleri yapmak çok daha kolaydır.<br />
Bu dokümanda iText’in en ince ayrıntısına kadar girilip bütün detaylarıyla anlatılmayacak, genel<br />
anlamda bir doküman hazırlamak için gerekli bilgi <strong>ve</strong>r<strong>ile</strong>cektir.<br />
Daha fazla ayrıntı için iText geliştiric<strong>ile</strong>ri tarafından yazılmış iText in Action (Manning) adlı kitaptan<br />
faydalanılabilir.<br />
2
Kurulum<br />
IText <strong>PDF</strong> API’sini kullanmak için öncelikle iText web sitesinden IText Jar dosyaları indirilmeli <strong>ve</strong><br />
kullanacağınız projenin class path’ine eklenmelidir. Başka bir kütüphane eklemeye gerek yoktur, yani<br />
her hangi bir bağımlılık söz konusu değildir.<br />
3
İçerik <strong>ve</strong> Kullanım<br />
Örnek Doküman<br />
Aşağıda iText kullanılarak basitçe bir <strong>PDF</strong> dosyasını nasıl yaratacağımıza dair kod parçası <strong>ve</strong> açıklaması<br />
<strong>ve</strong>rilmiştir:<br />
import com.itextpdf.text.Document;<br />
import com.itextpdf.text.DocumentException;<br />
import com.itextpdf.text.Paragraph;<br />
import com.itextpdf.text.pdf.PdfWriter;<br />
import java.io.F<strong>ile</strong>OutputStream;<br />
import java.io.F<strong>ile</strong>NotFoundException;<br />
public class HelloWorldExample {<br />
public static void main(String[] args) {<br />
Document document = new Document();<br />
try {<br />
PdfWriter.getInstance(document,new F<strong>ile</strong>OutputStream("HelloWorld.pdf"));<br />
document.open();<br />
document.add(new Paragraph("Hello World iText."));<br />
document.close();<br />
} catch (DocumentException e) {<br />
e.printStackTrace();<br />
} catch (F<strong>ile</strong>NotFoundException e) {<br />
e.printStackTrace();<br />
}<br />
}<br />
}<br />
Yukarıdaki kod parçasında olanları şu şekilde açıklayabiliriz:<br />
İlk olarak bir Document instance’ı yaratılmıştır. Yaratılan bu Document objesi bizim için <strong>PDF</strong><br />
dokümanıdır. Bu obje üstündeki çeşitli prosedür <strong>ve</strong> metodları çağırarak <strong>PDF</strong> dokümanımıza<br />
çeşitli yetenekler <strong>ve</strong> özellikler katabiliriz.<br />
4
İkinci olarak constructor olarak, biraz önce yarattığımız <strong>ve</strong> açıklamasını <strong>ve</strong>rdiğimiz Document<br />
objesini <strong>ve</strong> OutputStream alan bir <strong>PDF</strong>Writer objesi yaratıldı. Buradaki OutputStream<br />
objesini, yaratılan <strong>PDF</strong> dokümanını yazmak için kullanacağız ki bu örnekte <strong>PDF</strong> dokümanını bir<br />
dosyaya yazmak için F<strong>ile</strong>OutputStream kullanıldı.<br />
Üçüncü olarak, yarattığımız Document objesini, document.open() metodunu kullanarak içine<br />
paragraf, resim, v.s. eklemek için hazır hale getiriyoruz. Bu aşamadan sonra Document<br />
objesinin içine <strong>PDF</strong> dokümanımızı şekillendirmek için gerekli her şeyi ekleyebiliriz.<br />
Dördüncü olarak Dokümanımızın içine bir Paragraph nesnesi ekleyerek onu şekllendirmeye<br />
başlıyoruz.<br />
Beşinci <strong>ve</strong> son olarak document.close() metodu kullanılarak dokümanımızın içeriği diske<br />
yazılarak kapatılıyor <strong>ve</strong> kullanıma hazır hale getiriliyor.<br />
5
iText nesneleri<br />
Bir <strong>PDF</strong> dokümanı yaratmak için kullanacağımız bazı iText nesneleri şuınlardır:<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
Document<br />
Chunk<br />
Phrase<br />
Paragraph<br />
Chapter + Section<br />
Anchor<br />
List<br />
Tables<br />
Images<br />
Superscript + Subscript<br />
Underline + Strikethrough<br />
Fonts<br />
Document<br />
com.itextpdf.text.Document sınıfı iText için bir <strong>PDF</strong> dokümanını gösterir. iText içindeki en önemli<br />
sınıflardan birisidir. Eğer sıfırdan bir <strong>PDF</strong> dokümanı yaratılacaksa mutlaka Document sınıfı<br />
kullanılmalıdır.<br />
Öncelikle Document nesnesi yaratılmalı <strong>ve</strong> ardından açılmalıdır. Ancak bu aşamalardan sonra<br />
dokümanın içine çeşitli b<strong>ile</strong>şenler atılabilir. Son olarak da dokümanın hazır hale gelmesi için yaratılan<br />
doküman kapatılmalıdır. Kısaca bir Document nesnesinin yaşam döngüsünü bu şekilde sıralayabiliriz.<br />
Bu obje için örnek kod yukarıda <strong>ve</strong>rilmiştir.<br />
6
Chunk<br />
com.itextpdf.text.Chunk sınıfı iText için mümkün olan en küçük sözcük parçasını gösterir. Bir Chunk<br />
objesi tek bir karakterden bir kaç cümlelik yazılara kadar sözcük öbeklerini kapsar.<br />
import com.itextpdf.text.Document;<br />
import com.itextpdf.text.DocumentException;<br />
import com.itextpdf.text.Paragraph;<br />
public class DocumentExample {<br />
public static void main(String[] args) {<br />
Document document = new Document();<br />
try {<br />
PdfWriter.getInstance(document, new F<strong>ile</strong>OutputStream("Chunk.pdf"));<br />
document.open();<br />
document.add(new Chunk("Örnek cümle 1. "));<br />
document.add(new Chunk("örnek cümle 2. "));<br />
document.add(new Chunk("örnek cümle 3. "));<br />
document.add(new Chunk("Örnek cümle 4. "));<br />
document.add(new Chunk("Uzuuuuunun bir örnek cümle 5. "));<br />
document.add(new Chunk("Son örnek cümle."));<br />
document.close();<br />
} catch (DocumentException e) {<br />
e.printStackTrace();<br />
} catch (F<strong>ile</strong>NotFoundException e) {<br />
e.printStackTrace();<br />
}<br />
}<br />
}<br />
Dikkat edilirse “Örnek cümle 1.” <strong>ile</strong> “Son örnek cümle.” yazılarının birbirlerinin üstüne bindiği görülebilir. Bunun<br />
sebebi Chank nesnesinin satırbaşı, paragraf boşluğu gibi birtakım özel boşlukları yapamamasından kaynaklanır.<br />
7
Sadece yazılan text’i bir sonraki uygun yere soldan sağa doğru ekler. Sağ köşeye erişildiğinde ise sol baştan,<br />
aynı Y lokasyonunda tekrar başlar. Sonuçta yukardaki resimde görülen şekilde karakterler birbirlerinin üstüne<br />
biner.<br />
Phrase<br />
com.itextpdf.text.Phrase sınıfı iText için cümle olarak kullanılır. Chunk’dan farklı olarak Phrase<br />
nesnesi paragraflar arasına nasıl boşluk ekleneceğini bilir <strong>ve</strong> sözcükleri üstüste bindirmez.<br />
import com.itextpdf.text.Document;<br />
import com.itextpdf.text.DocumentException;<br />
import com.itextpdf.text.Paragraph;<br />
public class DocumentExample {<br />
public static void main(String[] args) {<br />
Document document = new Document();<br />
try {<br />
PdfWriter.getInstance(document, new F<strong>ile</strong>OutputStream("Chunk.pdf"));<br />
document.open();<br />
document.add(new Phrase("Örnek cümle 1. "));<br />
document.add(new Phrase("örnek cümle 2. "));<br />
document.add(new Phrase("örnek cümle 3. "));<br />
document.add(new Phrase("Örnek cümle 4. "));<br />
document.add(new Phrase("Uzuuuuunun bir örnek cümle 5. "));<br />
document.add(new Phrase("Son örnek cümle."));<br />
document.close();<br />
} catch (DocumentException e) {<br />
e.printStackTrace();<br />
} catch (F<strong>ile</strong>NotFoundException e) {<br />
e.printStackTrace();<br />
}<br />
}<br />
}<br />
8
Dikkat edilirse “Son örnek cümle” kendi satırına düzgün bir şekilde yerleşmiştir.<br />
Satır aralığı<br />
Phrase nesnesi satır sonuna ulaşılıp yeni satıra geçerken, yeni satırla eski satırın arasında ne kadar<br />
boşluk olması gerektiğini bilir ancak fazladan boşluk ekleyemez. Bunun için Paragraph nesnesi<br />
kullanılmalıdır.<br />
Satır aralıkları kullanıcı birimleri cinsinden ölçülür. İnç başına 72 birimdir. Varsayılan olarak yazı<br />
yüksekliğinin 1.5 katıdır. Satır aralıkları, Phrase nesnesinin constructor’ına bir parametre olarak<br />
<strong>ve</strong>r<strong>ile</strong>rek, aşağıdaki örnekteki gibi değiştir<strong>ile</strong>bilir:<br />
import com.itextpdf.text.Document;<br />
import com.itextpdf.text.DocumentException;<br />
import com.itextpdf.text.Paragraph;<br />
public class DocumentExample {<br />
public static void main(String[] args) {<br />
Document document = new Document();<br />
try {<br />
PdfWriter.getInstance(document, new F<strong>ile</strong>OutputStream("Chunk.pdf"));<br />
document.open();<br />
Chunk chunk = new Chunk("Bu, örnek bir cümledir.");<br />
Phrase phrase = new Phrase(50);<br />
phrase.add(chunk);<br />
phrase.add(chunk);<br />
phrase.add(chunk);<br />
phrase.add(chunk);<br />
phrase.add(chunk);<br />
phrase.add(chunk);<br />
document.add(phrase);<br />
document.close();<br />
9
} catch (DocumentException e) {<br />
e.printStackTrace();<br />
} catch (F<strong>ile</strong>NotFoundException e) {<br />
e.printStackTrace();<br />
}<br />
}<br />
}<br />
Aşağıdaki ekran görüntüsü, yukarıdaki kodun çıktısını göstermektedir. İki satır arasına eklediğimiz 50 birimlik<br />
fazladan boşluk açıkça görülmektedir.<br />
10
Paragraph<br />
com.itextpdf.text.Paragraph sınıfı iText içinde paragraf olarak kullanılır. Bir paragrafta hizalama,<br />
girinti <strong>ve</strong> paragraftan önceki <strong>ve</strong> sonraki boşluklar değiştir<strong>ile</strong>bilir.<br />
import com.itextpdf.text.Document;<br />
import com.itextpdf.text.DocumentException;<br />
import com.itextpdf.text.Paragraph;<br />
public class DocumentExample {<br />
public static void main(String[] args) {<br />
Document document = new Document();<br />
try {<br />
PdfWriter.getInstance(document, new F<strong>ile</strong>OutputStream("Paragraph.pdf"));<br />
document.open();<br />
Paragraph paragraph = new Paragraph();<br />
for(int i=0; i
Kod çıktısı aşağıdaki şekilde olmalıdır:<br />
Satır aralığı<br />
Paragraph nesnesi, eğer yazı satır sonuna gelmişse, yeni satıra geçerken ne kadar satır aralığı<br />
bırakılacağını bilir. Satır aralıkları kullanıcı birimleri cinsinden ölçülür. İnç başına 72 birimdir.<br />
Varsayılan olarak yazı yüksekliğinin 1.5 katıdır. Satır aralıkları, Paragraph nesnesinin constructor’ına<br />
bir parametre olarak <strong>ve</strong>r<strong>ile</strong>rek, aşağıdaki gibi değiştir<strong>ile</strong>bilir:<br />
Paragraph paragraph = new Paragraph(50);<br />
Paragraftan Önceki <strong>ve</strong> Sonraki Boşluk<br />
Aşağıdaki şekilde paragraftan önce <strong>ve</strong> sonra boşluk bırakılabilir:<br />
paragraph.setSpacingAfter(50);<br />
paragraph.setSpacingBefore(50);<br />
Hizalama (Alignment)<br />
Paragraf hizalaması setAlignment() metodu <strong>ile</strong> yapılabilir. Buradaki metod <strong>ile</strong> hangi tarafa doğru bir<br />
hizalama olacağı belirtilir.<br />
paragraph.setAlignment(Element.ALIGN_LEFT);<br />
paragraph.setAlignment(Element.ALIGN_CENTER);<br />
paragraph.setAlignment(Element.ALIGN_RIGHT);<br />
Satırbaşı (Indentation)<br />
Paragrafın sağ ya da sol girint<strong>ile</strong>ri belirlenebilir. Bu şekilde paragraf bulunduğu konumdan daha <strong>ile</strong>riye<br />
ötelenebilir.<br />
paragraph.setIndentationLeft(50);<br />
paragraph.setIndentationRight(50);<br />
12
Genel Pragraf Örneği<br />
Aşağıda iki paragrafı bir dokümana ekleyen yukardak<strong>ile</strong>rden daha büyük bir kod örneği<br />
bulunmaktadır. İlk paragraf varsayılan sol hizalama <strong>ve</strong> girintiyi kullanıyor. İkinci paragraf ise<br />
ortalanmış <strong>ve</strong> hem sol hem de sağ satırbaşları için 50 birimlik girintiye sahiptir.<br />
import com.itextpdf.text.*;<br />
import com.itextpdf.text.pdf.PdfWriter;<br />
import java.io.F<strong>ile</strong>NotFoundException;<br />
import java.io.F<strong>ile</strong>OutputStream;<br />
public class Paragraph2Example {<br />
public static void main(String[] args) {<br />
Document document = new Document();<br />
try {<br />
PdfWriter.getInstance(document,new F<strong>ile</strong>OutputStream("Paragraph2.pdf"));<br />
document.open();<br />
Paragraph paragraph1 = new Paragraph();<br />
Paragraph paragraph2 = new Paragraph();<br />
paragraph2.setSpacingAfter(25);<br />
paragraph2.setSpacingBefore(25);<br />
paragraph2.setAlignment(Element.ALIGN_CENTER);<br />
paragraph2.setIndentationLeft(50);<br />
paragraph2.setIndentationRight(50);<br />
for(int i=0; i
}<br />
Yaratılan dokümanın çıktısı aşağıdaki şekildedir:<br />
Bölüm <strong>ve</strong> Kısım (alt bölüm)<br />
IText kullanarak <strong>PDF</strong> dokümanına bölümler <strong>ve</strong> kısımlar ekleyebiliriz. Bölümler<br />
com.itextpdf.text.Chapter sınıfı <strong>ile</strong> tanımlanırken Kısımlar class com.itextpdf.text.Section sınıfı <strong>ile</strong><br />
tanımlanır.<br />
import com.itextpdf.text.*;<br />
import com.itextpdf.text.pdf.PdfWriter;<br />
import java.io.F<strong>ile</strong>NotFoundException;<br />
import java.io.F<strong>ile</strong>OutputStream;<br />
public class ChapterSectionExample {<br />
public static void main(String[] args) {<br />
Document document = new Document();<br />
try {<br />
PdfWriter.getInstance(document, new F<strong>ile</strong>OutputStream("ChapterSection.pdf"));<br />
document.open();<br />
Paragraph paragraph = new Paragraph();<br />
paragraph.add(new Phrase("Bu bir bölüm."));<br />
14
Chapter chapter = new Chapter(paragraph, 1);<br />
chapter.addSection("Bu da kisim 1", 2); // Section objesi<br />
chapter.addSection("Bu da kisim 2", 2); // Section objesi<br />
document.add(chapter);<br />
document.close();<br />
} catch (DocumentException e) {<br />
e.printStackTrace();<br />
} catch (F<strong>ile</strong>NotFoundException e) {<br />
e.printStackTrace();<br />
}<br />
}<br />
}<br />
Oluşan çıktı aşağıdaki gibidir:<br />
Link<br />
com.itextpdf.text.Anchor sınıfı iText içinde external ya da internal link yaratmak için kullanılır.<br />
Oluşturulan link, web sitelerindeki gibi tıklanabilir.<br />
import com.itextpdf.text.*;<br />
import com.itextpdf.text.pdf.PdfWriter;<br />
import java.io.F<strong>ile</strong>NotFoundException;<br />
import java.io.F<strong>ile</strong>OutputStream;<br />
public class AnchorExample {<br />
public static void main(String[] args) {<br />
Document document = new Document();<br />
15
try {<br />
PdfWriter.getInstance(document, new F<strong>ile</strong>OutputStream("Anchor.pdf"));<br />
document.open();<br />
Paragraph paragraph = new Paragraph();<br />
paragraph.add(new Phrase("Web’de arama yapmak için gideceginiz adres: "));<br />
Anchor anchor = new Anchor("Google");<br />
anchor.setReference("http://www.google.com");<br />
paragraph.add(anchor);<br />
document.add(paragraph);<br />
document.close();<br />
} catch (DocumentException e) {<br />
e.printStackTrace();<br />
} catch (F<strong>ile</strong>NotFoundException e) {<br />
e.printStackTrace();<br />
}<br />
}<br />
}<br />
Oluşan çıktı:<br />
Resime dikkat edilirse adres üstündeki pointer’ın el şeklinde olduğu görülür. Ancak varsayılan olarak<br />
bunun için özel bir stil tanımlanmamıştır. Yani kendi pointer’ımızı tanımlayabiliriz.<br />
16
Internal Link<br />
<strong>PDF</strong> dokümanı içinde HTML sayfalarındaki gibi yerel link’ler de oluşturulabilir. Bunun için gereken<br />
koşul link’in yanında link isminin de yazılmasından ibarettir.<br />
import com.itextpdf.text.Anchor;<br />
import com.itextpdf.text.Document;<br />
import com.itextpdf.text.DocumentException;<br />
import com.itextpdf.text.Paragraph;<br />
import com.itextpdf.text.pdf.PdfWriter;<br />
import java.io.F<strong>ile</strong>NotFoundException;<br />
import java.io.F<strong>ile</strong>OutputStream;<br />
public class Anchor2Example {<br />
public static void main(String[] args) {<br />
Document document = new Document();<br />
try {<br />
PdfWriter.getInstance(document, new F<strong>ile</strong>OutputStream("Anchor2.pdf"));<br />
document.open();<br />
Anchor anchor = new Anchor("Bir sonraki paragrafa git");<br />
anchor.setReference("#target");<br />
Paragraph paragraph = new Paragraph();<br />
paragraph.add(anchor);<br />
document.add(paragraph);<br />
Anchor anchorTarget = new Anchor("Hedef link!");<br />
anchor.setName("target");<br />
Paragraph targetParagraph = new Paragraph();<br />
targetParagraph.setSpacingBefore(50);<br />
targetParagraph.add(anchorTarget);<br />
document.add(targetParagraph);<br />
document.close();<br />
} catch (DocumentException e) {<br />
e.printStackTrace();<br />
} catch (F<strong>ile</strong>NotFoundException e) {<br />
e.printStackTrace();<br />
}<br />
17
}<br />
}<br />
Oluşan çıktı aşağıdaki gibidir. Burada tahmin ed<strong>ile</strong>b<strong>ile</strong>ceği gibi link olarak “target” kullanılmıştır. Bu<br />
arada mouse pointer’a dikkat edilirse yerel link olduğu için el şeklindedir <strong>ve</strong> internal link’ten bu<br />
haliyle de ayrılır. Eğer internal bir lik olsaydı el işareti bir önceki örnekteki gibi olacaktı.<br />
List<br />
IText kullanılarak <strong>PDF</strong> dokümanına sıralı ya da sırasız listeler eklenebilir. Liste com.itextpdf.text.List<br />
sınıfıyla tanımlanır, liste elemanları ise com.itextpdf.text.ListItem sınıfıyla. IText içinde Ordered<br />
(sıralı), Unordered (sırasız - düz), Roman (roma rakamları), Greek (yunan rakamları), Zapfdingbats<br />
(özel karakterli) gibi isimler <strong>ve</strong>r<strong>ile</strong>n bir çok liste çeşidi kullanılabilir. Örneğin roma rakamları kullanmak<br />
için com.itextpdf.text.RomanList sınıfı, yunan harfleri kullanmak için ise com.itextpdf.text.GreekList<br />
sınıfını kullanılabilir. Bunun yanında liste imi olarak özel karakterler de kullanılabilir. Bu karakterler<br />
Dingbat font sınıfına ayit windows içinde wingdings olarak bilinen font a<strong>ile</strong>sinin elemanlarından<br />
oluşur <strong>ve</strong> ZapfDingbats sınıfıyla yaratılır. Bu sınıfın constructor’u iki parametre alır; birincisi font’un<br />
karakter kodu , ikincisi ise liste imi <strong>ve</strong> yazı arasındaki boşluktur.<br />
Tüm bunları içeren örnek aşağıda <strong>ve</strong>rilmiştir:<br />
import com.itextpdf.text.*;<br />
import com.itextpdf.text.pdf.PdfWriter;<br />
import java.io.F<strong>ile</strong>NotFoundException;<br />
import java.io.F<strong>ile</strong>OutputStream;<br />
public class List3Example {<br />
public static void main(String[] args) {<br />
18
Document document = new Document();<br />
try {<br />
PdfWriter.getInstance(document, new F<strong>ile</strong>OutputStream("List3.pdf"));<br />
document.open();<br />
List orderedList = new List(List.ORDERED);<br />
orderedList.add(new ListItem("Sirali Liste 1"));<br />
orderedList.add(new ListItem("Sirali Liste 2"));<br />
orderedList.add(new ListItem("Sirali Liste 3"));<br />
document.add(orderedList);<br />
List unorderedList = new List(List.UNORDERED);<br />
unorderedList.add(new ListItem("Sirasiz Liste 1"));<br />
unorderedList.add(new ListItem("Sirasiz Liste 2"));<br />
unorderedList.add(new ListItem("Sirasiz Liste 3"));<br />
document.add(unorderedList);<br />
RomanList romanList = new RomanList();<br />
romanList.add(new ListItem("Roma Liste 1"));<br />
romanList.add(new ListItem("Roma Liste 2"));<br />
romanList.add(new ListItem("Roma Liste 3"));<br />
document.add(romanList);<br />
GreekList greekList = new GreekList();<br />
greekList.add(new ListItem("Greek Liste 1"));<br />
greekList.add(new ListItem("Greek Liste 2"));<br />
greekList.add(new ListItem("Greek Liste 3"));<br />
document.add(greekList);<br />
ZapfDingbatsList zapfDingbatsList1 = new ZapfDingbatsList(110, 15);<br />
zapfDingbatsList1.add(new ListItem("Dingbat Liste 1"));<br />
zapfDingbatsList1.add(new ListItem("Dingbat Liste 2"));<br />
zapfDingbatsList1.add(new ListItem("Dingbat Liste 3"));<br />
document.add(zapfDingbatsList1);<br />
ZapfDingbatsList zapfDingbatsList2 = new ZapfDingbatsList(43, 30);<br />
zapfDingbatsList2.add(new ListItem("Dingbat2 Liste 1"));<br />
zapfDingbatsList2.add(new ListItem("Dingbat2 Liste 2"));<br />
zapfDingbatsList2.add(new ListItem("Dingbat2 Liste 3"));<br />
document.add(zapfDingbatsList2);<br />
document.close();<br />
} catch (DocumentException e) {<br />
e.printStackTrace();<br />
} catch (F<strong>ile</strong>NotFoundException e) {<br />
e.printStackTrace();<br />
}<br />
}<br />
19
}<br />
Yukarıdaki kod çalıştırıldığında aşağıdaki gibi bir çıktı <strong>ve</strong>rir:<br />
20
Table<br />
com.itextpdf.text.PdfPTable class sınıfı kullanılarak <strong>PDF</strong> dokümanlarına table’lar eklenebilir. Tablolar<br />
iText içindeki en karışık nesnelerden biridir. Aşağıda tablolarla beraber kullanacağımız işlemlerin <strong>ve</strong><br />
özelliklerin listesi yer almaktadır:<br />
1. Tablo yaratma<br />
2. Tablo genişlik<br />
3. Tablodan önce <strong>ve</strong> sonra boşluk bırakma<br />
4. Kolon genişlikleri<br />
5. Kolon birleştirme<br />
6. Cell Text Mode <strong>ve</strong> Composite Mode<br />
7. Text Mode içindeki varsayılan hücre ayarları<br />
8. Hücre Alignment<br />
9. Hücre Indentation<br />
10. Hücre Leading<br />
11. Hücre Padding<br />
12. Hücre Borders and Colors<br />
13. Hücre Rotation<br />
14. Tablo <strong>ve</strong> imajlar<br />
15. İç tablolar<br />
1. Tablo yaratma<br />
Bir PdfTable nesnesi yaratılırken kaç kolona sahip olması gerektiği önceden belirtilmelidir, bu da<br />
PdfPTable objesinin construction’una parametreyle <strong>ve</strong>rilir.<br />
Tabloya hücre eklemek için addCell() metodu çağrılıp PdfPCell ya da Paragraph objesi parametre<br />
olarak <strong>ve</strong>r<strong>ile</strong>bilir. PdfPCell ya da Paragraph objesinin <strong>ve</strong>rilmesine göre tablo hücresinin davranışı<br />
değişiklik gösterir. Daha geniş bilgi için Cell Text Mode <strong>ve</strong> Composite Mode bölümlerine bakılabilir.<br />
Örnek kod <strong>ve</strong> çıktısı aşağıda <strong>ve</strong>rilmiştir:<br />
import com.itextpdf.text.Document;<br />
import com.itextpdf.text.Paragraph;<br />
import com.itextpdf.text.pdf.PdfPCell;<br />
import com.itextpdf.text.pdf.PdfPTable;<br />
import com.itextpdf.text.pdf.PdfWriter;<br />
import java.io.F<strong>ile</strong>OutputStream;<br />
public class TableExample {<br />
public static void main(String[] args) {<br />
Document document = new Document();<br />
try {<br />
21
PdfWriter.getInstance(document, new F<strong>ile</strong>OutputStream("Table.pdf"));<br />
document.open();<br />
PdfPTable table = new PdfPTable(2); // 2 kolonlu tablo<br />
PdfPCell cell1 = new PdfPCell(new Paragraph("Hücre 1"));<br />
PdfPCell cell2 = new PdfPCell(new Paragraph("Hücre 2"));<br />
table.addCell(cell1);<br />
table.addCell(cell2);<br />
document.add(table);<br />
document.close();<br />
} catch(Exception e){<br />
e.printStackTrace();<br />
}<br />
}<br />
}<br />
2. Tablo Genişliği<br />
Tablo genişliğini ayarlamak için setWidthPercentage() metodu kullanılabilir. Buradaki değer tablo<br />
genişliğinin sayfa genişliği üzerinden yüzdesi olarak kabul edilir. Varsayılan değer sayfa genişliğinin<br />
yüzde sekseni şeklindedir. Aşağıdaki kod <strong>ile</strong> tablo genişliği <strong>ile</strong> sayfa genişliği eşitlenebilir:<br />
table.setWidthPercentage(100);<br />
3. Tablodan önce ya da sonra boşluk bırakma<br />
Aşağıdaki örnekte tablodan önce <strong>ve</strong> sonra nasıl boşluk bırakılacağı gösterilmiştir:<br />
22
table.setSpacingBefore(10f);<br />
table.setSpacingAfter(10f);<br />
4. Kolon genişlikleri<br />
setWidth() metodu kullanılarak aşağıdaki şekilde kolon genişlikleri ayarlanabilir:<br />
float[] columnWidths = {2f, 1f};<br />
table.setWidths(columnWidths);<br />
Tahmin ed<strong>ile</strong>b<strong>ile</strong>ceği gibi float değerlerinin her biri sırasıyla tablo genişliklerini <strong>ve</strong>rir.<br />
5. Kolon birleştirme<br />
Eğere birden fazla kolon birleştirilmek isteniyorsa setColspan() metodu aşağıdaki şekilde kullanılabilir:<br />
cell.setColspan(2);<br />
6. Cell Text Mode <strong>ve</strong> Composite Mode<br />
Hücreler hem Text modunda hem de Composite modda tabloya eklenebilirler.<br />
Text mode’da eklenen elemanların (Phrase, Paragraph vb.) özellikleri yok sayılır. Sadece hücrenin<br />
özellikleri korunur<br />
Composite mode’da eklenen elemanların özellikleri korunur. Boşluk girinti vs. gibi özellikler eklenen<br />
hücreye aynen yansır.<br />
Eklenen içerik PdfCell nesnesinin constructor’ı <strong>ile</strong> eklenmişse PdfPTable objesi tarafından Text mode<br />
içeriği, PdfCell.addElement() metodu yardımıyla eklenmişse Composite mode içeriği şeklinde algılanır.<br />
PdfCell textModeCell = new PdfCell(new Paragraph("Text Mode"));<br />
PdfCell compositeModeCell = new PdfCell();<br />
compositeModeCell.addElement(new Paragraph("Composite Mode"));<br />
table.addCell(new Paragraph("Text Mode"));<br />
7. Text Mode içindeki varsayılan hücre ayarları<br />
table.addCell() metodu kullanılarak text mode olarak eklenen hücreler için varsayılan hücre ayarları<br />
yapılabilir.<br />
PdfCell defaultCell = table.getDefaultCell();<br />
defaultCell.setBorder(PdfCell.NO_BORDER);<br />
23
daha fazla default ayar yapılabilir.<br />
//eklenecek hücreler yukarda <strong>ve</strong>r<strong>ile</strong>n özelliğe sahip olacaktır:<br />
table.addCell(new Paragraph("default text mode hücresi");<br />
table.addCell(new Phrase("default text mode hücresi ");<br />
8. Hücre Alignment<br />
Hücre hizalaması setHorizontalAlignment() <strong>ve</strong> setVerticalAlignment() metodları kullanılarak aşağıdaki<br />
şekilde yapılabilir:<br />
cell.setHorizontalAlignment(Element.ALIGN_LEFT);<br />
cell.setHorizontalAlignment(Element.ALIGN_CENTER);<br />
cell.setHorizontalAlignment(Element.ALIGN_RIGHT);<br />
cell.setVerticalAlignment(Element.ALIGN_TOP);<br />
cell.setVerticalAlignment(Element.ALIGN_MIDDLE);<br />
cell.setVerticalAlignment(Element.ALIGN_BOTTOM);<br />
Composite mode’da Paragraph objelerinin alignment ayarları değiştir<strong>ile</strong>rek her paragraf için özel<br />
hizalama yapılabilir.<br />
9. Hücre Indentation<br />
Hücre içeriğinin girintisi ayarlanabilir.<br />
setIndent() metoduyla hücre içindeki ilk paragrafın girintisi ayarlanabilir.<br />
setFollowingIndent() metoduyla hücre içindeki takip eden paragrafların girintisi ayarlanabilir.<br />
setRightIndent() metoduyla hücre içeriğinin sağ girintisi ayarlanabilir.<br />
10. Hücre Leading<br />
Hücredeki elemanların paragraf boşlukları değiştir<strong>ile</strong>bilir.<br />
Composite mode’a eklenen objenin leading özelliği ayarlanıp o şekilde eklenebilir, örneğin bir<br />
paragrafın leading özelliği hücreye eklemeden değiştirilmelidir.<br />
Text mode’da leading özelliği tüm hücreler için değiştirilmelidir, bunu yapmak için setLeading()<br />
metodu kullanılır. Bu metod iki parametre alır. Sabit boşluk <strong>ve</strong> font yüksekliği üstünden hesaplanan<br />
boşluk.<br />
cell.setLeading(15f, 0f);<br />
cell.setLeading(0f, 1.5f);<br />
İlk metod paragraf aralığını 15 points + 0 x font yüksekliği şeklikde ayarlar.<br />
İkinci metod paragraf aralığını 0 points + 1,5 x font yüksekliği şeklikde ayarlar.<br />
11. Hücre Padding<br />
Aşağıdaki örnekte <strong>ve</strong>r<strong>ile</strong>n metodlarla hücre sınırı <strong>ve</strong> içerik arasındaki mesafe (Padding) ayarlanabilir:<br />
24
cell.setPadding(5);<br />
cell.setPaddingLeft(8);<br />
cell.setPaddingRight(8);<br />
cell.setPaddingTop(8);<br />
cell.setPaddingBottom(8);<br />
12. Hücre Borders and Colors<br />
Aşağıdaki metodlar kullanılarak hücre çerçe<strong>ve</strong> <strong>ve</strong> renkleri değiştir<strong>ile</strong>bilir:<br />
cell.setBackgroundColor(BaseColor.RED);<br />
//arkaplan rengini kırmızı yap.<br />
cell.setBorder(Rectangle.NO_BORDER);<br />
// çerçe<strong>ve</strong>leri kaldır<br />
cell.setBorderWidth (3f); // çerçe<strong>ve</strong> genişliğini 3 birim olarak ayarla<br />
cell.setBorderWidthLeft (1f);<br />
cell.setBorderWidthRight (1f);<br />
cell.setBorderWidthTop (1f);<br />
cell.setBorderWidthBottom(1f);<br />
cell.setBorderColor (BaseColor.BLUE); // çerçe<strong>ve</strong> rengini mavi yap<br />
cell.setBorderColorLeft (BaseColor.GREEN);<br />
cell.setBorderColorRight (BaseColor.GREEN);<br />
cell.setBorderColorTop (BaseColor.GREEN);<br />
cell.setBorderColorBottom(BaseColor.GREEN);<br />
Hücre çerçe tipi kalın olarak ayarlanmışsa, çerçe<strong>ve</strong>ler <strong>ile</strong> içeriğin çakışmaması için aşağıdaki örnekteki<br />
gibi setUserBorderPadding(true) şeklinde bir ayar yapılmalıdır:<br />
cell.setUserBorderPadding(true);<br />
13. Hücre Rotation<br />
setRotation() metoduyla aşağıdaki gibi, hücre içeriği döndürülebilir:<br />
cell.setRotation(90);<br />
14. Tablo <strong>ve</strong> imajlar<br />
IText <strong>ile</strong> bir imaj tablo hücresine eklenebilir. Bu yapılırken hücre imajın boyutunu ya da imaj hücrenin<br />
boyutunu alabilir. Bunu yapmak için sökonusu imaj, imajın mı hücre boyutunu alacağı yoksa hücrenin<br />
mi imaj boyutunu alacağına ilişkin boolean bir değerle birlikte PdfPCell sınıfının constructor’ına<br />
parametreyle <strong>ve</strong>rilmelidir. Eğer imajın hücrenin boyutunu alması isteniyorsa boolean parametre true,<br />
tersine, hücrenin imajın boyutunu alması isteniyorsa false set edilmelidir.<br />
import com.itextpdf.text.Document;<br />
import com.itextpdf.text.Paragraph;<br />
25
import com.itextpdf.text.Image;<br />
import com.itextpdf.text.pdf.PdfPCell;<br />
import com.itextpdf.text.pdf.PdfPTable;<br />
import com.itextpdf.text.pdf.PdfWriter;<br />
import java.io.F<strong>ile</strong>OutputStream;<br />
import java.net.URL;<br />
public class Table3Example {<br />
public static void main(String[] args) {<br />
Document document = new Document();<br />
try {<br />
PdfWriter.getInstance(document, new F<strong>ile</strong>OutputStream("Table.pdf"));<br />
document.open();<br />
PdfPTable table = new PdfPTable(2); // 2 kolon.<br />
Image image = Image.getInstance("C:/tmp/allianz.jpg");<br />
PdfPCell cell1 = new PdfPCell(new Paragraph("1. Hücre"));<br />
PdfPCell cell2 = new PdfPCell(image, true);<br />
table.addCell(cell1);<br />
table.addCell(cell2);<br />
PdfPCell cell3 = new PdfPCell(new Paragraph("3. Hücre "));<br />
PdfPCell cell4 = new PdfPCell(new Paragraph("2. Hücre "));<br />
table.addCell(cell3);<br />
table.addCell(cell4);<br />
document.add(table);<br />
document.close();<br />
} catch(Exception e){<br />
e.printStackTrace();<br />
}<br />
}<br />
}<br />
26
15. İç tablolar<br />
PdfTable nesnesi PdfCell nesnesinin içine eklenebilir, bu şekilde tablo içinde tablo yaratılmış olur.<br />
İlgili kod <strong>ve</strong> görsel aşağıda <strong>ve</strong>rilmiştir:<br />
import com.itextpdf.text.Document;<br />
import com.itextpdf.text.Paragraph;<br />
import com.itextpdf.text.pdf.PdfPCell;<br />
import com.itextpdf.text.pdf.PdfPTable;<br />
import com.itextpdf.text.pdf.PdfWriter;<br />
import java.io.F<strong>ile</strong>OutputStream;<br />
public class Table2Example {<br />
public static void main(String[] args) {<br />
Document document = new Document();<br />
try {<br />
PdfWriter.getInstance(document, new F<strong>ile</strong>OutputStream("Table.pdf"));<br />
document.open();<br />
PdfPTable table = new PdfPTable(3);<br />
27
PdfPCell cell1 = new PdfPCell(new Paragraph("1. Hücre "));<br />
PdfPCell cell2 = new PdfPCell(new Paragraph("2. Hücre "));<br />
PdfPCell cell3 = new PdfPCell(new Paragraph("3. Hücre "));<br />
PdfPTable nestedTable = new PdfPTable(2);<br />
nestedTable.addCell(new Paragraph("1. iç Hücre "));<br />
nestedTable.addCell(new Paragraph("2. İç Hücre "));<br />
cell3.addElement(nestedTable);<br />
table.addCell(cell1);<br />
table.addCell(cell2);<br />
table.addCell(cell3);<br />
document.add(table);<br />
document.close();<br />
} catch(Exception e){<br />
e.printStackTrace();<br />
}<br />
}<br />
}<br />
Imajlar<br />
IText içinde imajlarla ilgili ölçeklendirme, döndürme, maskeleme, belirli bir noktaya yerleştirme,<br />
çerçe<strong>ve</strong> ekleme, hizalama vb. bir çok işlem yapılabilir, ancak burada sadece aşağıdaki gib bir kaç basit<br />
işleme yer <strong>ve</strong>receğiz, bunlar:<br />
1. İmaj yaratma<br />
2. Belirli bir noktaya yerleştirme<br />
3. Ölçekleme<br />
4. Döndürme<br />
1. İmaj yaratma<br />
<strong>PDF</strong> dokümanlarına imaj eklemek için iText içinde com.itextpdf.text.Image sınıfı kullanılır. Bunun<br />
yanında aşağıdaki gibi bir dosyadan ya da URL adresinden de <strong>PDF</strong> dokümanına imaj eklenebilir:<br />
28
import com.itextpdf.text.Document;<br />
import com.itextpdf.text.Image;<br />
import com.itextpdf.text.pdf.PdfWriter;<br />
import java.io.F<strong>ile</strong>OutputStream;<br />
public class ImageExample {<br />
public static void main(String[] args) {<br />
Document document = new Document();<br />
try {<br />
PdfWriter.getInstance(document, new F<strong>ile</strong>OutputStream("Image.pdf"));<br />
document.open();<br />
String imageUrl = "http://www.allianz.com.tr/HomePage/_img/logo.png";<br />
Image image1 = Image.getInstance(new URL(imageUrl));<br />
document.add(image1);<br />
document.close();<br />
} catch(Exception e){<br />
e.printStackTrace();<br />
}<br />
}<br />
}<br />
Kod çıktısı aşağıdaki gibidir:<br />
29
2. Belirli bir noktaya yerleştirme<br />
Bir imajı belirli bir pozisyona yerleştirmek için X <strong>ve</strong> Y noktalarını parametre olarak alan<br />
setAbsolutePosition() metodu kullanılabilir. Ancak bu işlem imaj dokümana eklenmeden önce<br />
yapılmalıdır. Dikkat edilmesi gereken nokta X <strong>ve</strong> Y kordinatlarının sol alt köşeden başladığıdır.<br />
image.setAbsolutePosition(500f, 650f);<br />
3. Ölçekleme<br />
Aşağıdaki imaj metodları kullanılarak bir imajın boyutları değiştir<strong>ile</strong>bilir:<br />
scaleAbsolute()<br />
scaleAbsoluteWidth()<br />
scaleAbsoluteHeight()<br />
scalePercentage()<br />
scaleToFit()<br />
Bu metodlarla ilgili aşağıdaki gibi bir örnek <strong>ve</strong>r<strong>ile</strong>bilir:<br />
import com.itextpdf.text.Document;<br />
import com.itextpdf.text.Image;<br />
import com.itextpdf.text.pdf.PdfWriter;<br />
import java.io.F<strong>ile</strong>OutputStream;<br />
public class ImageExample {<br />
public static void main(String[] args) {<br />
Document document = new Document();<br />
try {<br />
PdfWriter.getInstance(document, new F<strong>ile</strong>OutputStream("Image.pdf"));<br />
document.open();<br />
String imageUrl = " http://www.allianz.com.tr/HomePage/_img/logo.png";<br />
Image image1 = Image.getInstance(new URL(imageUrl));<br />
image1.scaleAbsolute(150f, 150f);<br />
document.add(image1);<br />
Image image2 = Image.getInstance(new URL(imageUrl));<br />
30
image2.scalePercent(300f);<br />
document.add(image2);<br />
document.close();<br />
} catch(Exception e){<br />
e.printStackTrace();<br />
}<br />
}<br />
}<br />
Yukarıdaki kodun çıktısı şu şekildedir:<br />
4. Döndürme<br />
Aşağıdaki metodlar kullanılarak iText <strong>ile</strong> hazırlanan <strong>PDF</strong> dokümanları içindeki imajlar döndürülebilir:<br />
setRotationDegrees()<br />
setRotation()<br />
31
Sırasıyla örnek kod <strong>ve</strong> çıktısı aşağıdaki gibidir:<br />
import com.itextpdf.text.Document;<br />
import com.itextpdf.text.Image;<br />
import com.itextpdf.text.pdf.PdfWriter;<br />
import java.io.F<strong>ile</strong>OutputStream;<br />
public class ImageExample {<br />
public static void main(String[] args) {<br />
Document document = new Document();<br />
try {<br />
PdfWriter.getInstance(document, new F<strong>ile</strong>OutputStream("Image.pdf"));<br />
document.open();<br />
String imageUrl = " http://www.allianz.com.tr/HomePage/_img/logo.png";<br />
Image image = Image.getInstance(new URL(imageUrl));<br />
document.add(image1);<br />
Image image2 = Image.getInstance(new URL(imageUrl));<br />
image.setRotationDegrees(45f);<br />
document.add(image2);<br />
document.close();<br />
} catch(Exception e){<br />
e.printStackTrace();<br />
}<br />
}<br />
}<br />
32
33
Alt <strong>ve</strong> Üst yazılar<br />
IText içindeki Chunk sınıfı <strong>ile</strong> setTextRise() metodu kullanılarak yazılar üste (superscript) ya da alta<br />
(subscript) gelecek şekilde yazılabilir. Yazıları üste yazmak için setTextRise() metoduna pozitif<br />
rakamlar, alta yazmak için ise negatif rakamlar yazmak gerekir.<br />
import com.itextpdf.text.Chunk;<br />
import com.itextpdf.text.Document;<br />
import com.itextpdf.text.DocumentException;<br />
import com.itextpdf.text.pdf.PdfWriter;<br />
import java.io.F<strong>ile</strong>NotFoundException;<br />
import java.io.F<strong>ile</strong>OutputStream;<br />
public class SuperSubScriptExample {<br />
public static void main(String[] args) {<br />
Document document = new Document();<br />
try {<br />
PdfWriter.getInstance(document, new F<strong>ile</strong>OutputStream("SuperSubScript.pdf"));<br />
document.open();<br />
Chunk normalText = new Chunk("Normal text normal y-pozisyonunda. ");<br />
document.add(normalText);<br />
Chunk superScript = new Chunk("Üstyazi");<br />
superScript.setTextRise(5f);<br />
document.add(superScript);<br />
Chunk moreNormalText = new Chunk(". Diger normal y-pozisyonundaki yazi. ");<br />
document.add(moreNormalText);<br />
Chunk subScript = new Chunk("Altyazi");<br />
subScript.setTextRise(-5f);<br />
document.add(subScript);<br />
document.close();<br />
} catch (DocumentException e) {<br />
e.printStackTrace();<br />
} catch (F<strong>ile</strong>NotFoundException e) {<br />
e.printStackTrace();<br />
}<br />
34<br />
}
}<br />
Kod çıktısı aşağıdaki gibidir:<br />
Alt <strong>ve</strong> Üst Çizg<strong>ile</strong>r<br />
IText içindeki Chunk sınıfı <strong>ile</strong> setUnderline () metodu kullanılarak yazılar üst çizgili ya da alt çizgili<br />
şekilde yazılabilir. Yazının varsayılandan daha da altını çizmek için setUnderline () metoduna negatif<br />
rakamlar, üstünü çizmek için ise pozitif rakamlar yazmak gerekir.<br />
import com.itextpdf.text.Chunk;<br />
import com.itextpdf.text.Document;<br />
import com.itextpdf.text.DocumentException;<br />
import com.itextpdf.text.Paragraph;<br />
import com.itextpdf.text.pdf.PdfWriter;<br />
import java.io.F<strong>ile</strong>NotFoundException;<br />
import java.io.F<strong>ile</strong>OutputStream;<br />
public class UnderlineStrikethroughExample {<br />
public static void main(String[] args) {<br />
Document document = new Document();<br />
try {<br />
PdfWriter.getInstance(document, new F<strong>ile</strong>OutputStream("AltUstCizgi.pdf"));<br />
document.open();<br />
Chunk underline = new Chunk("Underline. ");<br />
underline.setUnderline(0.1f, -2f); //0.1 kalınlık, -2 y-location<br />
document.add(underline);<br />
document.add(new Paragraph(" "));<br />
35
Chunk strikethrough = new Chunk("Strikethrough.");<br />
strikethrough.setUnderline(0.1f, 3f); //0.1 kalınlık, 2 y-location<br />
document.add(strikethrough);<br />
document.close();<br />
} catch (DocumentException e) {<br />
e.printStackTrace();<br />
} catch (F<strong>ile</strong>NotFoundException e) {<br />
e.printStackTrace();<br />
}<br />
}<br />
}<br />
Kod, aşağıdaki gibi bir çıktı üretir:<br />
Font<br />
Text <strong>ile</strong> ilgili bir çok objede Font kullanılır (Chunk, Phrase, Paragraph vb.) <strong>ve</strong> burada anlatılamayacak<br />
kadar çok işlem yapılabilir. Burada sadece basitçe değin<strong>ile</strong>cektir.<br />
Font kullanabilmek için öncelikle Font objesini yaratmak gerekir. Ardından yaratılan font objesi<br />
kullanılacak text objesine, onun constructor’ı yoluyla set edilmelidir.<br />
import com.itextpdf.text.*;<br />
import com.itextpdf.text.pdf.PdfWriter;<br />
import java.io.F<strong>ile</strong>OutputStream;<br />
import java.io.F<strong>ile</strong>NotFoundException;<br />
public class FontExample {<br />
public static void main(String[] args) {<br />
Document document = new Document();<br />
36
try {<br />
PdfWriter.getInstance(document, new F<strong>ile</strong>OutputStream("Font.pdf"));<br />
Font ft1 = new Font(Font.FontFamily.HELVETICA, 25, Font.BOLD);<br />
Font ft2 = new Font(Font.FontFamily.COURIER,18,Font.ITALIC | Font.UNDERLINE);<br />
Font ft3 = new Font(Font.FontFamily.TIMES_ROMAN, 27);<br />
document.open();<br />
document.add(new Chunk( "Örnek cümle 1. ", ft1));<br />
document.add(new Phrase( "İkinci örnek cümle 2. ", ft2));<br />
document.add(new Paragraph("Başka bir örnek cümle 3. ", ft3));<br />
document.close();<br />
} catch (DocumentException e) {<br />
e.printStackTrace();<br />
} catch (F<strong>ile</strong>NotFoundException e) {<br />
e.printStackTrace();<br />
}<br />
}<br />
}<br />
Kodun çıktısı aşağıdaki gibidir:<br />
BaseFont<br />
Dikkat edilirse İ ya da ş gibi sadece Türkçe’ye özgü karakterler çıktıda görülmemektedir. Bunun sebebi<br />
iText’in text için biz belirtmedikçe her zaman standart font’u tercih etmesinden kaynaklanır. Bunu<br />
engellemek için BaseFont objesini kullanarak kendi fontumuzu (tercihe göre Türkçe desteği olan)<br />
yaratmalıyız.<br />
BaseFont.createFont(fontIsmi, kod, gomuluMu);<br />
37
BaseFont objesinin aldığı parametrelere dikkat edecek olursak fontIsmi parametresi <strong>ile</strong> font’u<br />
seçiyoruz, istersek font objesini (örn. arial.ttf) classpath’e tanımlayıp oradaki adresi de <strong>ve</strong>rebiliriz. Kod<br />
parametresi <strong>ile</strong> kullandığımız font’un hangi dil kodlamasını kullanması gerektiğini seçiyoruz,<br />
gomuluMu parametresiyle de fontun yaratılacak <strong>PDF</strong> dosyasına gömülüp gömülmeyeceğine karar<br />
<strong>ve</strong>riyoruz. Yukardaki kodun değiştirilmiş örnek kullanımı <strong>ve</strong> çıktısı aşağıdaki gibidir:<br />
import com.itextpdf.text.*;<br />
import com.itextpdf.text.pdf.PdfWriter;<br />
import java.io.F<strong>ile</strong>OutputStream;<br />
import java.io.F<strong>ile</strong>NotFoundException;<br />
public class FontExample {<br />
public static void main(String[] args) {<br />
Document document = new Document();<br />
try {<br />
PdfWriter.getInstance(document, new F<strong>ile</strong>OutputStream("Font.pdf"));<br />
BaseFont arialTR = BaseFont.createFont("C:/tmp/arial.ttf", "CP1254",<br />
BaseFont.EMBEDDED); // Türkçe’nin dil kodu CP1254<br />
Font ft1 = new Font(arialTR, 25, Font.BOLD);<br />
Font ft2 = new Font(Font.FontFamily.COURIER,18,Font.ITALIC | Font.UNDERLINE);<br />
Font ft3 = new Font(arialTR, 27);<br />
document.open();<br />
document.add(new Chunk( "Örnek cümle 1. ", ft1));<br />
document.add(new Phrase( "İkinci örnek cümle 2. ", ft2));<br />
document.add(new Paragraph("Başka bir örnek cümle 3. ", ft3));<br />
document.close();<br />
} catch (DocumentException e) {<br />
e.printStackTrace();<br />
} catch (F<strong>ile</strong>NotFoundException e) {<br />
e.printStackTrace();<br />
}<br />
}<br />
}<br />
38
Dikkat edilirse Courrier font’uyla yazılmış yazıdaki Türkçe’ye özgü İ harfi görünmezken kendi<br />
yarattığımız font’la yazılmış ş gibi Türkçe karakterler görülmektedir.<br />
39
Faydalanılan kaynaklar:<br />
http://itextpdf.com<br />
http://tutorials.jenkov.com/java-itext<br />
http://www.vogella.com/articles/Java<strong>PDF</strong>/<br />
40