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

使用工具:

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

Jar文件获取及导入:

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

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

Java 代码示例

  1. import com.spire.pdf.*;
  2. import com.spire.pdf.actions.*;
  3. import com.spire.pdf.fields.PdfButtonField;
  4. import com.spire.pdf.general.PdfDestination;
  5. import com.spire.pdf.graphics.PdfRGBColor;
  6. import com.spire.pdf.graphics.PdfTrueTypeFont;
  7. import java.awt.*;
  8. import java.awt.geom.Rectangle2D;
  9.  
  10. public class Buttons {
  11. public static void main(String[]args) throws Exception{
  12. //创建文档,添加页面
  13. PdfDocument pdf = new PdfDocument();
  14. pdf.loadFromFile("test.pdf");
  15.  
  16. //分别获取第一页、第二页及最后一页
  17. PdfPageBase page0 = pdf.getPages().get(0);
  18. PdfPageBase page1 = pdf.getPages().get(1);
  19. PdfPageBase page2 = pdf.getPages().get(pdf.getPages().getCount()-1);
  20.  
  21. //设置允许创建窗体
  22. pdf.setAllowCreateForm(true);
  23.  
  24. //定义float变量来确定按钮的位置及大小
  25. float x = 480;
  26. float y = 750;
  27. float width = 70;
  28. float height = 23;
  29.  
  30. //创建truetype字体
  31. PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("楷体", Font.PLAIN, 9), true);
  32.  
  33. //创建按钮0跳转到最后一页
  34. PdfButtonField btn_0 = new PdfButtonField(page0, "btn_0");
  35. Rectangle2D.Float rect = new Rectangle2D.Float(x, y + 15, width, height);
  36. btn_0.setBounds(rect);
  37. btn_0.setFont(font);
  38. btn_0.setText("跳转至最后一页");
  39. btn_0.setBackColor(new PdfRGBColor(245,245,245));
  40. btn_0.setForeColor(new PdfRGBColor(Color.black));
  41. btn_0.setBorderColor(new PdfRGBColor(Color.white));
  42. PdfNamedAction namedAction = new PdfNamedAction(PdfActionDestination.LastPage);
  43. btn_0.getActions().setMouseDown(namedAction);
  44. pdf.getForm().getFields().add(btn_0);
  45.  
  46. //创建按钮1跳转到上一页
  47. PdfButtonField btn_1 = new PdfButtonField(page1, "btn_1");
  48. rect = new Rectangle2D.Float(x, y, width, height);
  49. btn_1.setBounds(rect);
  50. btn_1.setFont(font);
  51. btn_1.setText("上一页");
  52. btn_1.setBackColor(new PdfRGBColor(Color.white));
  53. btn_1.setForeColor(new PdfRGBColor(Color.black));
  54. btn_1.setBorderColor(new PdfRGBColor(245,245,245));
  55. namedAction = new PdfNamedAction(PdfActionDestination.PrevPage);
  56. btn_1.getActions().setMouseDown(namedAction);
  57. pdf.getForm().getFields().add(btn_1);
  58.  
  59. //创建按钮2跳转下一页
  60. PdfButtonField btn_2 = new PdfButtonField(page1, "btn_2");
  61. rect = new Rectangle2D.Float(x, y + height + 5, width, height);
  62. btn_2.setBounds(rect);
  63. btn_2.setFont(font);
  64. btn_2.setText("下一页");
  65. btn_2.setBackColor(new PdfRGBColor(245,245,245));
  66. btn_2.setForeColor(new PdfRGBColor(Color.black));
  67. btn_2.setBorderColor(new PdfRGBColor(Color.white));
  68. namedAction = new PdfNamedAction(PdfActionDestination.NextPage);
  69. btn_2.getActions().setMouseDown(namedAction);
  70. pdf.getForm().getFields().add(btn_2);
  71.  
  72. //创建按钮3跳转到首页
  73. PdfButtonField btn_3 = new PdfButtonField(page2, "btn_3");
  74. rect = new Rectangle2D.Float(x, 60, width, height);
  75. btn_3.setBounds(rect);
  76. btn_3.setFont(font);
  77. btn_3.setText("返回首页");
  78. btn_3.setBackColor(new PdfRGBColor(245,245,245));
  79. btn_3.setForeColor(new PdfRGBColor(Color.black));
  80. btn_3.setBorderColor(new PdfRGBColor(Color.white));
  81. namedAction = new PdfNamedAction(PdfActionDestination.FirstPage);
  82. btn_3.getActions().setMouseDown(namedAction);
  83. pdf.getForm().getFields().add(btn_3);
  84.  
  85. //创建按钮4跳转到指定页
  86. PdfButtonField btn_4 = new PdfButtonField(page2, "btn_4");
  87. rect = new Rectangle2D.Float( x,90 , width, height);
  88. btn_4.setBounds(rect);
  89. btn_4.setText("跳转至第二页");
  90. btn_4.setFont(font);
  91. btn_4.setBackColor(new PdfRGBColor(Color.white));
  92. btn_4.setForeColor(new PdfRGBColor(Color.black));
  93. btn_4.setBorderColor(new PdfRGBColor(245,245,245));
  94. PdfGoToAction goToAction = new PdfGoToAction(new PdfDestination(pdf.getPages().get(1)));
  95. btn_4.getActions().setMouseDown(goToAction);
  96. pdf.getForm().getFields().add(btn_4);
  97.  
  98. //保存文档
  99. pdf.saveToFile("NavigationButton.pdf", FileFormat.PDF);
  100. pdf.close();
  101. }
  102. }

