Sunteți pe pagina 1din 6

86

Creating PDF with Java and iText - Tutorial


Lars Vogel
Version 0.5 Copyright 2008 -2010 Lars Vogel 11.10.2010
Revision History Revision 0.1 28.06.2009 Lars Vogel Lars Vogel Created

Free tutorial, donate to support

by Lars Vogel

Revision 0.2 - 0.4

30.06.2009 - 11.10.2010

bugfixes and enhancements

Java and PDF with iText This article demonstrate how to create PDF files with Java and the iText library. In this tutorial iText version 5.0.x is used

Table of Contents
1. Overview 2. Installation 3. Create a PDF 4. Formatting your output 5. Read an existing pdf 6. Thank you 7. Questions and Discussion 8. Links and Literature 8.1. Source Code 8.2. iText Resources 8.3. vogella Resources

1. Overview
iText is a Java library originally created by Bruno Lowagie which allows to create PDF, read PDF and manipulate them. The following tutorial will show how to create PDF files with iText. This tutorial assumes that you have basis Java and Eclipse knowledge. iText has a hierarchical structure. The smallest text unit is a "Chunk" which is a String with a pre-defined font. A "Phrase" combines several Chunks and allows to define line spacing. "Paragraph" is a subclass of "Phrase" and allows to define more layout attributes, e.g. margins. The class "Anchor" is a subclass of "Paragraph" and serves as the basis for hyperlinks in the generated PDF.

2. Installation
Download the iText core binary from the webpage http://sourceforge.net/projects/itext/ . The download contains one jar which is required if you want to use iText.

3. Create a PDF
Create a new Java project "de.vogella.itext.write" with the package "de.vogella.itext.write". Create a folder "lib" and put the iText library (jar file) into this folder. Add the jar to your classpath. Create the following class "FirstPdf.java" . I assume that the coding is pretty much self-explaining. I tried to add lots of comments to make it easier to understand. For more complex examples have a look at the

iText Homepage .
p a c k a g ed e . v o g e l l a . i t e x t . w r i t e ; i m p o r tj a v a . i o . F i l e O u t p u t S t r e a m ; i m p o r tj a v a . u t i l . D a t e ; i m p o r tc o m . i t e x t p d f . t e x t . A n c h o r ; i m p o r tc o m . i t e x t p d f . t e x t . B a d E l e m e n t E x c e p t i o n ; i m p o r tc o m . i t e x t p d f . t e x t . B a s e C o l o r ; i m p o r tc o m . i t e x t p d f . t e x t . C h a p t e r ; i m p o r tc o m . i t e x t p d f . t e x t . D o c u m e n t ; i m p o r tc o m . i t e x t p d f . t e x t . D o c u m e n t E x c e p t i o n ; i m p o r tc o m . i t e x t p d f . t e x t . E l e m e n t ; i m p o r tc o m . i t e x t p d f . t e x t . F o n t ; i m p o r tc o m . i t e x t p d f . t e x t . L i s t ; i m p o r tc o m . i t e x t p d f . t e x t . L i s t I t e m ; i m p o r tc o m . i t e x t p d f . t e x t . P a r a g r a p h ; i m p o r tc o m . i t e x t p d f . t e x t . P h r a s e ; i m p o r tc o m . i t e x t p d f . t e x t . S e c t i o n ; i m p o r tc o m . i t e x t p d f . t e x t . p d f . P d f P C e l l ; i m p o r tc o m . i t e x t p d f . t e x t . p d f . P d f P T a b l e ; i m p o r tc o m . i t e x t p d f . t e x t . p d f . P d f W r i t e r ;

