当前位置: 首页 > news >正文

用 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();}
}

添加结果
添加PDF图层

用 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");}
}

设置结果
显示或隐藏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");}
}

删除结果
删除PDF图层

以上是关于如何使用 Free Spire.PDF for Java 来创建和管理 PDF 文档图层的介绍。同时,此 API 还有许多其他的功能您可前往 Spire.PDF for Java 教程查看。

相关文章:

用 Java 在 PDF 中创建和管理图层,实现交互式文档

PDF 图层&#xff08;也称为可见图层或附加图层等&#xff09;是组织和管理 PDF 文档中内容可见性的一种方法。PDF 图层可用于创建交互式文档、隐藏或显示特定信息、创建多语言版本文档等。通过添加和删除图层&#xff0c;用户可以根据需要定制 PDF 文档指定内容的可见性与显示…...

公司oa是什么?一般公司oa有什么样功能?

公司OA&#xff08;Office Automation&#xff09;是指通过计算机和信息技术来实现办公自动化的系统。 它提供了一系列的功能和工具&#xff0c;用于协调、管理和处理公司内部的日常事务和流程。OA系统旨在提高工作效率、加强信息交流与共享、简化业务流程&#xff0c;并提供便…...

pytorch里面的 nn.Parameter 和 tensor有哪些异同点

简单来说&#xff0c;你可以把tensor看作是一个通用的数据结构&#xff0c;而nn.Parameter看作是一种特殊的tensor&#xff0c;这种tensor可以被优化以提高模型的性能。在创建模型参数时&#xff0c;你应该使用nn.Parameter而不是直接使用tensor&#xff0c;因为这样可以确保模…...

leetcode 37. 解数独

编写一个程序&#xff0c;通过填充空格来解决数独问题。 数独的解法需 遵循如下规则&#xff1a; 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。&#xff08;请参考示例图&#xff09; 数独部分…...

GIT 分支管理办法

GIT 分支管理办法 一. 大型项目分支管理中存在的痛点 大型项目中需求的上线存在很大的不确定性&#xff0c;而且往往存在多版本、多团队、多开发并行的情况。尤其是大型企业对上线分支中编号的管理十分严苛&#xff0c;严禁夹带上线。这时对于开发而言&#xff0c;没有一个好…...

网络代理的多重应用与安全保障

随着互联网的迅速发展&#xff0c;网络代理技术日益受到关注&#xff0c;并在各个领域展现出重要作用。本文将深入探讨Socks5代理、IP代理以及它们在网络安全、爬虫应用和HTTP协议中的多重应用&#xff0c;帮助读者更好地理解和应用这些关键技术。 1. Socks5代理与SK5代理的异…...

C51--简易报警器设计

硬件清单&#xff1a; C52单片机 震动传感器模块 433M无线发射接受模块 继电器模块 高功率喇叭 杜邦线 振动传感器控制灯&#xff1a; 如何知道是否发生震动&#xff1f;震动后的信号表示又是什么&#xff1f; 振动传感器模块产生震动&#xff0c;输出低电平&#xff0c;绿色指…...

2023年最新全国各省行政区划数据(省-市-区县-乡镇-村)

背景 现实情况&#xff0c;在信息系统开发、电子商务平台、app等等相关软件开发&#xff0c;都会设计到行政区数据联动&#xff0c;这里已经爬好全国各省行政区划数据可供下载。 数据来源 内容为2023年全国统计用区划代码&#xff08;12位&#xff09;和城乡分类代码&#xff…...

html5 web 按钮跳转方法(及其相关)

html5 web 按钮跳转方法&#xff08;及其相关&#xff09; 方法一 <a href"javascript:" οnclick"history.go(-2); ">返回前两页</a> 方法二 <a href"javascript:" οnclick"self.locationdocument.referrer;">返…...

ES6 Generator 函数

Generator 函数是 ES6 提供的一种异步编程解决方案&#xff0c;语法行为与传统函数完全不同。 形式上&#xff0c;Generator 函数是一个普通函数&#xff0c;但是有两个特征。一是&#xff0c;function关键字与函数名之间有一个星号&#xff1b;二是&#xff0c;函数体内部使用…...

从零开始探索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…...

跨境电商:产业带的深度赋能

近年来&#xff0c;中国跨境电商平台崭露头角&#xff0c;成为推动国内产业带转型升级和出海的新引擎。这一充满活力的领域不仅让中国制造走向世界&#xff0c;也为国内众多产业提供了数字化升级的机会&#xff0c;实现了“小单快反”和按需供应。 专业跨境电商平台如SHEIN和阿…...

