iText - Adding PDF bookmark and anchor (转)

本文介绍如何使用iText库为PDF文档添加书签和锚点,包括内部链接、外部链接及远程PDF链接。通过实例展示了如何定义字体样式、设置本地目标和远程目标等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值