PDF文件现已成为文档存储和分发的首选格式。然而,PDF文件的静态特性有时会限制其交互性。超链接是提高PDF文件互动性和用户体验的关键元素。Python作为一种强大的编程语言,拥有多种库和工具来处理PDF文件,包括添加、删除超链接。本文将详细介绍如何使用第三方库Spire.PDF for Python来进行这些操作。

  • Python 在PDF文档中添加超链接
  • Python 删除PDF 文档中的超链接

所需Python库 - Spire.PDF for Python。可以通过下面的pip 命令直接安装:

pip install Spire.Pdf

Python 在PDF文档中添加超链接

Spire.PDF for Python支持在PDF中添加以下几种不同类型的超链接:

  1. 简单文字链接:直接使用 PdfPageBase.Canvas.DrawString() 方法将其绘制到页面上。
  2. 超文本链接、邮箱链接:通过 PdfTextWebLink.DrawTextWebLink() 方法绘制到页面上。
  3. 文档链接:通过 PdfPageBase.AnnotationsWidget.Add(PdfFileLinkAnnotation) 方法添加。

Python 代码如下:

from spire.pdf.common import *
from spire.pdf import * # 创建PDF文档
pdf = PdfDocument() # 添加页面
page = pdf.Pages.Add() # 设置初始X和Y坐标
y = 30.0
x = 10.0 # 创建PDF字体
font = PdfTrueTypeFont("宋体", 14.0, PdfFontStyle.Regular, True)
font1 = PdfTrueTypeFont("宋体", 14.0, PdfFontStyle.Underline, True) # 添加简单文本链接
label = "简单链接: "
format = PdfStringFormat()
format.MeasureTrailingSpaces = True
page.Canvas.DrawString(label, font, PdfBrushes.get_Black(), 0.0, y, format)
x = font.MeasureString(label, format).Width
url = "https://www.e-iceblue.cn"
page.Canvas.DrawString(url, font1, PdfBrushes.get_Blue(), x, y)
y = y + 28 # 添加超文本链接
label = "超文本链接:"
page.Canvas.DrawString(label, font, PdfBrushes.get_Black(), 0.0, y, format)
x = font.MeasureString(label, format).Width
webLink = PdfTextWebLink()
webLink.Text = "主页"
webLink.Url = url
webLink.Font = font1
webLink.Brush = PdfBrushes.get_Blue()
webLink.DrawTextWebLink(page.Canvas, PointF(x, y))
y = y + 28 # 添加邮件链接
label = "邮件链接: "
page.Canvas.DrawString(label, font, PdfBrushes.get_Black(), 0.0, y, format)
x = font.MeasureString(label, format).Width
link = PdfTextWebLink()
link.Text = "联系我们"
link.Url = "mailto:support @e-iceblue.com"
link.Font = font1
link.Brush = PdfBrushes.get_Blue()
link.DrawTextWebLink(page.Canvas, PointF(x, y))
y = y + 28 # 添加文档链接
label = "文档链接: "
page.Canvas.DrawString(label, font, PdfBrushes.get_Black(), 0.0, y, format)
x = font.MeasureString(label, format).Width
text = "点击打开文件"
location = PointF(x, y)
size = font1.MeasureString(text)
linkBounds = RectangleF(location, size)
fileLink = PdfFileLinkAnnotation(linkBounds, "C:\\Users\\Administrator\\Desktop\\排名.xlsx")
fileLink.Border = PdfAnnotationBorder(0.0)
page.AnnotationsWidget.Add(fileLink)
page.Canvas.DrawString(text, font1, PdfBrushes.get_Blue(), x, y) # 保存PDF文档
pdf.SaveToFile("PDF超链接.pdf")
pdf.Close()

Python 删除PDF 文档中的超链接

如果要将PDF文档中已有的超链接一次性全部删除,可以参考以下步骤:

  1. 通过 LoadFromFile() 方法加载 PDF 文档。
  2. 循环遍历文档中的页面,并通过 PdfPageBase.AnnotationsWidget 属性获取每个页面上的注释。
  3. 循环遍历所有注释,检查每个注释是否为超链接。
  4. 如果是,则使用 PdfAnnotationCollection.Remove() 方法将其删除。
  5. 使用 PdfDocument.SaveToFile() 方法保存文档。

Python 代码:

from spire.pdf import *
from spire.pdf.common import * # 加载PDF文档
pdf = PdfDocument()
pdf.LoadFromFile("PDF超链接.pdf") # 遍历文档中的所有页面
for j in range(pdf.Pages.Count):
# 获取每一页
page = pdf.Pages.get_Item(j)
# 获取每一页上的注释
annotations = page.AnnotationsWidget
# 检查注释是否为空
if annotations.Count > 0:
# 遍历所有注释
i = annotations.Count - 1
while i >=0:
# 获取注释
annotation = annotations.get_Item(i)
# 检查注释是否为超链接
if isinstance(annotation, PdfTextWebLinkAnnotationWidget):
# 删除超链接
annotations.Remove(annotation)
i -= 1 # 保存PDF文档
pdf.SaveToFile("删除PDF超链接.pdf")
pdf.Close()

如果仅需删除PDF某一页中的指定超链接,可以参考以下代码:

# 删除第一页中的第一个超链接
page = pdf.Pages.get_Item(0)
page.AnnotationsWidget.RemoveAt(0)

---------------------------------------------------------------------------------------------------------------------

