用Python在PDF文档中创建动作

PDF格式因其跨平台兼容性和丰富的功能集而成为许多行业中的首选文件格式。其中,PDF中的动作(Action) 功能尤为突出,它允许开发者嵌入交互式元素,如链接、按钮或是更复杂的脚本,从而显著提升文档的互动性和功P能性。通过使用Python这样的强大编程语言来创建这些动作,不仅可以自动化文档处理流程,还能实现各种复杂的文档操作,极大地丰富了PDF文档的应用场景,使得PDF文档不再仅仅是静态的内容展示,而是能够更好地服务于用户需求和业务流程。本文将介绍如何使用Python在PDF文档中创建动作

文章目录

    • 用Python在PDF中创建导航跳转动作
    • 用Python在PDF中创建声音动作
    • 用Python在PDF中创建JavaScript动作

本文所使用的方法需要用到Spire.PDF for Python,Python:pip install Spire.PDF

用Python在PDF中创建导航跳转动作

库中的PdfGoToAction类代表导航跳转动作,可以跳转到文档内指定页面的指定位置,同时可自定义跳转后的页面缩放。一下是利用此类在PDF文档中创建导航跳转动作的操作步骤:

  1. 导入所需模块。
  2. 创建PdfDocument类,并使用PdfDocument.LoadFromFile()方法载入PDF文件。
  3. 使用PdfDocument.Pages.get_Item()方法获取一个页面。
  4. 创建一个PdfDestination实例来设置跳转目标位置以及跳转后的页面缩放。
  5. PdfDestination实例创建一个PdfGoToAction实例。
  6. PdfGoToAction实例在指定位置创建一个PdfActionAnnotation实例,并使用该类下的方法设置注释的颜色。
  7. 使用PdfPageBase.Annotations.Add()方法将注释添加到页面上。
  8. 使用PdfPageBase.Canvas.DrawString()方法在注释位置绘制导航提示文字。
  9. 使用PdfDocument.SaveToFile()方法保存文档。
  10. 释放资源。

代码示例

from spire.pdf import *# 创建PdfDocument类的一个实例并加载一个PDF文档
pdf = PdfDocument()
pdf.LoadFromFile("示例.pdf")# 获取第二页
page = pdf.Pages.get_Item(1)# 创建一个PdfDestination实例并设置其属性
destination = PdfDestination(pdf.Pages.get_Item(0))
destination.Location = PointF(0.0, 0.0)
destination.Mode = PdfDestinationMode.Location
destination.Zoom = 0.8# 创建一个PdfGoToAction实例
action = PdfGoToAction(destination)# 创建一个PdfActionAnnotation实例
rect = RectangleF.FromLTRB(70, pdf.PageSettings.Size.Height - 120, 140, pdf.PageSettings.Size.Height - 100)
annotation = PdfActionAnnotation(rect, action)
annotation.Color = PdfRGBColor(Color.get_Red())# 将注释添加到第二页
page.Annotations.Add(annotation)# 绘制按钮的文字
font = PdfTrueTypeFont("HarmonyOS Sans SC", 14.0, PdfFontStyle.Regular, True)
stringFormat = PdfStringFormat(PdfTextAlignment.Center)
page.Canvas.DrawString("转到第一页", font, PdfBrushes.get_Red(), rect, stringFormat)# 保存文档
pdf.SaveToFile("output/PDF添加导航动作.pdf")
pdf.Close()

结果
Python PDF中创建导航跳转动作

用Python在PDF中创建声音动作

PdfSoundAction类表示一个音频动作,可以用于嵌入音频到PDF文档中,并在用户执行指定操作时播放音频,如点击动作注释时和打开文件时。以下是在PDF文档中创建声音动作的操作步骤:

  1. 导入所需模块。
  2. 创建PdfDocument类,并使用PdfDocument.LoadFromFile()方法载入PDF文件。
  3. 使用指定音频文件创建PdfSoundAction实例。
  4. 使用PdfSoundAction类下的属性设置音频播放参数。
  5. 使用PdfSoundAction.Sound下的属性设置音频参数。
  6. 使用PdfDocument.Pages.get_Item()方法获取一个页面。
  7. 使用PdfPageBase.Canvas.DrawImage()方法在页面指定位置绘制音频播放图标。
  8. PdfSoundAction实例创建一个PdfActionAnnotation实例,并使用PdfPageBase.Annotations.Add()方法将其添加到页面的音频播放图标位置。
  9. 还可以直接使用PdfDocument.AfterOpenAction属性直接将声音动作设置为文档开启时执行的动作。
  10. 使用PdfDocument.SaveToFile()方法保存文档。
  11. 释放资源。

代码示例