p u b l i cc l a s sF i r s t P d f{ p r i v a t es t a t i cS t r i n gF I L E=" c : / t e m p / F i r s t P d f . p d f " ; p r i v a t es t a t i cF o n tc a t F o n t=n e wF o n t ( F o n t . F o n t F a m i l y . T I M E S _ R O M A N ,1 8 , F o n t . B O L D ) ; p r i v a t es t a t i cF o n tr e d F o n t=n e wF o n t ( F o n t . F o n t F a m i l y . T I M E S _ R O M A N ,1 2 , F o n t . N O R M A L ,B a s e C o l o r . R E D ) ; p r i v a t es t a t i cF o n ts u b F o n t=n e wF o n t ( F o n t . F o n t F a m i l y . T I M E S _ R O M A N ,1 6 , F o n t . B O L D ) ; p r i v a t es t a t i cF o n ts m a l l B o l d=n e wF o n t ( F o n t . F o n t F a m i l y . T I M E S _ R O M A N ,1 2 , F o n t . B O L D ) ; p u b l i cs t a t i cv o i dm a i n ( S t r i n g [ ]a r g s ){ t r y{ D o c u m e n td o c u m e n t=n e wD o c u m e n t ( ) ; P d f W r i t e r . g e t I n s t a n c e ( d o c u m e n t ,n e wF i l e O u t p u t S t r e a m ( F I L E ) ) ; d o c u m e n t . o p e n ( ) ; a d d M e t a D a t a ( d o c u m e n t ) ; a d d T i t l e P a g e ( d o c u m e n t ) ; a d d C o n t e n t ( d o c u m e n t ) ; d o c u m e n t . c l o s e ( ) ; }c a t c h( E x c e p t i o ne ){ e . p r i n t S t a c k T r a c e ( ) ; } } / /i T e x ta l l o w st oa d dm e t a d a t at ot h eP D Fw h i c hc a nb ev i e w e di ny o u rA d o b e / /R e a d e r / /u n d e rF i l e>P r o p e r t i e s p r i v a t es t a t i cv o i da d d M e t a D a t a ( D o c u m e n td o c u m e n t ){ d o c u m e n t . a d d T i t l e ( " M yf i r s tP D F " ) ; d o c u m e n t . a d d S u b j e c t ( " U s i n gi T e x t " ) ; d o c u m e n t . a d d K e y w o r d s ( " J a v a ,P D F ,i T e x t " ) ; d o c u m e n t . a d d A u t h o r ( " L a r sV o g e l " ) ; d o c u m e n t . a d d C r e a t o r ( " L a r sV o g e l " ) ; } p r i v a t es t a t i cv o i da d d T i t l e P a g e ( D o c u m e n td o c u m e n t ) t h r o w sD o c u m e n t E x c e p t i o n{ P a r a g r a p hp r e f a c e=n e wP a r a g r a p h ( ) ; / /W ea d do n ee m p t yl i n e a d d E m p t y L i n e ( p r e f a c e ,1 ) ; / /L e t sw r i t eab i gh e a d e r p r e f a c e . a d d ( n e wP a r a g r a p h ( " T i t l eo ft h ed o c u m e n t " ,c a t F o n t ) ) ; a d d E m p t y L i n e ( p r e f a c e ,1 ) ; / /W i l lc r e a t e :R e p o r tg e n e r a t e db y :_ n a m e ,_ d a t e p r e f a c e . a d d ( n e wP a r a g r a p h ( " R e p o r tg e n e r a t e db y :"+S y s t e m . g e t P r o p e r t y ( " u s e r . n a m e " ) +" ,"+n e wD a t e ( ) ,/ / $ N O N N L S 1 $/ / $ N O N N L S 2 $/ / $ N O N N L S 3 $ s m a l l B o l d ) ) ; a d d E m p t y L i n e ( p r e f a c e ,3 ) ; p r e f a c e . a d d ( n e wP a r a g r a p h ( " T h i sd o c u m e n td e s c r i b e ss o m e t h i n gw h i c hi sv e r yi m p o r t a n t" , s m a l l B o l d ) ) ; a d d E m p t y L i n e ( p r e f a c e ,8 ) ; p r e f a c e . a d d ( n e wP a r a g r a p h ( " T h i sd o c u m e n ti sap r e l i m i n a r yv e r s i o na n dn o ts u b j e c tt oy o u rl i c e n s ea g r e e m e n to ra n yo t h e ra g r e e m e n tw i t hv o g e l l a . c o m; ) . " , r e d F o n t ) ) ; d o c u m e n t . a d d ( p r e f a c e ) ; / /S t a r tan e wp a g e d o c u m e n t . n e w P a g e ( ) ; } p r i v a t es t a t i cv o i da d d C o n t e n t ( D o c u m e n td o c u m e n t )t h r o w sD o c u m e n t E x c e p t i o n{ A n c h o ra n c h o r=n e wA n c h o r ( " F i r s tC h a p t e r " ,c a t F o n t ) ; a n c h o r . s e t N a m e ( " F i r s tC h a p t e r " ) ; / /S e c o n dp a r a m e t e ri st h en u m b e ro ft h ec h a p t e r C h a p t e rc a t P a r t=n e wC h a p t e r ( n e wP a r a g r a p h ( a n c h o r ) ,1 ) ;

P a r a g r a p hs u b P a r a=n e wP a r a g r a p h ( " S u b c a t e g o r y1 " ,s u b F o n t ) ; S e c t i o ns u b C a t P a r t=c a t P a r t . a d d S e c t i o n ( s u b P a r a ) ; s u b C a t P a r t . a d d ( n e wP a r a g r a p h ( " H e l l o " ) ) ; s u b P a r a=n e wP a r a g r a p h ( " S u b c a t e g o r y2 " ,s u b F o n t ) ; s u b C a t P a r t=c a t P a r t . a d d S e c t i o n ( s u b P a r a ) ; s u b C a t P a r t . a d d ( n e wP a r a g r a p h ( " P a r a g r a p h1 " ) ) ; s u b C a t P a r t . a d d ( n e wP a r a g r a p h ( " P a r a g r a p h2 " ) ) ; s u b C a t P a r t . a d d ( n e wP a r a g r a p h ( " P a r a g r a p h3 " ) ) ; / /A d dal i s t c r e a t e L i s t ( s u b C a t P a r t ) ; P a r a g r a p hp a r a g r a p h=n e wP a r a g r a p h ( ) ; a d d E m p t y L i n e ( p a r a g r a p h ,5 ) ; s u b C a t P a r t . a d d ( p a r a g r a p h ) ; / /A d dat a b l e c r e a t e T a b l e ( s u b C a t P a r t ) ; / /N o wa d da l lt h i st ot h ed o c u m e n t d o c u m e n t . a d d ( c a t P a r t ) ; / /N e x ts e c t i o n a n c h o r=n e wA n c h o r ( " S e c o n dC h a p t e r " ,c a t F o n t ) ; a n c h o r . s e t N a m e ( " S e c o n dC h a p t e r " ) ; / /S e c o n dp a r a m e t e ri st h en u m b e ro ft h ec h a p t e r c a t P a r t=n e wC h a p t e r ( n e wP a r a g r a p h ( a n c h o r ) ,1 ) ; s u b P a r a=n e wP a r a g r a p h ( " S u b c a t e g o r y " ,s u b F o n t ) ; s u b C a t P a r t=c a t P a r t . a d d S e c t i o n ( s u b P a r a ) ; s u b C a t P a r t . a d d ( n e wP a r a g r a p h ( " T h i si sav e r yi m p o r t a n tm e s s a g e " ) ) ; / /N o wa d da l lt h i st ot h ed o c u m e n t d o c u m e n t . a d d ( c a t P a r t ) ; } p r i v a t es t a t i cv o i dc r e a t e T a b l e ( S e c t i o ns u b C a t P a r t ) t h r o w sB a d E l e m e n t E x c e p t i o n{ P d f P T a b l et a b l e=n e wP d f P T a b l e ( 3 ) ; / /t . s e t B o r d e r C o l o r ( B a s e C o l o r . G R A Y ) ; / /t . s e t P a d d i n g ( 4 ) ; / /t . s e t S p a c i n g ( 4 ) ; / /t . s e t B o r d e r W i d t h ( 1 ) ; P d f P C e l lc 1=n e wP d f P C e l l ( n e wP h r a s e ( " T a b l eH e a d e r1 " ) ) ; c 1 . s e t H o r i z o n t a l A l i g n m e n t ( E l e m e n t . A L I G N _ C E N T E R ) ; t a b l e . a d d C e l l ( c 1 ) ; c 1=n e wP d f P C e l l ( n e wP h r a s e ( " T a b l eH e a d e r2 " ) ) ; c 1 . s e t H o r i z o n t a l A l i g n m e n t ( E l e m e n t . A L I G N _ C E N T E R ) ; t a b l e . a d d C e l l ( c 1 ) ; c 1=n e wP d f P C e l l ( n e wP h r a s e ( " T a b l eH e a d e r3 " ) ) ; c 1 . s e t H o r i z o n t a l A l i g n m e n t ( E l e m e n t . A L I G N _ C E N T E R ) ; t a b l e . a d d C e l l ( c 1 ) ; t a b l e . s e t H e a d e r R o w s ( 1 ) ; t a b l e . a d d C e l l ( " 1 . 0 " ) ; t a b l e . a d d C e l l ( " 1 . 1 " ) ; t a b l e . a d d C e l l ( " 1 . 2 " ) ; t a b l e . a d d C e l l ( " 2 . 1 " ) ; t a b l e . a d d C e l l ( " 2 . 2 " ) ; t a b l e . a d d C e l l ( " 2 . 3 " ) ; s u b C a t P a r t . a d d ( t a b l e ) ; } p r i v a t es t a t i cv o i dc r e a t e L i s t ( S e c t i o ns u b C a t P a r t ){ L i s tl i s t=n e wL i s t ( t r u e ,f a l s e ,1 0 ) ; l i s t . a d d ( n e wL i s t I t e m ( " F i r s tp o i n t " ) ) ; l i s t . a d d ( n e wL i s t I t e m ( " S e c o n dp o i n t " ) ) ; l i s t . a d d ( n e wL i s t I t e m ( " T h i r dp o i n t " ) ) ; s u b C a t P a r t . a d d ( l i s t ) ; } p r i v a t es t a t i cv o i da d d E m p t y L i n e ( P a r a g r a p hp a r a g r a p h ,i n tn u m b e r ){ f o r( i n ti=0 ;i<n u m b e r ;i + + ){ p a r a g r a p h . a d d ( n e wP a r a g r a p h ( "" ) ) ; } } }

