用 Java 在 PDF 中创建和管理图层,实现交互式文档
PDF 图层(也称为可见图层或附加图层等)是组织和管理 PDF 文档中内容可见性的一种方法。PDF 图层可用于创建交互式文档、隐藏或显示特定信息、创建多语言版本文档等。通过添加和删除图层,用户可以根据需要定制 PDF 文档指定内容的可见性与显示方式。本文介绍如何使用 Java 在 PDF 文档中添加、显示、隐藏及删除图层。
文章目录
- 用 Java 在 PDF 中添加图层
- 用 Java 在 PDF 中设置显示或隐藏图层
- 用 Java 从 PDF 中删除图层
此教程所使用的方法需要用到 Free Spire.PDF for Python,可从官网获取。
用 Java 在 PDF 中添加图层
可使用 Free Spire.PDF for Python 中的 Document.getLayers().addLayer() 方法在 PDF 文档中创建任意图层。创建好图层后,就可以利用图层将内容绘制在页面上,从而方便对内容进行管理。具体步骤如下:
- 创建一个 PdfDocument 类对象并使用 PdfDocument.loadFromFile() 方法加载 PDF 文档。
- 使用 PdfDocument.getLayers().addLayer() 方法在文档中创建图层。
- 遍历文档页面,并使用 PdfLayer.createGraphics().drawImage() 方法通过创建的图层将图像绘制在每一页的指定位置。
- 使用 PdfDocument.saveToFile() 方法保存文档。
Java
import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.graphics.*;
import com.spire.pdf.graphics.layer.PdfLayer;import java.io.IOException;public class addLayersToPdf {public static void main(String[] args) throws IOException {// 创建PdfDocument对象并加载PDF文档PdfDocument pdf = new PdfDocument();pdf.loadFromFile("示例.pdf");// 创建名为页眉的图层PdfLayer layer = pdf.getLayers().addLayer("页眉");//载入一张图像PdfImage pdfImage = PdfImage.fromFile("页眉.jpg");// 遍历所有页面for (int i = 0; i < pdf.getPages().getCount(); i++) {// 获取页面PdfPageBase page = pdf.getPages().get(i);// 计算图像位置float width = pdfImage.getWidth();float height = pdfImage.getHeight();float x = (float) page.getSize().getWidth()/2 - width/2;float y = 10;// 通过图层将图像绘制在页面上layer.createGraphics(page.getCanvas()).drawImage(pdfImage, x, y, width, height);}// 保存文档pdf.saveToFile("添加图层.pdf");pdf.dispose();}
}
添加结果

用 Java 在 PDF 中设置显示或隐藏图层
在添加图层到 PDF 文档中后,图层默认为显示在 PDF 页面上。我们可以通过 PdfLayer.setVisibility (PdfVisibility) 方法来设置是否在页面上显示图层。以下是操作步骤:
- 创建一个 PdfDocument 类对象并使用 PdfDocument.loadFromFile() 方法加载 PDF 文档。
- 使用 PdfDocument.getLayers().get() 方法通过图层名称获取图层。
- 使用 PdfLayer.setVisibility() 方法设置图层是否在页面上可见。
- 使用 PdfDocument.saveToFile() 方法保存 PDF 文档。
Java
import com.spire.pdf.PdfDocument;
import com.spire.pdf.graphics.layer.PdfLayer;
import com.spire.pdf.graphics.layer.PdfVisibility;public class SetPdfLayerVisibility {public static void main(String[] args) {// 创建PdfDocument对象并加载PDF文档PdfDocument pdf = new PdfDocument();pdf.loadFromFile("添加图层.pdf");// 通过名称获取指定图层PdfLayer layer = pdf.getLayers().get("页眉");// 将图层设置为隐藏layer.setVisibility(PdfVisibility.Off);// 将图层设置为显示//layer.setVisibility(PdfVisibility.On);// 保存PDF文档pdf.saveToFile("隐藏页眉.pdf");}
}
设置结果

用 Java 从 PDF 中删除图层
如果有不需要的图层,我们可以使用 PdfDocument.getLayers ().removeLayer (String name, boolean withContent) 方法删除图层,或者只删除图层而保留内容。详细操作步骤如下:
- 创建一个 PdfDocument 类对象并使用 PdfDocument.loadFromFile() 方法加载 PDF 文档。
- 使用 PdfDocument.getLayers().removeLayer() 方法完全删除图层或删除图层保留内容。
- 使用 PdfDocument.saveToFile() 方法保存 PDF 文档。
Java
import com.spire.pdf.PdfDocument;public class DeletePdfLayer {public static void main(String[] args) {// 创建PdfDocument对象并加载PDF文档PdfDocument pdf = new PdfDocument();pdf.loadFromFile("添加图层.pdf");// 删除页眉图层//pdf.getLayers().removeLayer("页眉");// 删除页眉但保留页面上的内容pdf.getLayers().removeLayer("页眉", false);// 保存文档pdf.saveToFile("删除图层保留内容.pdf");}
}
删除结果

以上是关于如何使用 Free Spire.PDF for Java 来创建和管理 PDF 文档图层的介绍。同时,此 API 还有许多其他的功能您可前往 Spire.PDF for Java 教程查看。
相关文章:
用 Java 在 PDF 中创建和管理图层,实现交互式文档
PDF 图层(也称为可见图层或附加图层等)是组织和管理 PDF 文档中内容可见性的一种方法。PDF 图层可用于创建交互式文档、隐藏或显示特定信息、创建多语言版本文档等。通过添加和删除图层,用户可以根据需要定制 PDF 文档指定内容的可见性与显示…...
公司oa是什么?一般公司oa有什么样功能?
公司OA(Office Automation)是指通过计算机和信息技术来实现办公自动化的系统。 它提供了一系列的功能和工具,用于协调、管理和处理公司内部的日常事务和流程。OA系统旨在提高工作效率、加强信息交流与共享、简化业务流程,并提供便…...
pytorch里面的 nn.Parameter 和 tensor有哪些异同点
简单来说,你可以把tensor看作是一个通用的数据结构,而nn.Parameter看作是一种特殊的tensor,这种tensor可以被优化以提高模型的性能。在创建模型参数时,你应该使用nn.Parameter而不是直接使用tensor,因为这样可以确保模…...
leetcode 37. 解数独
编写一个程序,通过填充空格来解决数独问题。 数独的解法需 遵循如下规则: 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图) 数独部分…...
GIT 分支管理办法
GIT 分支管理办法 一. 大型项目分支管理中存在的痛点 大型项目中需求的上线存在很大的不确定性,而且往往存在多版本、多团队、多开发并行的情况。尤其是大型企业对上线分支中编号的管理十分严苛,严禁夹带上线。这时对于开发而言,没有一个好…...
网络代理的多重应用与安全保障
随着互联网的迅速发展,网络代理技术日益受到关注,并在各个领域展现出重要作用。本文将深入探讨Socks5代理、IP代理以及它们在网络安全、爬虫应用和HTTP协议中的多重应用,帮助读者更好地理解和应用这些关键技术。 1. Socks5代理与SK5代理的异…...
C51--简易报警器设计
硬件清单: C52单片机 震动传感器模块 433M无线发射接受模块 继电器模块 高功率喇叭 杜邦线 振动传感器控制灯: 如何知道是否发生震动?震动后的信号表示又是什么? 振动传感器模块产生震动,输出低电平,绿色指…...
2023年最新全国各省行政区划数据(省-市-区县-乡镇-村)
背景 现实情况,在信息系统开发、电子商务平台、app等等相关软件开发,都会设计到行政区数据联动,这里已经爬好全国各省行政区划数据可供下载。 数据来源 内容为2023年全国统计用区划代码(12位)和城乡分类代码ÿ…...
html5 web 按钮跳转方法(及其相关)
html5 web 按钮跳转方法(及其相关) 方法一 <a href"javascript:" οnclick"history.go(-2); ">返回前两页</a> 方法二 <a href"javascript:" οnclick"self.locationdocument.referrer;">返…...
ES6 Generator 函数
Generator 函数是 ES6 提供的一种异步编程解决方案,语法行为与传统函数完全不同。 形式上,Generator 函数是一个普通函数,但是有两个特征。一是,function关键字与函数名之间有一个星号;二是,函数体内部使用…...
从零开始探索C语言(十二)----预处理器、输入输出及文件读写
文章目录 1. 预处理器1.1 预处理器实例1.2 预定义宏1.3 预处理器运算符1.4 参数化的宏 2. 输入和输出2.1 getchar() & putchar() 函数2.2 gets() & puts() 函数 3. 文件读写3.1 打开文件3.2 关闭文件3.3 写入文件3.4 读取文件3.5 二进制 I/O 函数 4. typedef 和 #defin…...
跨境电商:产业带的深度赋能
近年来,中国跨境电商平台崭露头角,成为推动国内产业带转型升级和出海的新引擎。这一充满活力的领域不仅让中国制造走向世界,也为国内众多产业提供了数字化升级的机会,实现了“小单快反”和按需供应。 专业跨境电商平台如SHEIN和阿…...
09-Vue基础之实现注册页面
个人名片: 😊作者简介:一名大二在校生 🤡 个人主页:坠入暮云间x 🐼座右铭:懒惰受到的惩罚不仅仅是自己的失败,还有别人的成功。 🎅**学习目标: 坚持每一次的学习打卡 文章…...
vue 树状结构数据渲染 (java 处理 list ->树状)
树状结构 Element ui https://element.eleme.cn/#/zh-CN/component/tree <el-tree :data"data" :props"defaultProps" node-click"handleNodeClick"></el-tree><script>export default {data() {return {data: [{label: 一级…...
惊艳!这些独特的搜索引擎你都知道吗?
随着互联网的普及和发展,搜索引擎已经成为我们日常获取信息的重要工具。然而,当我们想要寻找一些特定类型的信息时,普通的搜索引擎可能无法满足我们的需求。这时,一些特殊的搜索引擎便能派上用场本。 文将介绍几种常用的特殊搜索引…...
解除OU屏蔽(EBS检查无法直接查询解决)
解除OU屏蔽(EBS检查无法直接查询解决) 具有OU屏蔽的例子 SELECT t.org_id, t.* FROM po.po_headers_all t -- 无屏蔽表,在PL/SQL运行有数据 SELECT t.org_id, t.* FROM apps.po_headers t -- 包含OU屏蔽,在PL/SQL中查询无数据多组织屏蔽原理 1. 在…...
10月8日 Jdbc(1)
jdbc 接口是一个类的父类 java连接数据库, java操作数据库, 把java作为数据库的一个客户端 JDBC是接口,而JDBC驱动才是接口的实现,没有驱动无法完成数据库连接!每个数据库厂商都有自己的驱动,用来连接自己公司的数据库。 …...
SAP 第三方销售/单独采购
一、概述 1. 概念 第三方销售和单独采购都是指接到客户订单后,客户所需产品需要向供应商进行采购,该供应商一般是指外部的供应商,特殊情况下,才可能是集团内部的其他子公司,当是集团内其他子公司时,因为如…...
yxy销售网站后台管理系统
springbootmybatisthymeleaf 第一个练习的项目就是小商品零售平台后台管理系统,但是当时由于业务不熟练,需求分析先不做好,导致在开发的过程中出现了很多问题。 这次首先把需求确定,详细的做好前期准备工作,再来进行…...
【vSphere 8 自签名证书】企业 CA 签名证书替换 vSphere Machine SSL 证书Ⅲ—— 颁发自签名证书
目录 博文摘要5. 使用 Microsoft 证书颁发机构颁发自签名 SSL 证书5.1 登录MADCS5.2 申请证书5.3 选择证书类型5.4 提交CR5.5 下载 Base 64 编码的证书5.6 导出 CA 证书(1)打开 cachain.p7b(2)进入证书导出导向(3&…...
eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...
人机融合智能 | “人智交互”跨学科新领域
本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...
【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)
LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 题目描述解题思路Java代码 题目描述 题目链接:LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...
Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案
在大数据时代,海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构,在处理大规模数据抓取任务时展现出强大的能力。然而,随着业务规模的不断扩大和数据抓取需求的日益复杂,传统…...
十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建
【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...