from spire.pdf import *# 创建PdfDocument实例并加载PDF文件
pdf = PdfDocument()
pdf.LoadFromFile("示例2.pdf")# 获取文档的第一页
page = pdf.Pages.get_Item(0)# 使用声音文件路径创建PdfSoundAction实例
soundAction = PdfSoundAction("Wave.wav")# 设置音频参数
soundAction.Sound.Bits = 16
soundAction.Sound.Channels = PdfSoundChannels.Stereo
soundAction.Sound.Encoding = PdfSoundEncoding.Signed
soundAction.Sound.Rate = 44100# 设置播放参数
soundAction.Volume = 0.5
soundAction.Repeat = True
soundAction.Mix = True
soundAction.Synchronous = False# 在页面上绘制一张图片
image = PdfImage.FromFile("Sound.png")
page.Canvas.DrawImage(image, PointF(30.0, 30.0))# 使用声音动作创建PdfActionAnnotation实例
rect = RectangleF.FromLTRB(30.0, 30.0, image.GetBounds().Width + 30.0, image.GetBounds().Height + 30.0)
annotation = PdfActionAnnotation(rect, soundAction)# 将注释添加到页面
page.Annotations.Add(annotation)# 设置声音动作为文档打开后播放
# pdf.AfterOpenAction = soundAction# 保存文档
pdf.SaveToFile("output/PDF创建声音动作.pdf")
pdf.Close()

结果
Python PDF中创建声音动作

用Python在PDF中创建JavaScript动作

PdfJavaScriptAction类表示一个JavaScript动作,可在指定情况下在PDF文档中执行JavaScript代码,如填充表单、重置表单等。以下是在PDF中创建JavaScript动作的操作步骤示例:

  1. 导入所需模块。
  2. 创建PdfDocument类,并使用PdfDocument.LoadFromFile()方法载入PDF文件。
  3. 使用PdfDocument.Pages.get_Item()方法获取一个页面。
  4. 自定义一段JavaScript代码。
  5. 用此代码创建PdfJavaScriptAction实例。
  6. PdfJavaScriptAction实例在页面指定位置创建一个PdfActionAnnotation实例,并设置其颜色。
  7. 使用PdfPageBase.Annotations.Add()方法将注释添加到页面。
  8. 使用PdfDocument.SaveToFile()方法保存文档。
  9. 释放资源。

代码示例

from spire.pdf import *# 创建一个PdfDocument实例
pdf = PdfDocument()# 加载一个PDF文件
pdf.LoadFromFile("示例3.pdf")# 获取第一页
page = pdf.Pages.get_Item(0)# 指定JavaScript代码
js = """
var lastName = this.getField("LastName").value;
var firstName = this.getField("FirstName").value;
this.getField("FullName").value = lastName + " " + firstName;
"""# 创建一个JavaScript动作
jsAction = PdfJavaScriptAction(js)# 创建一个带有JavaScript动作的注释
rect = RectangleF.FromLTRB(380, 160, 460, 180)
annotation = PdfActionAnnotation(rect, jsAction)
annotation.Color = PdfRGBColor(Color.get_Red())# 将注释添加到页面上
page.Annotations.Add(annotation)# 绘制动作提示文本
font = PdfTrueTypeFont("宋体", 12.0, PdfFontStyle.Regular, True)
stringFormat = PdfStringFormat(PdfTextAlignment.Center)
text = "点击生成全名"
page.Canvas.DrawString(text, font, PdfBrushes.get_Red(), rect, stringFormat)# 保存文档
pdf.SaveToFile("output/PDF创建JavaScript动作.pdf")
pdf.Close()

结果
Python PDF中创建JavaScript动作

本文演示了如何使用Python在PDF文档中创建导航跳转、声音及JavaScript动作。

更多PDF文档操作技巧请前往Spire.PDF for Python教程查看。

申请免费License

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/412385.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Apache RocketMQ 中文社区全新升级丨阿里云云原生 7 月产品月报

云原生月度动态 云原生是企业数字创新的最短路径。 《阿里云云原生每月动态》,从趋势热点、产品新功能、服务客户、开源与开发者动态等方面,为企业提供数字化的路径与指南。 趋势热点 🥇 通义灵码入选 2024 世界人工智能大会最高荣誉「镇…

SprinBoot+Vue超市管理系统的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍:CSDN认证博客专家,CSDN平台Java领域优质…

Golang学习笔记-Golang中的锁

同步原语和锁 Golang作为一个原生支持用户态的语言,当提到并发进程,多线程的时候,是离不开锁的,锁是一种并发编程中的同步原语(Synchronization Primitives),它能保证多个 Goroutine 在访问同一…

4. kafka消息监控客户端工具

KafkaKing官网地址 : https://github.com/Bronya0/Kafka-King github下载地址 : Releases Bronya0/Kafka-King (github.com) (windows、macos、linux版本) 云盘下载地址 : https://pan.baidu.com/s/1dzxTPYBcNjCTSsLuHc1TZw?pwd276i (仅windows版本) 连接kafka 输入本地地址…

数据分析及应用:如何对试卷得分做min-max归一化处理?