The resulting pdf should look like the following.

vogella.com Tutorials Training Services Publications

Connect

4. Formatting your output


Paragraph allows to set the alignment and the indentation. For this example create project "de.vogella.itext.position" similar to the previously created ones. Create the following class "PositionPdf.java".
p a c k a g ed e . v o g e l l a . i t e x t . p o s i t i o n ; i m p o r tj a v a . i o . F i l e O u t p u t S t r e a m ; i m p o r tc o m . i t e x t p d f . t e x t . D o c u m e n t ; i m p o r tc o m . i t e x t p d f . t e x t . E l e m e n t ; i m p o r tc o m . i t e x t p d f . t e x t . P a r a g r a p h ; i m p o r tc o m . i t e x t p d f . t e x t . p d f . P d f W r i t e r ; p u b l i cc l a s sP o s i t i o n P d f{ p r i v a t es t a t i cS t r i n gF I L E=" P o s i t i o n P d f . p d f " ; p u b l i cs t a t i cv o i dm a i n ( S t r i n g [ ]a r g s ){ t r y{ D o c u m e n td o c u m e n t=n e wD o c u m e n t ( ) ; P d f W r i t e r . g e t I n s t a n c e ( d o c u m e n t ,n e wF i l e O u t p u t S t r e a m ( F I L E ) ) ; d o c u m e n t . o p e n ( ) ; / /L e f t P a r a g r a p hp a r a g r a p h=n e wP a r a g r a p h ( " T h i si sr i g h ta l i g n e dt e x t " ) ; p a r a g r a p h . s e t A l i g n m e n t ( E l e m e n t . A L I G N _ R I G H T ) ; d o c u m e n t . a d d ( p a r a g r a p h ) ; / /C e n t e r e d p a r a g r a p h=n e wP a r a g r a p h ( " T h i si sc e n t e r e dt e x t " ) ; p a r a g r a p h . s e t A l i g n m e n t ( E l e m e n t . A L I G N _ C E N T E R ) ; d o c u m e n t . a d d ( p a r a g r a p h ) ; / /L e f t p a r a g r a p h=n e wP a r a g r a p h ( " T h i si sl e f ta l i g n e dt e x t " ) ; p a r a g r a p h . s e t A l i g n m e n t ( E l e m e n t . A L I G N _ L E F T ) ; d o c u m e n t . a d d ( p a r a g r a p h ) ; / /L e f tw i t hi n d e n t a t i o n p a r a g r a p h=n e wP a r a g r a p h ( " T h i si sl e f ta l i g n e dt e x tw i t hi n d e n t a t i o n " ) ; p a r a g r a p h . s e t A l i g n m e n t ( E l e m e n t . A L I G N _ L E F T ) ; p a r a g r a p h . s e t I n d e n t a t i o n L e f t ( 5 0 ) ; d o c u m e n t . a d d ( p a r a g r a p h ) ; d o c u m e n t . c l o s e ( ) ; }c a t c h( E x c e p t i o ne ){ e . p r i n t S t a c k T r a c e ( ) ; } } }