09-Vue基础之实现注册页面

个人名片&#xff1a; &#x1f60a;作者简介&#xff1a;一名大二在校生 &#x1f921; 个人主页&#xff1a;坠入暮云间x &#x1f43c;座右铭&#xff1a;懒惰受到的惩罚不仅仅是自己的失败&#xff0c;还有别人的成功。 &#x1f385;**学习目标: 坚持每一次的学习打卡 文章…...

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: 一级…...

惊艳!这些独特的搜索引擎你都知道吗?

随着互联网的普及和发展&#xff0c;搜索引擎已经成为我们日常获取信息的重要工具。然而&#xff0c;当我们想要寻找一些特定类型的信息时&#xff0c;普通的搜索引擎可能无法满足我们的需求。这时&#xff0c;一些特殊的搜索引擎便能派上用场本。 文将介绍几种常用的特殊搜索引…...

解除OU屏蔽(EBS检查无法直接查询解决)

解除OU屏蔽(EBS检查无法直接查询解决) 具有OU屏蔽的例子 SELECT t.org_id, t.* FROM po.po_headers_all t -- 无屏蔽表&#xff0c;在PL/SQL运行有数据 SELECT t.org_id, t.* FROM apps.po_headers t -- 包含OU屏蔽&#xff0c;在PL/SQL中查询无数据多组织屏蔽原理 1. 在…...

10月8日 Jdbc(1)

jdbc 接口是一个类的父类 java连接数据库, java操作数据库, 把java作为数据库的一个客户端 JDBC是接口&#xff0c;而JDBC驱动才是接口的实现&#xff0c;没有驱动无法完成数据库连接&#xff01;每个数据库厂商都有自己的驱动&#xff0c;用来连接自己公司的数据库。 ​ …...

SAP 第三方销售/单独采购

一、概述 1. 概念 第三方销售和单独采购都是指接到客户订单后&#xff0c;客户所需产品需要向供应商进行采购&#xff0c;该供应商一般是指外部的供应商&#xff0c;特殊情况下&#xff0c;才可能是集团内部的其他子公司&#xff0c;当是集团内其他子公司时&#xff0c;因为如…...

yxy销售网站后台管理系统

springbootmybatisthymeleaf 第一个练习的项目就是小商品零售平台后台管理系统&#xff0c;但是当时由于业务不熟练&#xff0c;需求分析先不做好&#xff0c;导致在开发的过程中出现了很多问题。 这次首先把需求确定&#xff0c;详细的做好前期准备工作&#xff0c;再来进行…...

【vSphere 8 自签名证书】企业 CA 签名证书替换 vSphere Machine SSL 证书Ⅲ—— 颁发自签名证书

目录 博文摘要5. 使用 Microsoft 证书颁发机构颁发自签名 SSL 证书5.1 登录MADCS5.2 申请证书5.3 选择证书类型5.4 提交CR5.5 下载 Base 64 编码的证书5.6 导出 CA 证书&#xff08;1&#xff09;打开 cachain.p7b&#xff08;2&#xff09;进入证书导出导向&#xff08;3&…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存

文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...

论文笔记——相干体技术在裂缝预测中的应用研究

目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术&#xff1a;基于互相关的相干体技术&#xff08;Correlation&#xff09;第二代相干体技术&#xff1a;基于相似的相干体技术&#xff08;Semblance&#xff09;基于多道相似的相干体…...

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南&#xff1a;从入门到实战 一、Grunt 是什么&#xff1f; Grunt是一个基于 Node.js 的前端自动化任务运行器&#xff0c;主要用于自动化执行项目开发中重复性高的任务&#xff0c;例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

DingDing机器人群消息推送

文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人&#xff0c;点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置&#xff0c;详见说明文档 成功后&#xff0c;记录Webhook 2 API文档说明 点击设置说明 查看自…...

Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么&#xff1f;它的作用是什么&#xff1f; Spring框架的核心容器是IoC&#xff08;控制反转&#xff09;容器。它的主要作用是管理对…...

ubuntu系统文件误删(/lib/x86_64-linux-gnu/libc.so.6)修复方案 [成功解决]

报错信息&#xff1a;libc.so.6: cannot open shared object file: No such file or directory&#xff1a; #ls, ln, sudo...命令都不能用 error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory重启后报错信息&…...