概述
當(dāng)我們在查閱含有大量頁面的PDF時(shí),可通過在頁面上添加跳轉(zhuǎn)按鈕來實(shí)現(xiàn)頁面轉(zhuǎn)換,以達(dá)到節(jié)約時(shí)間,提高效率的目的。本文將通過Java程序來演示如何給PDF文檔添加頁面跳轉(zhuǎn)按鈕。通常來說跳轉(zhuǎn)可分為兩種情況:一是跳轉(zhuǎn)至特殊頁面(首頁、最后一頁、上一頁、下一頁);二是跳轉(zhuǎn)至指定頁面(例如:第四頁)。
配置測試環(huán)境
本文代碼示例使用到的工具是Free Spire.PDF for Java,可通過官網(wǎng)下載獲取。解壓后將lib文件夾下的Spire.Pdf.jar手動(dòng)導(dǎo)入IDEA即可。
另外,可也通過Maven倉庫來導(dǎo)入產(chǎn)品及相關(guān)依賴。創(chuàng)建一個(gè)Maven程序,在pom.xml文件中配置Maven倉庫路徑,并指定Spire.PDF for Java的Maven依賴。
<repositories>
??????? <repository>
??????????? <id>com.e-iceblue</id>
??????????? <url>http://repo.e-iceblue.cn/repository/maven-public/</url>
??????? </repository>
??? </repositories>
<dependencies>
??? <dependency>
??????? <groupId>e-iceblue</groupId>
??????? <artifactId>spire.pdf.free</artifactId>
??????? <version>2.6.3</version>
??? </dependency>
</dependencies>
配置完成后,只需點(diǎn)擊“Import Changes”即可導(dǎo)入JAR包。
參考代碼
1、跳轉(zhuǎn)至特殊頁面(首頁、最后一頁、上一頁、下一頁)
import com.spire.pdf.FileFormat;
import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.actions.PdfActionDestination;
import com.spire.pdf.actions.PdfNamedAction;
import com.spire.pdf.fields.PdfButtonField;
import com.spire.pdf.graphics.PdfRGBColor;
import com.spire.pdf.graphics.PdfTrueTypeFont;
import java.awt.*;
import java.awt.geom.Rectangle2D;
public class AddNavigationButton {
public static void main(String[] args) throws Exception {
//創(chuàng)建PdfDocument對象,加載PDF文檔
PdfDocument doc = new PdfDocument();
doc.loadFromFile("C:\\Users\\Test1\\Desktop\\Sample.pdf");
//獲取最后一頁
PdfPageBase lastPage = doc.getPages().get(doc.getPages().getCount() - 1);
//允許在PDF中創(chuàng)建窗體
doc.setAllowCreateForm(true);
//定義float變量來確定按鈕的位置及大小
float x = 90;
float y = 450;
float width = 150;
float height = 22;
//創(chuàng)建truetype字體
PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Arial Unicode MS", Font.PLAIN, 13), true);
//創(chuàng)建一個(gè)按鈕跳轉(zhuǎn)至首頁
PdfButtonField btn_1 = new PdfButtonField(lastPage, "button");
Rectangle2D.Float rect =?new Rectangle2D.Float(x, y, width, height);
btn_1.setBounds(rect);
btn_1.setFont(font);//設(shè)置字體
btn_1.setText("返回首頁");//設(shè)置按鈕提示語
btn_1.setBackColor(new PdfRGBColor(Color.ORANGE));//設(shè)置背景顏色
btn_1.setForeColor(new PdfRGBColor(Color.red));//設(shè)置提示語字體顏色
btn_1.setBorderColor(new PdfRGBColor(Color.blue));//設(shè)置按鈕邊框顏色
//創(chuàng)建PdfNamedAction實(shí)例,在傳入的參數(shù)中選擇上一頁、下一頁、首頁或最后一頁
PdfNamedAction namedAction = new PdfNamedAction(PdfActionDestination.FirstPage);
btn_1.getActions().setMouseDown(namedAction);//應(yīng)用動(dòng)作
doc.getForm().getFields().add(btn_1);//添加按鈕至文檔
//保存文檔
doc.saveToFile("output/NavigationButton.pdf", FileFormat.PDF);
? ? ?doc.close();
??? }
}
注:此處的PdfNamedAction類支持四種按鈕跳轉(zhuǎn)動(dòng)作。分別可實(shí)現(xiàn)頁面跳轉(zhuǎn)至上一頁、首頁、下一頁和最后一頁。

添加效果:

2、跳轉(zhuǎn)至指定頁面(以下代碼演示跳轉(zhuǎn)至文檔第四頁)
import com.spire.pdf.FileFormat;
import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.actions.PdfGoToAction;
import com.spire.pdf.fields.PdfButtonField;
import com.spire.pdf.general.PdfDestination;
import com.spire.pdf.graphics.PdfRGBColor;
import com.spire.pdf.graphics.PdfTrueTypeFont;
import java.awt.*;
import java.awt.geom.Rectangle2D;
public class AddNavigationButton2 {
public static void main(String[] args) throws Exception {
//創(chuàng)建PdfDocument對象,加載PDF文檔
PdfDocument doc = new PdfDocument();
doc.loadFromFile("C:\\Users\\Test1\\Desktop\\Sample.pdf");
//獲取最后一頁
PdfPageBase lastPage = doc.getPages().get(doc.getPages().getCount() - 1);
//允許在PDF中創(chuàng)建窗體
doc.setAllowCreateForm(true);
//定義float變量來確定按鈕的位置及大小
float x = 90;
float y = 450;
float width = 150;
float height = 22;
//創(chuàng)建truetype字體
PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Arial Unicode MS", Font.PLAIN, 13), true);
//創(chuàng)建一個(gè)按鈕跳轉(zhuǎn)到指定頁
PdfButtonField btn_1 = new PdfButtonField(lastPage, "button");
Rectangle2D.Float rect =?new Rectangle2D.Float(x, y + height + 5, width, height);
btn_1.setBounds(rect);//設(shè)置按鈕大小及位置
btn_1.setText("跳轉(zhuǎn)至第四頁");//設(shè)置按鈕提示語
btn_1.setFont(font);//設(shè)置字體
btn_1.setBackColor(new PdfRGBColor(Color.GREEN));//設(shè)置背景顏色
btn_1.setForeColor(new PdfRGBColor(Color.red));//設(shè)置提示語字體顏色
btn_1.setBorderColor(new PdfRGBColor(Color.blue));//設(shè)置按鈕邊框顏色
//創(chuàng)建PdfNamedAction實(shí)例,并指定跳轉(zhuǎn)頁碼
PdfGoToAction goToAction = new PdfGoToAction(new?PdfDestination(doc.getPages().get(3)));
btn_1.getActions().setMouseDown(goToAction);//應(yīng)用動(dòng)作
doc.getForm().getFields().add(btn_1);//添加按鈕至文檔
//保存文檔
doc.saveToFile("output/result.pdf", FileFormat.PDF);
? ? ?doc.close();
??? }
}
添加效果:

(本文完)