用Python在PDF文档中创建动作

news2024/9/23 13:17:22

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.coloradmin.cn/o/2090597.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

c++vscode多文件实现通讯录管理系统

cvscode多文件实现通讯录管理系统 作为c入门级别的实战项目,此通讯管理系统项目不仅仅是对c入门阶段学习成果的检验,也是对c基础知识的回顾,体会c在实战制作中的思路,是入门c单文件实现通讯录系统的改进 一、多文件通讯录管理系统简介 系统需…

JAVA—多线程

关于线程以及多线程的学习,包括创建和常用方法还有解决线程安全的措施,最后学习线程池和了解并发和并行,对于悲观锁和乐观锁的部分没有学习 目录 1.线程概述 2.多线程的创建 (1)继承Thread类 (2&#…

【GPT】基于GPT_API_free做一个自己的gpt

最终效果 项目背景 秉持能免费就绝不花钱的原则,基于github项目GPT_API_free获取的gpt apikey。下面是简单的代码 import json import os import requestsopenai_url os.getenv("openaiproxy") openai_apikey os.getenv("openaikey") # 初始…

[图解]SysML和EA建模住宅安全系统-活动作为块

1 00:00:00,210 --> 00:00:04,360 下一个步骤是识别潜在的失效 2 00:00:06,850 --> 00:00:11,150 这里它是用一个块定义图来表达的 3 00:00:12,150 --> 00:00:16,790 图17.21,失效模式识别和因果依赖 4 00:00:19,110 --> 00:00:22,400 但是这个块定义…

【AutoX.js】定时器 Timers

文章目录 原文:https://blog.c12th.cn/archives/36.html定时器 Timers笔记实例 最后 原文:https://blog.c12th.cn/archives/36.html 定时器 Timers 笔记 JavaScript Date 参考手册 时间戳 //当前时间戳 log(Math.round(new Date() / 1000));当前星期 …

C语言小tip之函数递归

hello,各位小伙伴们今天我们来学习一下函数递归。 什么是函数递归呢?简单来说就是函数自己来调用自己。函数递归的主要思想是把大事化小,递归包含两层方面:1、递推 2、回归 在使用函数递归的时候要注意包含两个限制条件&#…

SCI英文期刊发表流程

目录 一、撰写初稿二、预审三、英文查重四、Cover letter和Highlights五、英文语法待续 一、撰写初稿 英文好的话应该直接写英文,因为中英文的写法不一样。 而且在这一步把格式修改好,初稿的最终版 二、预审 可以让同学、老师帮看论文,或者…

[Algorithm][综合训练][字符编码][最少的完全平方数][游游的字母串]详细讲解

目录 1.字符编码1.题目链接2.算法原理详解 && 代码实现 2.最少的完全平方数1.题目链接2.算法原理详解 && 代码实现 3.游游的字母串1.题目链接2.算法思路详解 && 代码实现 1.字符编码 1.题目链接 字符编码 2.算法原理详解 && 代码实现 解法&…

Carla自动驾驶仿真十:Carlaviz三维可视化平台搭建

文章目录 前言一、环境准备1、docker安装2、websocket-client安装3、carlaviz代码下载 二、carlaviz使用1、打开carla客户端2、输入启动命令3、进入carlaviz4、修改manual_control.py脚本5、运行manual_control.py脚本6、运行carlaviz官方脚本(推荐) 前言…

数据库之心:MySQL 探索(一)mysql的安装和基本介绍

欢迎来到我们的MySQL博客!在这里,我们将深入探讨MySQL数据库系统的各个方面,包括基础知识、优化技巧、实践案例以及最新的行业趋势。 目录 前言 什么是数据库? 数据库产品 MySQL安装 解压 配置 添加环境变量 初始化MySQL …

计算机毕业设计PySpark+Scrapy高考推荐系统 高考志愿填报推荐系统 高考爬虫 协同过滤推荐算法 Vue.js Django Hadoop 大数据毕设

目  录 第1章 绪论 1.1 研究背景 1.2 国内外现状 1.2.1 国外研究现状 1.2.2 国内研究现状 1.3 主要研究内容 1.4 论文框架结构 第2章 相关开发技术与理论 2.1 前端技术 1.Vue框架技术 2.Element-Plus 2.2 后端技术 1&#xff0e…

linux下cpu多核运行程序以及运行时间统计

一、多核心运行程序 在linux下我们可以指定线程或者进程运行在指定的cpu核心上,操作方法如下: 1)运行进程指定cpu核心 taskset -c 2 ./app //-c指定运行的cpu核心号,从0计数,查看效果如下: 2&#xff09…

