Jumpstart Tutorial
iText Presentation 26/07/2017
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
Jumpstart Tutorial
1. Basic Building blocks
2. PDF Syntax and Structure
3. Low level PDF creation
4. Combination of both approaches
5. Adding content to existing PDFs
6. Viewer Preferences
7. Metadata
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
Hello PDF World!
Creating a PDF programmatically
Get the PdfWriter
PdfWriter writer = new PdfWriter(dest);
Get the PdfDocument
PdfDocument pdf = new PdfDocument(writer);
Get the Document
Document document = new Document(pdf);
Add Text : Hello PDF!
[Link](new Paragraph("Hello PDF World!"));
Close the Document
[Link]();
3 Jumpstart tutorial
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
Basic Building blocks
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
Building blocks
Two fold approach to create and manipulate PDFs
High Level
Low Level
Mix of High and Low Level
At High Level, intuitive building blocks of a document are used
Document
Paragraph
List
Image
Chunk
Cell
Table etc
5 Jumpstart tutorial
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
Use of High Level APIs
High level approach hides complexity of PDF syntax
Setting a Font
Default font is Helvetica
Standard Type 1 fonts: 14 fonts recognized by PDF viewers
Adding a Paragraph
// Create a PdfFont
PdfFont font =
[Link](FontConstants.TIMES_ROMAN);
// Add a Paragraph
Paragraph paragraph = new Paragraph("iText in Bangkok");
[Link](font);
[Link](paragraph);
6 Jumpstart tutorial
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
Use of High Level APIs
Set Font properties
Font Size
Italic or bold
Font Color
//Code
Paragraph para = new Paragraph(“iText”);
[Link]([Link]).setStrokeWidth(0.5f)
[Link](24);
Text text = new Text(“Hello Bangkok”);
[Link]();
text. setBold();
[Link]([Link])
text. setStrokeWidth(0.5f)
7 Jumpstart tutorial
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
Use of High Level APIs
Adding lists
// Create a List
List list = new List();
// List items are idented by 12 user units
[Link](12);
// Creates a bulleted list
[Link]("\u2022");
[Link](font);
// Add ListItem objects
[Link](new ListItem(“Monday”));
[Link](new ListItem(“Tuesday”));
[Link](new ListItem(“Wednesday”)) ;
// Add the list to document
[Link](list);
[Link]();
8 Jumpstart tutorial
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
Use of High Level APIs
Adding Images to PDF
Use of ImageDataFactory
detects the type of image that is passed
processes it so that it can be used in a PDF
Code for adding images:
Image fox = new Image([Link](path1));
Image dog = new Image([Link](path2));
Paragraph p = new Paragraph("The quick brown ")
[Link](fox)
[Link](" jumps over the lazy ")
[Link](dog);
[Link](p);
9 Jumpstart tutorial
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
Use of High Level APIs
Adding a Table
Code
Table table = new Table(new float[]{4, 1, 3, 4, 3, 3});
[Link](100);
Size of array = No of table columns
Float value = Relative width of a column
The third column is three times as wide as the second column.
Width of the table relative to the available width of the page (100%)
Adding a table with Header cells
10 Jumpstart tutorial
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
Use of High Level APIs
Some other high level methods
Rotating a page
Setting Page Margins
Setting Text Alignment
Setting hyphenation
Document document = new Document(pdf, [Link]());
[Link](20, 20, 20, 20);
[Link]([Link]);
[Link](new HyphenationConfig("en","uk",3,3));
11 Jumpstart tutorial
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
PDF syntax and structure
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
PDF Syntax & Structure
PDF is a binary format
8 types of objects
Boolean
Numeric
String (Literal & Hexadecimal string)
Name
Array Dictionary
Stream
Null
Objects can be direct or indirect
13 Jumpstart tutorial
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
PDF Syntax & Structure
Comments are preceded by “%”
%%EOF – End of File marker
%PDF-X.Y – PDF version number
14 Jumpstart tutorial
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
PDF Syntax & Structure
Boolean objects
true
false
Numeric objects
Integer
Real
Strings
Preceded by a slash eg: /iText
Can contain any character
Name
Literal strings: enclosed by parentheses ()
Hexadecimal strings: enclosed by angle brackets <>
15 Jumpstart tutorial
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
PDF Syntax & Structure
Array
Collection of PDF objects
Heterogeneous
Enclosed in square brackets []
Dictionary
Key-Value pairs
Enclosed in Double angle brackets <<>>
Streams
Sequence of bytes of unlimited length
All streams are indirect
16 Jumpstart tutorial
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
PDF Syntax & Structure
Indirect objects
Unique identifier : is a positive integer
Generation number
Positive integer, zero inclusive
Starts at 0
Enclosed by obj and endobj
Example:
321 0 obj
(An indirect object)
endobj
This is an indirect string object with id “321” and generation number “0”. This
object can be referenced from somewhere else in the PDF by calling the id
and the generation number followed by “R”
<< /Value 321 0 R >>
17 Jumpstart tutorial
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
PDF Syntax & Structure
PDF Structure has 4 sections :
Header
Body
XREF (Cross-reference Table)
Trailer
18 Jumpstart tutorial
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
PDF Syntax & Structure
Header
First line depicts the version
Replaced by /Version in the catalog dictionary (PDF 1.4+)
Second line indicating this is a binary file
19 Jumpstart tutorial
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
PDF Syntax & Structure
XREF table
Starts with keyword “xref”
One entry per indirect object
20 Jumpstart tutorial
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
PDF Syntax & Structure
Trailer
Keyword trailer
Last line is %%EOF
21 Jumpstart tutorial
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
PDF Syntax & Structure
Body
Sequence of indirect objects
Fonts & Pages
22 Jumpstart tutorial
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
PDF Syntax & Structure
Document structure
Catalog is the Root dictionary
Contains references to Page Tree, AcroForm, Outlines, Metadata, StructTreeRoot
Metadata
Contains information about the document
Author, Title, Creation Date, Modification Date, etc
23 Jumpstart tutorial
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
PDF Syntax & Structure
Page Tree
Defines the order of the pages
Two types of nodes : Page tree nodes & Page nodes
Pages
Display information
User Units, MediaBox, Rotation, etc
Annotations
Content Stream(s)
Describes appearance of a page
Contains operators and operands
24 Jumpstart tutorial
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
PDF Syntax & Structure
Operator
Keyword specifying an action
Drawing a line, moving the cursor, etc
Only meaningful in the content stream
Operand is a direct object needed by an operand
An operator can require more operands (e.g. Re)
Operands immediately precede operators
25 Jumpstart tutorial
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
PDF Syntax & Structure
26 Jumpstart tutorial
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
PDF Syntax & Structure
RUPS
iText tool to inspect PDF files
Reading and Updating PDF Syntax
AGPL
27 Jumpstart tutorial
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
Low Level
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
Use of Low Level Approach
Writes to a PDF content stream
PDF operators mapped to methods ()
m moveTo() method
l lineTo() method
S stroke() method
Manipulation of the layout
Use of Canvas
No concept of Page
Use of absolute positions
Access to content streams
Adding FormXObject
29 Jumpstart tutorial
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
Use of Low Level Approach
Use of Tranformation matrix
drawing objects in a new co-ordinate system
concatMatrix() method
parameters of this method are elements of a transformation
matrix
a b 0 //3rd column is fixed since we work in 2D
c d 0 //a, b, c, and d can be used to scale, rotate, and skew the
coordinate system
e f 1 //e and f define the translation
30 Jumpstart tutorial
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
Use of Low Level Approach
Graphics state
Properties such as the current transformation matrix, line width, stroke
color, fill color etc.
Default line width is 1 user unit
Default stroke color is black
Text state
Subset of the graphics state
Properties related to text i.e. text matrix, font and size etc
31 Jumpstart tutorial
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
Use of Low Level Approach
32 Jumpstart tutorial
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
Use of Low Level Approach
Color Spaces
As per PDF specification (ISO-32000)
Implemented under separate classes of iText
Commonly used color spaces are:
DeviceGray (defined by a single intensity parameter)
DeviceRgb (defined by three parameters: red, green, and blue)
DeviceCmyk (defined by four parameters: cyan, magenta, yellow and
black)
33 Jumpstart tutorial
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
Use of Low Level Approach
34 Jumpstart tutorial
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
Use of Low Level Approach
1 [Link](1, 0, 0, 1, 0, [Link]());
2 [Link]()
3 .setFontAndSize(..)
4 .setLeading(14 * 1.2f)
5 .moveText(70, -40);
6 for (String s : text) {
7 //Add text and move to the next line
8 [Link](s);
9 }
10 [Link]();
- Textbox is delimited by the beginText()/endText() methods
- Text should not be outside beginText()/endText()
- Do not nest beginText()/endText() sequences
35 Jumpstart tutorial
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
Combination of Both Approaches
1. Event Handlers and Renderers
2. Annotations
3. Acroforms
4. Viewer Preferences
5. Metadata
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
Event Handlers and Renderers
Combining Low Level and High level approach for complex
tasks
Applying a Document renderer
Used on documents
Eg: To limit spanning of text across width of page
Applying Block Renderer
Used on block level elements
eg: To modify properties of columns of a table individually
Eg: To modify individual cells of a table
37 Jumpstart tutorial
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
Event Handlers and Renderers
38 Jumpstart tutorial
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
Event Handlers and Renderers
39 Jumpstart tutorial
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
Event Handlers and Renderers
40 Jumpstart tutorial
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
Event Handlers and Renderers
Four types of events can be triggered:
START_PAGE : when a new page is started
END_PAGE : right before a new page is started
INSERT_PAGE : when a page is inserted
REMOVE_PAGE : when a page is removed
IEventHandler interface
handleEvent() method
41 Jumpstart tutorial
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
Event Handlers and Renderers
42 Jumpstart tutorial
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
Event Handlers and Renderers
43 Jumpstart tutorial
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
Annotations
Allow user interaction
Not a part of content stream
Added on top of existing content
Several types:
Text Annotation
Link Annotation
Line Annoation
Mark up Annotation
44 Jumpstart tutorial
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
Annotations
ISO-32000-2 defines 28 different annotation types
Two are deprecated in PDF 2.0
iText can add all 26
Example of adding Text annotation
PdfAnnotation ann = new PdfTextAnnotation(new Rectangle(..))
.setColor([Link])
.setTitle(new PdfString("iText"))
.setContents(“…”);
.setOpen(true);
[Link]().addAnnotation(ann);
45 Jumpstart tutorial
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
Acroforms
Allows adding form fields
Text fields, List fields, Checkboxes, Radio buttons, Push buttons, Signature
fields
Comparison with HTML form
HTML form fields can be resized
List contents can be updated on fly
Fields have fixed place and size
More comparable to paper forms
Not very wieldy for online data collection use-cases
46 Jumpstart tutorial
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
Acroforms
Typical used when :
Form is the equivalent of digital paper
Form used as a template
Form Creation
Mostly created manually (Adobe software, LibreOffice, or any other GUI
tool)
Can be done programmatically
47 Jumpstart tutorial
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
Acroforms
Creating an acroform
PdfAcroForm form = [Link](PdfDocument d,Boolean b);
Fields are added as widget annotations
Not a part of content stream
Filling an existing form
Map<String, PdfFormField> fields = [Link]();
[Link]("name").setValue("James Bond");
[Link]("language").setValue("English");
48 Jumpstart tutorial
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
Acroforms
Flattening of forms
End user is not allowed to change information in the PDF
Removes the user interactivity
Widget annotations are replaced with their content
[Link]();//flattens all the fields
49 Jumpstart tutorial
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
Adding content to Existing PDFs
1. Watermarks
2. Header & Footer
3. Merging PDFs
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
Watermarks
Text or Images
Angle of watermark
Opacity of watermark
showTextAligned() method does the heavy loading
//define the text to add as a watermark
Paragraph p = new Paragraph("CONFIDENTIAL").setFontSize(60);
[Link]();
//set opacity of watermark on the graphics state
PdfExtGState gs1 = new PdfExtGState().setFillOpacity(0.2f);
[Link](gs1);
//set the location and tilt of watermark on the page
[Link](p,width,
height,pageNumber,TextAlign,VerticalAlign,45);
[Link]();
51 Jumpstart tutorial
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
Header and Footer
Read an existing PDF
PdfDocument pdf = new PdfDocument(PdfReader obj,PdfWriter obj);
Document document = new Document(pdf);
Get number of pages & loop over each page
int n = [Link]();
for (int i = 1; i <= n; i++) {
PdfPage page = [Link](i);
canvas = new PdfCanvas(page);
// add header and footer
}
Add Header
[Link]()
.setFontAndSize(..) //set the Font and its size
.moveText(width,height)
.showText("I want to believe")
.endText();
52 Jumpstart tutorial
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
Header & Footer
Add Footer
//Draw footer line
[Link]([Link])
.setLineWidth(.2f)
.moveTo(width, 20)
.lineTo(width, 20)
.stroke();
Add Page number
//Draw page number in format : X of Y
[Link]()
.setFontAndSize(..)
.moveText(width, 10)
.showText([Link](i))// i is the current page number
.showText(" of ")
.showText([Link](n))// n is the total no of pages
.endText();
53 Jumpstart tutorial
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
Merging PDFs
Merging content of 2 PDF documents
Use of PdfMerger Utility Class
Partial Merging
Selective pages from 2 documents are to be merged
PdfMerger merge(PdfDocument from, List<Integer> pages)
PdfMerger merge(PdfDocument from, int fromPage, int toPage)
54 Jumpstart tutorial
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
Merging PDFs
//1. Define new merger
PdfMerger merger = new PdfMerger(newPdf);
//2. Add pages from the first document
[Link](firstPdf, 1, [Link]());
//3. Add pages from the second pdf document
[Link](secondPdf, 1, [Link]());
//4. merge and close
[Link]();
[Link]();
[Link]();
55 Jumpstart tutorial
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
Merging PDFs
Merging Forms
PDF can contain only one form
Merging is done using PdfPageFormCopier Class
Duplicate form fields need to be renamed
Merging “Flattened” Forms
Use of smart mode
Use of normal mode
56 Jumpstart tutorial
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
Viewer Preferences
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
Viewer Preferences
Set default behaviour for document
Setting Page Mode : for panel visibility
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
Setting Page Layout : display of pages of PDF
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
58 Jumpstart tutorial
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
Viewer Preferences
59 Jumpstart tutorial
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
Viewer Preferences
Use of PdfViewerPreferences
Viewer related preferences
setFitWindow(), setHideMenuBar(), setHideToolbar(),
setCenterWindow(), setDisplayDocTitle(), setNonFullScreenPageMode(),
setDirection(), setViewArea() etc
Printer related preferences
setPrintArea(), setPrintScaling(),setNumCopies() etc
[Link]().setPageLayout([Link]);
[Link]().setPageMode([Link]);
[Link]().setViewerPreferences(preferences);
60 Jumpstart tutorial
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
Metadata
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
Metadata
Stored in the info-dictionary of a PDF
Contains key-value pairs
PdfDocumentInfo Class corresponds to info-dictionary
set Title, set Author, set Producer, add Creation Date etc
PdfDocumentInfo info = [Link]();
[Link]("A Strange Case");
62 Jumpstart tutorial
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
Metadata
XMP MetaData
Metadata store as XML inside a PDF
More Flexibility
Use of WriterProperties Class to add XML
set Full compression mode or compression levels (0 to 9)
set Passwords on the document
set PDF version
WriterProperties w = new WriterProperties();
[Link]();
[Link](true);
[Link](user, owner, permissions, encryptionAlgo);
63 Jumpstart tutorial
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
iText 7 modules
pdfSweep
I/O Barcodes
Forms Signatures
Kernel Layout
pdfTest
pdfCalligraph
PDF/A
pdfInvoice
AsianFonts RUPS
pdfDebug
Part of iText 7 Core package, covered by AGPL license
iText 7 add-on, license key and commercial license required
Optional modules
© 2015, iText Group NV, iText Software Corp., iText Software BVBA
Thank You!
Log on to [Link]
Log on to [Link]
65 Jumpstart tutorial
© 2015, iText Group NV, iText Software Corp., iText Software BVBA