19.07.2017 Views

JAVA ile PDF Yaratma ve Düzenleme

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!