C++map容器中operator[ ]的实现原理

目录 一、operator[ ]函数介绍 二、insert函数介绍 三、operator[ ]函数实现原理 四、operator[ ]函数功能 一、operator[ ]函数介绍 mapped_type& operator[] (const key_type& k);在map容器中存储的是一个键值对value_type&#xff0c;其本质是pair<const key…

maya python调试(pycharm)

maya里面调试代码一直用的print。遇到复杂点的类就感觉有点束手束脚的&#xff0c;因此整理了一下maya调试的一些方法 1.万能的pdb调试 pdb 有2种用法 1.非侵入式方法 &#xff08;不用额外修改源代码&#xff0c;在命令行下直接运行就能调试&#xff09; 常规用法&#xf…

APP长文本内容编辑器功能实现方案

背景 CSDN APP 中原有编辑器页面为纯H5适配&#xff0c;整体用户交互体验差&#xff0c;如何优化APP端编辑器用户体验是我们团队需要思考的问题。下面我们以iOS为例展开讨论。 一、方案调研 我们分析了几款国内内容发布的APP&#xff0c;如知乎、今日头条、简书&#xff0c;…

有了它 一键掌握Vue新版本!

声明&#xff1a;此篇为 ai123.cn 原创文章&#xff0c;转载请标明出处链接&#xff1a;https://ai123.cn/#1 你是否也在为Vue生态中的快速更新而焦头烂额&#xff1f;ue 3.4版本发布&#xff0c;带来模板解析器重写和响应系统重构&#xff0c;提升了性能和开发体验。测试框架如…

《深入理解JAVA虚拟机(第2版)》- 第3章 - 学习笔记

第3章 垃圾收集器与内存分配策略 3.1 概述 垃圾收集器要完成三件事情&#xff1a; 什么样的内存需要回收什么时候回收如何回收 垃圾收集器主要关注的区域是&#xff1a;Java堆和方法区。因为程序计数器、虚拟机栈、本地方法栈是线程私有的&#xff0c;随着线程的结束所使用的…

2d椭圆拟合学习

算法来自论文《 Direct Least Square Fitting of Ellipses》 《NUMERICALLY STABLE DIRECT LEAST SQUARES FITTING OF ELLIPSES》 相关文章 论文阅读&#xff1a;直接拟合椭圆 Direct Least Square Fitting of Ellipseshttps://zhuanlan.zhihu.com/p/645391510Fitting Elli…

rsyslog交叉编译

文章目录 1、依赖库列表2、编译建议3、编译3.1、编译libestr3.2、编译libfastjson3.3、编译zlib3.4、编译libuuid3.5、编译libgpg-error3.6、编译libgcrypt3.7、编译openssl3.8、编译curl3.9、编译rsyslog该文档描述了如何交叉编译rsyslog到arm64嵌入式平台。 1、依赖库列表 li…

UE5开发——射击武器类拾取

整体框架&#xff1a; 拾取武器 要在 Unreal Engine 5 (UE5) 中实现一个按 E 键拾取武器的功能&#xff0c;您可以遵循以下步骤&#xff1a; ### 步骤 1: 创建拾取物品的基础类 1. 在 Content Browser 中创建一个新的 C 类&#xff0c;继承自 AActor 或者 AStaticMeshActor。…