在PDF 中可通过按钮来添加动作跳转到指定页面,包括跳转到文档首页、文档末页、跳转到上一页、下一页、或跳转到指定页面等。下面将通过java代码来演示如何添加具有以上几种功能的按钮。

使用工具:

  • Free Spire.PDF for Java (免费版)
  • IntelliJ IDEA

Jar文件获取及导入:

方法1通过官网下载jar文件包。下载后,解压文件,并将lib文件夹下的Spire.Pdf.jar文件导入java程序。参考如下导入效果:

方法2 可通过maven仓库安装导入

Java 代码示例

import com.spire.pdf.*;
import com.spire.pdf.actions.*;
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 Buttons {
public static void main(String[]args) throws Exception{
//创建文档,添加页面
PdfDocument pdf = new PdfDocument();
pdf.loadFromFile("test.pdf"); //分别获取第一页、第二页及最后一页
PdfPageBase page0 = pdf.getPages().get(0);
PdfPageBase page1 = pdf.getPages().get(1);
PdfPageBase page2 = pdf.getPages().get(pdf.getPages().getCount()-1); //设置允许创建窗体
pdf.setAllowCreateForm(true); //定义float变量来确定按钮的位置及大小
float x = 480;
float y = 750;
float width = 70;
float height = 23; //创建truetype字体
PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("楷体", Font.PLAIN, 9), true); //创建按钮0跳转到最后一页
PdfButtonField btn_0 = new PdfButtonField(page0, "btn_0");
Rectangle2D.Float rect = new Rectangle2D.Float(x, y + 15, width, height);
btn_0.setBounds(rect);
btn_0.setFont(font);
btn_0.setText("跳转至最后一页");
btn_0.setBackColor(new PdfRGBColor(245,245,245));
btn_0.setForeColor(new PdfRGBColor(Color.black));
btn_0.setBorderColor(new PdfRGBColor(Color.white));
PdfNamedAction namedAction = new PdfNamedAction(PdfActionDestination.LastPage);
btn_0.getActions().setMouseDown(namedAction);
pdf.getForm().getFields().add(btn_0); //创建按钮1跳转到上一页
PdfButtonField btn_1 = new PdfButtonField(page1, "btn_1");
rect = new Rectangle2D.Float(x, y, width, height);
btn_1.setBounds(rect);
btn_1.setFont(font);
btn_1.setText("上一页");
btn_1.setBackColor(new PdfRGBColor(Color.white));
btn_1.setForeColor(new PdfRGBColor(Color.black));
btn_1.setBorderColor(new PdfRGBColor(245,245,245));
namedAction = new PdfNamedAction(PdfActionDestination.PrevPage);
btn_1.getActions().setMouseDown(namedAction);
pdf.getForm().getFields().add(btn_1); //创建按钮2跳转下一页
PdfButtonField btn_2 = new PdfButtonField(page1, "btn_2");
rect = new Rectangle2D.Float(x, y + height + 5, width, height);
btn_2.setBounds(rect);
btn_2.setFont(font);
btn_2.setText("下一页");
btn_2.setBackColor(new PdfRGBColor(245,245,245));
btn_2.setForeColor(new PdfRGBColor(Color.black));
btn_2.setBorderColor(new PdfRGBColor(Color.white));
namedAction = new PdfNamedAction(PdfActionDestination.NextPage);
btn_2.getActions().setMouseDown(namedAction);
pdf.getForm().getFields().add(btn_2); //创建按钮3跳转到首页
PdfButtonField btn_3 = new PdfButtonField(page2, "btn_3");
rect = new Rectangle2D.Float(x, 60, width, height);
btn_3.setBounds(rect);
btn_3.setFont(font);
btn_3.setText("返回首页");
btn_3.setBackColor(new PdfRGBColor(245,245,245));
btn_3.setForeColor(new PdfRGBColor(Color.black));
btn_3.setBorderColor(new PdfRGBColor(Color.white));
namedAction = new PdfNamedAction(PdfActionDestination.FirstPage);
btn_3.getActions().setMouseDown(namedAction);
pdf.getForm().getFields().add(btn_3); //创建按钮4跳转到指定页
PdfButtonField btn_4 = new PdfButtonField(page2, "btn_4");
rect = new Rectangle2D.Float( x,90 , width, height);
btn_4.setBounds(rect);
btn_4.setText("跳转至第二页");
btn_4.setFont(font);
btn_4.setBackColor(new PdfRGBColor(Color.white));
btn_4.setForeColor(new PdfRGBColor(Color.black));
btn_4.setBorderColor(new PdfRGBColor(245,245,245));
PdfGoToAction goToAction = new PdfGoToAction(new PdfDestination(pdf.getPages().get(1)));
btn_4.getActions().setMouseDown(goToAction);
pdf.getForm().getFields().add(btn_4); //保存文档
pdf.saveToFile("NavigationButton.pdf", FileFormat.PDF);
pdf.close();
}
}

按钮添加效果:

(本文完)