生成文档中的红色水印,可以通过点击以下链接,申请一个月免费授权来去除并完整试用:
https://www.e-iceblue.cn/misc/temporary-license.html

通过 Python 在PDF中添加、或删除超链接的更多相关文章

  1. JavaScript向select下拉框中添加和删除元素

    JavaScript向select下拉框中添加和删除元素 1.说明 a   利用append()方法向下拉框中添加元素 b   利用remove()方法移除下拉框中最后一个元素 2.设计源码 < ...

  2. Java 在PDF 中添加超链接

    对特定元素添加超链接后,用户可以通过点击被链接的元素来激活这些链接,通常在被链接的元素下带有下划线或者以不同的颜色显示来进行区分.按照使用对象的不同,链接又可以分为:文本超链接,图像超链接,E-mai ...

  3. 对List遍历过程中添加和删除的思考

    对List遍历过程中添加和删除的思考 平时开发过程中,不少开发者都遇到过一个问题:在遍历集合的的过程中,进行add或者remove操作的时候,会出现2类错误,包括:java.util.Concurre ...

  4. Python 日志输出中添加上下文信息

    Python日志输出中添加上下文信息 除了传递给日志记录函数的参数(如msg)外,有时候我们还想在日志输出中包含一些额外的上下文信息.比如,在一个网络应用中,可能希望在日志中记录客户端的特定信息,如: ...

  5. C# 在PDF中添加墨迹注释Ink Annotation

    PDF中的墨迹注释(Ink Annotation),表现为徒手涂鸦式的形状:该类型的注释,可任意指定形状顶点的位置及个数,通过指定的顶点,程序将连接各点绘制成平滑的曲线.下面,通过C#程序代码介绍如何 ...

  6. Python 分发包中添加额外文件【新手必学】

      在制作一个 Python 分发包时经常需要把一些文件添加到包中.最常见的例子是你希望通过 pip install命令安装 Python 包时会在 /etc/ 等目录下自动添加默认配置文件,由此可以 ...

  7. 怎样Zbrush 4R7中添加和删除SubTool

    添加或删除SubTool在ZBrush®软件中是非常简单易操作的,通常在用SubTool面板已经给我们提供了相应的命令来对其进行操作,它能够将一个或多个格式为ZTL的文件同时添加进SubTool里. ...

  8. MySql中添加用户/删除用户

    MySql中添加用户,新建数据库,用户授权,删除用户,修改密码(注意每行后边都跟个;表示一个命令语句结束): 1.新建用户 登录MYSQL: @>mysql -u root -p @>密码 ...

  9. Java 在PDF中添加页面跳转按钮

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

  10. MySQL中添加、删除约束

    MySQL中6种常见的约束:主键约束(primary key).外键约束(foreign key).非空约束(not null).唯一性约束(unique).默认值约束(defualt).自增约束(a ...

随机推荐

  1. UNIDAC中TDataSet组件CachedUpdates属性使用

    官方方法组合示例,使用UpdatesPending属性可判断是否有修改在缓存区中

  2. 五. Redis 配置内容(详细配置说明)

    五. Redis 配置内容(详细配置说明) @ 目录 五. Redis 配置内容(详细配置说明) 1. Units 单位配置 2. INCLUDES (包含)配置 3. NETWORK (网络)配置 ...

  3. java中的ArrayBlockingQueue

    ArrayBlockingQueue ArrayBlockingQueue 是 Java 并发包 (java.util.concurrent) 中的一个线程安全的阻塞队列实现. 它基于数组实现,容量固 ...

  4. 大模型背后的向量魔法:Embedding技术初探

    本文原本是2022年写的,然而一直没有完善,自从LLM火起来之后,NLP领域的技术更新很快,本文只是大概介绍了Embedding相关的基础知识,具体应用接下来会在博客更新发布. 前言 又是很长一段时间 ...

  5. oracle 常用函数2

    1.ASCII 2 2.CHR. 2 3.CONCAT. 2 4.INITCAP. 2 5.INSTR(C1,C2,I,J) 3 6.LENGTH *. 3 7.LOWER. 3 8.UPPER. 3 ...

  6. Flink CDC全量和增量同步数据如何保证数据的一致性

    Apache Flink 的 Change Data Capture (CDC) 功能主要用于实时捕获数据库中的变更记录,并将其转换为事件流以供下游处理.为了保证全量和增量数据同步时数据的一致性.不丢 ...

  7. Mac安装Hadoop

    软件版本 hadoop3.2.1 一.打开本地ssh登录 # 生成公钥默认 $ ssh-keygen -t rsa -C "robots_wang@163.com" -b 4096 ...

  8. jenkins的admin用户的初始密码路径

    以下命令查看即可

  9. 中国最难入职的IT公司排行榜

    在IT行业竞争日益白热化的今天,头部企业的招聘门槛不断刷新求职者的认知.根据最新行业调研和招聘数据,我们整理出2025年中国最难入职的几家互联网公司,并揭秘其背后严苛的选拔逻辑. 通常衡量难不难,会从 ...

  10. babel-loader 如何工作? 什么是babel-loader插件? babel-loader插件可以干什么? 如何制作一个babel-loader插件?

    本文会介绍比较基本的编译知识和babel-loader运作原理 babel-loader 是什么? 作为老一派的打包工具, babel-loader 想必大家已经非常熟悉了.它长这样子 // webp ...