iText - Adding PDF bookmark and anchor
引用网址:http://www.geek-tutorials.com/java/itext/itext_bookmark_anchor.php
This tutorial discuss the navigation and interactive elements of a PDF document. You can construct a content outline of the PDF that look like a file browser tree that allow readers to quickly browse the table of content and access the specific page they interested.
While anchor work like a hyperlink in html, it allow you to define internal and external link. In PDF, anchor is able to link to local PDF content, remote PDF content or invoke default internet browser to display web content.
Local and remote anchor
package com.geek.tutorial.itext.bookmarks;
import com.lowagie.text.Document;
import com.lowagie.text.pdf.PdfWriter;
import com.lowagie.text.Chunk;
import com.lowagie.text.Font;
import com.lowagie.text.Paragraph;
import com.lowagie.text.pdf.PdfOutline;
import com.lowagie.text.pdf.PdfContentByte;
import com.lowagie.text.pdf.PdfAction;
import java.io.FileOutputStream;
import java.awt.Color;
public class Anchor {
public Anchor()throws Exception{
Document document = new Document();
PdfWriter writer =
PdfWriter.getInstance(document,
new FileOutputStream("anchor.pdf"));
document.open();
// Code 1
Font font = new Font();
font.setColor(Color.BLUE);
font.setStyle(Font.UNDERLINE);
document.add(new Chunk("Chapter 1"));
document.add(
new Paragraph(
new Chunk("Press here to go chapter 2", font)
.setLocalGoto("2")));// Code 2
document.newPage();
document.add(new Chunk("Chapter 2")
.setLocalDestination("2"));
document.add(
new Paragraph(
new Chunk("http://www.geek-tutorials.com", font)
.setAnchor("http://www.geek-tutorials.com")));//Code 3
document.add(
new Paragraph(
new Chunk("Open outline.pdf chapter 3", font)
.setRemoteGoto("outline.pdf", "3")));//Code 4
document.close();
}
public static void main(String[] args) {
try{
Anchor anchor = new Anchor();
}catch(Exception e){
System.out.println(e);
}
}
}
Code 1
Define a Font instance with BLUE and UNDERLINE styles. Just to make the links in this example look like html hyperlink .
Code 2
You can set a chunk of text to act as a link to direct reader to particular content on the same PDF as they click on the link.
First you set a link to a chunk. Code below instruct the chunk of text to be link to a destination labeled as "2".
document.add(
new Paragraph(
new Chunk("Press here to go chapter 2", font)
.setLocalGoto("2")));
Then set a destination.
document.add(new Chunk("Chapter 2").setLocalDestination("2"));
When reader click on the "Press here to go chapter 2", PDF reader will jump to the location where destination "2" is set.
Code 3
This code create a external link that display web content in default internet browser.
document.add(
new Paragraph(
new Chunk("http://www.geek-tutorials.com", font)
.setAnchor("http://www.geek-tutorials.com")));//Code 3
Code 4
This code create a remote link to external PDF file that located in the local drive. It will open outline.pdf file and jump to destination "3".
document.add(
new Paragraph(
new Chunk("Open outline.pdf chapter 3", font)
.setRemoteGoto("outline.pdf", "3")));//Code 4
Adding bookmark or outline tree to PDF
Outline tree can be construct with PdfOutline object. PdfAction can be trigger from outline tree, which executes actions such as goto local page, javascript and hyperlink.
package com.geek.tutorial.itext.bookmarks;
import com.lowagie.text.Document;
import com.lowagie.text.pdf.PdfWriter;
import com.lowagie.text.Chunk;
import com.lowagie.text.Paragraph;
import com.lowagie.text.pdf.PdfOutline;
import com.lowagie.text.pdf.PdfContentByte;
import com.lowagie.text.pdf.PdfAction;
import java.io.FileOutputStream;
public class Outline {
public Outline() throws Exception{
Document document = new Document();
PdfWriter writer = PdfWriter.getInstance(document,
new FileOutputStream("outline.pdf"));
document.open();
// Code 1
document.add(new Chunk("Chapter 1")
.setLocalDestination("1"));
document.newPage();
document.add(new Chunk("Chapter 2")
.setLocalDestination("2"));
document.add(new Paragraph(new Chunk("Sub 2.1")
.setLocalDestination("2.1")));
document.add(new Paragraph(new Chunk("Sub 2.2")
.setLocalDestination("2.2")));
document.newPage();
document.add(new Chunk("Chapter 3")
.setLocalDestination("3"));
// Code 2
PdfContentByte cb = writer.getDirectContent();
PdfOutline root = cb.getRootOutline();
// Code 3
PdfOutline oline1 = new PdfOutline(root,
PdfAction.gotoLocalPage("1", false),"Chapter 1");
PdfOutline oline2 = new PdfOutline(root,
PdfAction.gotoLocalPage("2", false),"Chapter 2");
oline2.setOpen(false);
PdfOutline oline2_1 = new PdfOutline(oline2,
PdfAction.gotoLocalPage("2.1", false),"Sub 2.1");
PdfOutline oline2_2 = new PdfOutline(oline2,
PdfAction.gotoLocalPage("2.2", false),"Sub 2.2");
PdfOutline oline3 = new PdfOutline(root,
PdfAction.gotoLocalPage("3", false),"Chapter 3");
document.close();
}
public static void main(String[] args) {
try{
Outline outline = new Outline();
}catch(Exception e){
System.out.println(e);
}
}
}
Code 1
Create 3 pages and set destination to titles. Add 2 sub destination in page 2.
Code 2
Get the root of the outline tree.
Code 3
Add bookmarks for each pages and two sub section to page 2. Bookmarks expanded by default, you can collapse the tree with this code
oline2.setOpen(false);
Run the code and get the following outline added to your PDF.
Your donation will be use for this project's site maintainance and further development of the content. Your support can help us provide higher quality of free tutorials and services to everyone in future . Download latest source code for this project.