Java 在PDF中添加页面跳转按钮的更多相关文章

  1. Java 在PDF 中添加超链接

    对特定元素添加超链接后,用户可以通过点击被链接的元素来激活这些链接,通常在被链接的元素下带有下划线或者以不同的颜色显示来进行区分.按照使用对象的不同,链接又可以分为:文本超链接,图像超链接,E-mai ...

  2. Java 在PDF中添加表格

    本文将介绍通过Java编程在PDF文档中添加表格的方法.添加表格时,可设置表格边框.单元格对齐方式.单元格背景色.单元格合并.插入图片.设置行高.列宽.字体.字号等. 使用工具:Free Spire. ...

  3. Java 在PDF中添加工具提示|ToolTip

    本文,将介绍如何通过Java后端程序代码在PDF中创建工具提示.添加工具提示后,当鼠标悬停在页面上的元素时,将显示工具提示内容. 导入jar包 本次程序中使用的是 Free Spire.PDF for ...

  4. web项目中实现页面跳转的两种方式

    <a href="javascript:"></a>跳转在网页本身,URL不改变 <a href="#"></a> ...

  5. Struts2中的页面跳转

    内容源自:Struts2中的页面跳转 一.全局页面的设置如果<package>包中的一些action都返回success,并且返回的页面都是同一个JSP页面,这样就可以配置全局的结果页面. ...

  6. [Xcode 实际操作]九、实用进阶-(23)多个Storyboard故事板中的页面跳转

    目录:[Swift]Xcode实际操作 本文将演示多个Storyboard故事板中的页面跳转. 使用快捷键[Command]+[N]创建一个新的故事板文件. (在项目文件夹[DemoApp]上点击鼠标 ...

  7. php中的页面跳转和重定向

    php中的页面跳转和重定向 ThinkPHP中跳转和重定向的区别 跳转: 浏览器认为: 当前URL请求成功, 重新请求新的URL. 浏览器会 记录当前的URL 和 新的URL 在请求历史记录中. 回退 ...

  8. C# 在PDF中添加墨迹注释Ink Annotation

    PDF中的墨迹注释(Ink Annotation),表现为徒手涂鸦式的形状:该类型的注释,可任意指定形状顶点的位置及个数,通过指定的顶点,程序将连接各点绘制成平滑的曲线.下面,通过C#程序代码介绍如何 ...

  9. WPF实用指南一:在WPF窗体的边框中添加搜索框和按钮

    原文:WPF实用指南一:在WPF窗体的边框中添加搜索框和按钮 在边框中加入一些元素,在应用程序的界面设计中,已经开始流行起来.特别是在浏览器(Crome,IE,Firefox,Opera)中都有应用. ...

随机推荐

  1. 微服务SpringCloud之zipkin链路追踪

    随着业务发展,系统拆分导致系统调用链路愈发复杂一个前端请求可能最终需要调用很多次后端服务才能完成,当整个请求变慢或不可用时,我们是无法得知该请求是由某个或某些后端服务引起的,这时就需要解决如何快读定位 ...

  2. 连接电脑时,无法启用USB调试

    原因: 手机悬浮球 解决方案: 取消悬浮球,停止一切悬浮应用 (下面的废话可以不听) 预置条件: 手机已经打开开发者模式 开启USB调试模式 电脑能检测到手机 故事背景: 经常用手机连接电脑进行adb ...

  3. 第六届蓝桥杯java b组第8题

    乐羊羊饮料厂正在举办一次促销优惠活动.乐羊羊C型饮料,凭3个瓶盖可以再换一瓶C型饮料,并且可以一直循环下去,但不允许赊账. 请你计算一下,如果小明不浪费瓶盖,尽量地参加活动,那么,对于他初始买入的n瓶 ...

  4. [phyton]文件的简单读写练习

    f.open() 用于打开一个文件. f=open("record.txt","w",encoding="utf-8")#打开文件,设置文件 ...

  5. SpringCloud搭建注册中心与服务注册

    上一篇文章<微服务注册中心原理,看这篇就够了!>介绍了注册中心的概念和原理,本文将介绍下利用Eureka搭建中心并注册服务到注册中心的过程. 本文目录 一.Eureka介绍二.搭建注册中心 ...

  6. Redis 集群(三)

    为什么为有集群 在 Redis3 版本之前,每台 Redis 机器需要存储所有 Redis key ,这要求每台 Redis 机器有足够大的内存 而且只能是主节点写,从节点读,对于高并发情况下会有性能 ...

  7. Flask基础(01)-->Flask框架介绍

    什么是Flask? 说白了,Flask就是一种web框架 在python中常用的框架有 flask django tornado 什么又是web框架呢?  为什么要使用web框架呢? 增强扩展性和稳定 ...

  8. linux mint 19.2与Windows 10 双系统硬盘安装与卸载

    安装linux mint 和win10双系统: 1.win10系统下如果没有空闲分区,请从容量较大的分区用partition manager在选中的较大的分区下,调整大小.此步骤最好在pe下的part ...

  9. 队列 & 栈---概述

    队列 是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表.进行插入操作的端称为队尾,进行删除操作 ...

  10. python常用算法学习(3)

    1,什么是算法的时间和空间复杂度 算法(Algorithm)是指用来操作数据,解决程序问题的一组方法,对于同一个问题,使用不同的算法,也许最终得到的结果是一样的,但是在过程中消耗的资源和时间却会有很大 ...