按钮添加效果:

(本文完)

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. 手把手教你搭建Pytest+Allure2.X环境详细教程,生成让你一见钟情的测试报告(非常详细,非常实用)

    简介 宏哥之前在做接口自动化的时候,用的测试报告是HTMLTestRunner,虽说自定义模板后能满足基本诉求,但是仍显得不够档次,高端,大气,遂想用其他优秀的report框架替换之.一次偶然的机会, ...

  2. 数位DP 详解

    序 天堂在左,战士向右 引言 数位DP在竞赛中的出现几率极低,但是如果不会数位DP,一旦考到就只能暴力骗分. 以下是数位DP详解,涉及到的例题有: [HDU2089]不要62 [HDU3652]B-n ...

  3. JAVA多线程线程同步问题

    线程同步 在多线程的编程环境下,可能看着没有问题的代码在运行几千上万或者更多次后,出现了一些看着很奇怪的问题,出现这样的问题的原因就是可能会有两个或者更多个线程进入了同一块业务处理代码中导致了判断失效 ...

  4. java8 base64使用

    java 1.8中引入了Base64,不在需要引入第三方库就可以使用base64了. 在需要用到base64进行加密解密的时候就可以使用了 String text = "base64 in ...

  5. C语言I博客作业

    |这个作业属于哪个课程 | C语言程序设计I | | ---- | ---- | |对这个作业要求在哪里 | https://edu.cnblogs.com/campus/zswxy/SE2019-2 ...

  6. sort,uniq,wc,tr

    sort (选项)(参数)      sort是用来排序数据的. 以下面这个文本为例 [root@bogon ~]# cat a 123 4567 88 abc aaa AAA jk 777 777 ...

  7. php使用正则表达式提取字符串中尖括号、小括号、中括号、大括号中的字符串

    $str="你好<我>(爱)[北京]{天安门}"; echo f1($str); //返回你好 echo f2($str); //返回我 echo f3($str); ...

  8. Redis分片机制

    文章原创于公众号:程序猿周先森.本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号. 前两篇文章对Redis主从复制和主从切换的知识点进行了介绍,但是也很明显的有一点小弊端: 需要定时进行主从复制 ...

  9. java第3天:Scanner,Random,ArrayList

    第一章:Scanner从入门到放弃 1 API的概述和使用步骤 API简称应用程序编程接口,是JDK给我们提供好的可以直接使用的类和方法,是程序员随手使用的字典. *** 2 Scanner的概述 2 ...

  10. TCP三次握手和四次握手全过程 为什么要三次握手而不是二次握手?

    三次握手 第一次握手: 客户端发送syn包(syn=x)到服务器,并进入SYN_SEND状态,等待服务器确认: 第二次握手: 服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送 ...