BACK TO TOP

5. Read an existing pdf


iText allows to read existing pdf's and include them into your own pdf. The following example will create page 2 of the previous example and create a new document with this page. Create a new Java project "de.vogella.itext.readpdf" with the package "de.vogella.itext.read". Create a folder "lib" and put the iText library (jar file) into this folder. Add the jar to your classpath. Create the following class "ReadAndUsePdf.java".
p a c k a g ed e . v o g e l l a . i t e x t . r e a d ; i m p o r tj a v a . i o . F i l e O u t p u t S t r e a m ; i m p o r tj a v a . i o . I O E x c e p t i o n ; i m p o r tc o m . i t e x t p d f . t e x t . D o c u m e n t ; i m p o r tc o m . i t e x t p d f . t e x t . D o c u m e n t E x c e p t i o n ; i m p o r tc o m . i t e x t p d f . t e x t . I m a g e ; i m p o r tc o m . i t e x t p d f . t e x t . p d f . P d f I m p o r t e d P a g e ; i m p o r tc o m . i t e x t p d f . t e x t . p d f . P d f R e a d e r ; i m p o r tc o m . i t e x t p d f . t e x t . p d f . P d f W r i t e r ; p u b l i cc l a s sR e a d A n d U s e P d f{ p r i v a t es t a t i cS t r i n gI N P U T F I L E=" c : / t e m p / F i r s t P d f . p d f " ; p r i v a t es t a t i cS t r i n gO U T P U T F I L E=" c : / t e m p / R e a d P d f . p d f " ; p u b l i cs t a t i cv o i dm a i n ( S t r i n g [ ]a r g s )t h r o w sD o c u m e n t E x c e p t i o n , I O E x c e p t i o n{ D o c u m e n td o c u m e n t=n e wD o c u m e n t ( ) ; P d f W r i t e rw r i t e r=P d f W r i t e r . g e t I n s t a n c e ( d o c u m e n t , n e wF i l e O u t p u t S t r e a m ( O U T P U T F I L E ) ) ; d o c u m e n t . o p e n ( ) ; P d f R e a d e rr e a d e r=n e wP d f R e a d e r ( I N P U T F I L E ) ; i n tn=r e a d e r . g e t N u m b e r O f P a g e s ( ) ; P d f I m p o r t e d P a g ep a g e ; / /G ot h r o u g ha l lp a g e s f o r( i n ti=1 ;i< =n ;i + + ){ / /O n l yp a g en u m b e r2w i l lb ei n c l u d e d i f( i= =2 ){ p a g e=w r i t e r . g e t I m p o r t e d P a g e ( r e a d e r ,i ) ; I m a g ei n s t a n c e=I m a g e . g e t I n s t a n c e ( p a g e ) ; d o c u m e n t . a d d ( i n s t a n c e ) ; } } d o c u m e n t . c l o s e ( ) ; } }

6. Thank you
Please help me to support this article:

7. Questions and Discussion


Before posting questions, please see the vogella FAQ. If you have questions or find an error in this article please use the www.vogella.com Google Group. I have created a short list how to create good questions which might also help you.

8. Links and Literature


8.1. Source Code
Source Code of Examples

8.2. iText Resources


iText Homepage http://itextdocs.lowagie.com/tutorial/ Tutorial from iText homepage, lots of specific examples

8.3. vogella Resources


vogella Training Android and Eclipse Training from the vogella team Android Tutorial Introduction to Android Programming GWT Tutorial Program in Java and compile to JavaScript and HTML Eclipse RCP Tutorial Create native applications in Java JUnit Tutorial Test your application Git Tutorial Put everything you have under distributed version control system

S-ar putea să vă placă și