目录 0 问题描述 1 数据准备 2 问题分析 3 小结 0 问题描述 现有试卷信息表examination_info(exam_id试卷ID, tag试卷类别, difficulty试卷难度, duration考试时长, release_time发布时间): 试卷作答记录表exam_record(uid用户ID, exam_id试卷ID, start_time开始作答时…

H5手机端调起支付宝app支付

1.调起APP页面如下 步骤 1.让后端对接一下以下文档(手机网站支付通过alipays协议唤起支付宝APP) https://opendocs.alipay.com/open/203/107091?pathHash45006f4f&refapi 2.后端接口会返回一个form提交表单 html:在页面中定义一个d…

【FRP 内网穿透】

文章目录 一、什么叫内网穿透1、内网穿透技术的描述2、内网穿透技术的工作方式通常包括以下几个步骤 二、用内网穿透解决了什么问题三、常见的内网穿透解决方式1、FRP (开源)2、花生壳(商业)3、ZeroTier(开源 商业&…

用Python绘制历史K线数据

历史K线数据是指股票或指数在特定时间段内的价格变化记录,通常包括开盘价、最高价、最低价、收盘价以及成交量等信息。K线图是一种常用的图形表示方法,用于描述股票市场的价格波动,它由一系列的柱状图组成,每个柱状图(…

[ACP云计算]易错题(原题)

ECS 1、 2、 3、 4、 5、 6、 7、 8、 9、 10、 11、 12、 13、 14、 15、 16、 17、 18、 19、 20、 21、 22、 23、 24、 25、 26、 27、 28、 29、 30、 31、 32、 33、 34、 35、 36、 37、 对象存储OSS 1、 2、 3、 4、 5、 6、 重点!!&#xff…

本地部署一个WordPress博客结合内网穿透实现异地远程访问本地站点

文章目录 前言1. 安装WordPress2. 创建WordPress数据库3. 安装相对URL插件4. 安装内网穿透发布网站4.1 命令行方式:4.2. 配置wordpress公网地址 5. 配置WordPress固定公网地址 前言 本文主要介绍如何在Linux Ubuntu系统上使用WordPress搭建一个本地网站&#xff0c…

.NET Razor类库-热加载 就是运行时编译

1.新建3个项目 1.1 一个.NET Standard2.1项目 IX.Sdk.SvnCICD4NuGet 1.2 一个.NET Razor类库项目 IX.Sdk.SvnCICD4NuGet.RazorWeb 1.3 一个.NET6 Web项目 IX.Sdk.SvnCICD4NuGet.Web 这3个项目的引用关系 Web引用 Razor类库 和 .NET Standard2.1 Razor类库引用.NET Standard2.1…

[LLM][Prompt Engineering]:大语言模型上下文学习-What、How、Why?

上下文学习 上下文学习什么是上下文学习2. 示例的选择2.1 相关度排序2.2 集合多样性2.3 大语言模型 3. 示例格式3.1 人工标注3.2 利用大语言模型自动生成 4. 示例顺序5. 上下文学习为什么可以work5.1 能力来源5.2 ICL的能力 Reference 在GPT-3的论文中,OpenAI 研究团…

【Tomcat+MySQL+Redis源码安装三件套】

TomcatMySQLRedis源码安装三件套 Tomcat部分概念Tomcat的作用Tomcat的原理Linux运维中的应用场景具体操作示例 基本使用流程实验Tomcat安装tomcat的反向代理及负载均衡源地址hash(不能负载)tomcat负载均衡实现(使用cookie) memcached 操作命令 理论补充结…

注册免费的vps:infinityfree

首先是注册网址 https://dash.infinityfree.com/login 各位自行注册就好了 注册好后创建账户,选择最左边这个免费的就可以了 然后可以创建一个子域名,各位自行选择后缀和填写前面就好了 然后拉下来选择 I approve 然后创建账户 然后就可以打开控制面…

LRN正则化是什么?

LRN正则化,全称为Local Response Normalization(局部响应归一化),是一种在深度学习,特别是在卷积神经网络(CNN)中常用的正则化技术。该技术旨在通过模拟生物视觉系统中的侧抑制现象,…

微深节能 环冷卸灰小车定位远程控制系统 格雷母线

微深节能环冷卸灰小车定位远程控制系统中的格雷母线,作为一种高精度位移测量系统,在系统中发挥着关键作用。 一、格雷母线概述 格雷母线系统主要由格雷母线、天线箱、地址解码器、地址编码器四个核心部分组成。其核心部件包括扁平状的尼龙加纤合成材质外…

华为大咖说丨企业数字化转型如何开展顶层设计?

本文作者:李克武(华为交通智慧化军团 首席数字化转型专家)全文约1787字,阅读约需6分钟 近期,我与朋友探讨了有关企业数字化转型顶层设计这一话题。探讨结束后,我认为有必要详述一番,由此才有了这…

更改文件路径时出现The location is not writable.Please choose a new location问题解决方案

The location is not writable.Please choose a new location问题解决方案 1.问题如下图: 在当前盘里面试着删除一个文件夹,发现需要管理员的权限才可删除 主要原因:当前盘没有修改/写入权限 2.解决方案 在需要写入的盘符上右键–>点击属…

矩阵分析 学习笔记2 线性子空间 线性映射

子空间是啥: 平凡子空间:{0}(只有一个0元素)和V(原本的子空间) 向量组生成的子空间: 比如说,我们的三维空间就是由三个标准基组成的向量组“张”成的空间,而标准基组成的…

解决npm下载依赖速度慢的问题

🌟 前言 欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍 &#x…