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

Python操作PDF书签详解 - 添加、修改、提取和删除

目录

简介

使用工具

Python 向 PDF 添加书签

添加书签

添加嵌套书签

Python 修改 PDF 书签

Python 展开或折叠 PDF 书签

Python 提取 PDF 书签

Python 删除 PDF 书签


简介

PDF 书签是 PDF 文件中的导航工具,通常包含一个标题和一个跳转位置(如指定的页面或位置)。它们可以像目录一样分层显示,用户可以展开或折叠这些书签,在文档中快速找到需要的内容。从技术上看,书签是 PDF 文件结构中的大纲对象,不会改变文档内容,只是帮助用户更方便地导航。

本教程将详细介绍如何使用 Python对 PDF 文件中的书签进行操作,包括添加、更新、提取和删除等。

Python 添加、修改、提取和删除PDF书签

    使用工具

    要在 Python 中操作 PDF 书签,需要一个合适的PDF处理库。本文所使用的库是Spire.PDF for Python,该库支持对 PDF 书签执行多种操作,包括:

    • 添加书签:为文档创建单层或嵌套书签,构建层次化导航。
    • 修改书签:更新书签的标题、目标页面、位置及显示样式。
    • 删除书签:清除不再需要的书签,保持文档整洁。
    • 提取书签:读取并输出文档中现有书签的信息。

    安装 Spire.PDF

    在开始操作 PDF 书签之前,请确保您的 Python 环境中已安装 Spire.PDF。可以通过以下pip命令进行安装:

    pip install spire.pdf

    安装完成后,即可在Python项目中导入并调用该库的相关API。

    Python 向 PDF 添加书签

    添加书签

    Spire.PDF提供了PdfDocument.Bookmarks.Add() 方法,用于为PDF文档添加书签。添加时,你可以自定义书签的跳转位置以及颜色和样式等属性。

    添加书签的主要步骤

    1. 加载 PDF 文档
      使用 PdfDocument 类打开已有的 PDF 文件。
    2. 添加书签
      调用 PdfDocument.Bookmarks.Add() 方法,将书签添加到文档的书签集合中。
    3. 设置书签跳转位置
      为书签设置目标跳转位置,例如目标页码、具体坐标位置以及缩放比例。
    4. 自定义书签(可选)
      通过设置书签的属性,如颜色(Color)和显示样式(DisplayStyle),来调整书签文字的颜色和字体样式。
    5. 保存修改后的 PDF 文档
      使用 PdfDocument.SaveToFile() 方法,将修改后的文档保存到文件。

    实现代码

    from spire.pdf import *# 打开 PDF 文件
    pdf = PdfDocument("测试.pdf")# 添加书签
    bookmark = pdf.Bookmarks.Add("第一章")# 设置书签的跳转位置为第一页左上角
    bookmark.Destination = PdfDestination(pdf.Pages[0], PointF(0.0, 0.0))# 自定义书签外观:设置颜色和样式
    bookmark.Color = PdfRGBColor(Color.get_Blue())
    bookmark.DisplayStyle = PdfTextStyle.Regular# 保存 PDF 文件
    pdf.SaveToFile("添加书签.pdf")
    pdf.Close()

    添加嵌套书签

    在 PDF 中,嵌套书签是一种具有层次结构的书签,允许用户以树状结构导航文档内容。它们类似于目录,其中某些书签可以包含子书签,这些子书签可以进一步包含子级,形成层次关系。

    嵌套书签的特点

    • 层次结构:父书签可以包含一个或多个子书签,子书签也可以有自己的子书签。
    • 内容导航:点击嵌套书签可以快速跳转到文档中相应的页面或特定位置。
    • 灵活性:嵌套书签可以指向 PDF 文档中的任何页面或位置。

    添加嵌套书签的主要步骤

    1. 加载 PDF 文档
      使用 PdfDocument 类打开 PDF 文件。
    2. 添加父书签
      调用 PdfDocument.Bookmarks.Add() 方法,将父书签添加到 PDF 文档的书签集合中。
    3. 设置父书签的跳转位置
      为父书签指定目标调整位置,例如目标页码、具体坐标和缩放比例。
    4.  自定义父书签(可选)
      通过属性(如 Color 和 DisplayStyle),自定义书签的外观,包括文本颜色和字体样式。
    5. 添加子书签
      调用 PdfBookmark.ConvertToBookmarkCollection().Add() 方法,在父书签下添加一个子书签。
    6. 设置子书签的跳转位置
      为子书签指定目标位置,例如目标页码、具体坐标和缩放比例。
    7. 自定义子书签(可选)
      使用 Color 和 DisplayStyle 属性,自定义嵌套书签的文本颜色和字体样式。
    8. 保存修改后的 PDF 文档
      调用 PdfDocument.SaveToFile() 方法,将修改后的 PDF 文档保存到文件中。

    实现代码

    from spire.pdf import *# 加载 PDF 文件
    pdf = PdfDocument("测试.pdf")# 添加父书签
    parent_bookmark = pdf.Bookmarks.Add("第一章")
    parent_bookmark.Destination = PdfDestination(pdf.Pages[0], PointF(0.0, 0.0))# 添加子书签
    child_bookmark = parent_bookmark.ConvertToBookmarkCollection().Add("1.1 简介")
    child_bookmark.Destination = PdfDestination(pdf.Pages[0], PointF(0.0, 20.0))# 保存 PDF 文件
    pdf.SaveToFile("添加嵌套书签.pdf")
    pdf.Close()
    

    Python 修改 PDF 书签

    当 PDF 文档内容发生变化时(如页面顺序更改或章节名称更新),书签也需要相应调整。

    修改 PDF 书签的主要步骤

    1. 加载 PDF 文档
      使用 PdfDocument 类打开包含书签的现有 PDF 文件。
    2. 访问目标书签
      通过索引定位要更新的书签,例如 PdfDocument.Bookmarks[0] 表示第一个书签。

    3. 修改书签属性
      使用书签的 Title 属性更改书签标题,并通过属性(如 Color)调整其外观。

    4. 保存修改后的 PDF 文档
      调用 PdfDocument.SaveToFile() 方法,保存更新后的 PDF 文件。

    实现代码

    from spire.pdf import *# 打开 PDF 文件
    pdf = PdfDocument("添加书签.pdf")# 获取第一个书签并更新标题和颜色
    bookmark = pdf.Bookmarks[0]
    bookmark.Title = "新书签"
    bookmark.Color = PdfRGBColor(Color.get_Red())# 保存 PDF 文件
    pdf.SaveToFile("修改书签.pdf")
    pdf.Close()
    

    Python 展开或折叠 PDF 书签

    在 PDF 文档中,书签可以设置为展开或折叠状态。这种方式可以控制嵌套书签在文档打开时的显示效果。

    展开或折叠书签的步骤

    实现代码

    1. 加载 PDF 文档
      使用 PdfDocument 类打开一个包含书签的现有 PDF 文件。

    2. 访问目标书签
      通过索引定位要更新的书签,例如 PdfDocument.Bookmarks[0] 表示第一个书签。

    3. 设置书签的展开或折叠状态
      使用书签的 ExpandBookmark 属性控制其显示状态:
      设置为 True 表示书签在打开 PDF 时自动展开。
      设置为 False 表示书签在打开 PDF 时保持折叠。

    4. 保存修改后的 PDF 文档
      调用 PdfDocument.SaveToFile() 方法,将更新后的 PDF 文档保存到指定位置。

    from spire.pdf import *# 打开 PDF 文件
    pdf = PdfDocument("添加嵌套书签.pdf")# 获取第一个书签并设置为折叠
    bookmark = pdf.Bookmarks[0]
    bookmark.ExpandBookmark = False# 保存 PDF 文件
    pdf.SaveToFile("折叠书签.pdf")
    pdf.Close()
    

    Python 提取 PDF 书签

    从 PDF 文件中提取书签可以帮助您审核文档结构、生成目录或将书签迁移到其他文档中。借助 Spire.PDF,您可以获取所有书签,包括父书签和子书签。

    提取 PDF 书签的主要步骤

    1. 定义递归函数遍历书签
      自定义一个函数,用于遍历 PdfBookmarkCollection 中的书签,打印每个书签的标题和页码,并递归处理嵌套书签。

    2. 加载 PDF 文档
      使用 PdfDocument 类打开包含书签的现有 PDF 文件。

    3. 调用函数以提取书签
      将 PDF 文档的书签集合传递给该函数,从文档中提取所有书签信息。

    实现代码

    from spire.pdf import *# 打开 PDF 文件
    pdf = PdfDocument("添加嵌套书签.pdf")# 递归函数:提取书签
    def extract_bookmarks(bookmarks, level=0):for i in range(bookmarks.Count):bookmark = bookmarks[i]print("  " * level + f"标题: {bookmark.Title}, 页码: {bookmark.Destination.PageNumber + 1}")if bookmark.ConvertToBookmarkCollection():extract_bookmarks(bookmark.ConvertToBookmarkCollection(), level + 1)extract_bookmarks(pdf.Bookmarks)
    pdf.Close()
    

    Python 删除 PDF 书签

    当你不再需要书签导航时,可以从PDF文档中删除书签。Spire.PDF 支持批量删除所有书签,也可以针对性地删除指定书签。

    删除 PDF 书签的步骤

    1. 加载 PDF 文档
      使用 PdfDocument 类打开一个包含书签的现有 PDF 文件。

    2. 删除特定书签
      使用 PdfDocument.Bookmarks.RemoveAt(index) 方法删除指定的书签。

    3. 删除所有书签(可选)
      如果希望一次性删除文档中的所有书签,可以使用 PdfDocument.Bookmarks.Clear() 方法.

    4. 保存更新后的 PDF 文档
      使用 PdfDocument.SaveToFile() 方法保存修改后的文档。

    实现代码

    from spire.pdf import *# 打开现有的 PDF 文档
    pdf = PdfDocument("添加嵌套书签.pdf")# 检查是否存在书签,如果存在,删除第一个书签(其子书签会被一并删除)
    if pdf.Bookmarks.Count > 0:pdf.Bookmarks.RemoveAt(0)# 可选:删除所有书签
    # pdf.Bookmarks.Clear()# 保存更新后的 PDF
    pdf.SaveToFile("删除书签.pdf")
    pdf.Close()
    

    以上就是使用Python添加、修改、提取和删除PDF书签的全部内容。感谢阅读!

    相关文章:

    Python操作PDF书签详解 - 添加、修改、提取和删除

    目录 简介 使用工具 Python 向 PDF 添加书签 添加书签 添加嵌套书签 Python 修改 PDF 书签 Python 展开或折叠 PDF 书签 Python 提取 PDF 书签 Python 删除 PDF 书签 简介 PDF 书签是 PDF 文件中的导航工具,通常包含一个标题和一个跳转位置(如…...

    Spring Boot与Kafka集成实践:从入门到实战

    Spring Boot与Kafka集成实践 引言 在现代分布式系统中,消息队列是不可或缺的组件之一。Apache Kafka作为一种高吞吐量的分布式消息系统,广泛应用于日志收集、流处理、事件驱动架构等场景。Spring Boot作为Java生态中最流行的微服务框架,提供…...

    luckysheet的使用——17.将表格作为pdf下载到本地

    luckysheet源码里面自带有打印按钮,但是功能是无法使用的,所以我把该功能重写了一遍 1.在menuButton.js文件中找到源码打印按钮的触发事件: $("#luckysheet-icon-print").click(function () {}2.使用自己写的挂载方法 window.pr…...

    矿井支架LCYVB-6钢丝编织护套连接器介绍

    LCYVB-6钢丝编织护套连接器是一种专为矿井支架设计的连接装置,主要用于增强支架的稳定性和安全性。该连接器采用高强度钢丝编织护套,具有优异的抗拉强度和耐磨性,适用于恶劣的矿井环境。 主要特点 高强度钢丝编织护套:采用优质钢…...

    git仓库中.git 文件很大,怎么清理掉一部分

    查询 .git 文件大小,在 git-bash 里执行(后面有些命令不能执行,也请在 git-bash 里执行) windows11 安装好后右键没有 git bash 命令-CSDN博客 du -sh .git // 592m .git 操作前最好先备份一份,避免推送到远程时出错…...

    Qt框架核心组件完全指南:从按钮交互到定时器实现

    文章目录 前言一、QAbstractButton 按钮类概述1.1 常用属性1.2 常用信号1.3QButtonGroup 按钮组 二、QComboBox 组合框三、若干与数字相关的组件四、QString 字符串类五、Qt容器类5.1 顺序容器 QList5.2 关联容器 QMap 六、QVariant七、跨平台数据类型7.1 基础数据类型7.2 特殊…...

    Axure设计数字乡村可视化大屏:从布局到交互的实战经验分享

    乡村治理正从传统模式向“数据驱动”转型。数字乡村可视化大屏作为数据展示的核心载体,不仅能直观呈现乡村发展全貌,还能为决策提供科学依据。本文以Axure为工具,结合实际案例,分享如何从零设计一个功能完备、交互流畅的数字乡村大…...

    60天python训练计划----day30

    DAY 30 模块和库的导入 知识点回顾: 导入官方库的三种手段导入自定义库/模块的方式导入库/模块的核心逻辑:找到根目录(python解释器的目录和终端的目录不一致) 一.导入官方库 我们复盘下学习python的逻辑,所谓学习pyth…...

    HJ3 明明的随机数【牛客网】

    文章目录 零、原题链接一、题目描述二、测试用例三、解题思路3.1 快排去重3.2 散列 四、参考代码4.1 快排去重4.2 散列 零、原题链接 HJ3 明明的随机数 一、题目描述 二、测试用例 三、解题思路 3.1 快排去重 基本思路:   先将序列进行快速排序,然后…...

    BGP选路

    一、拓扑图 二、要求及分析 1.要求 1.使用Preva1策略,确保R4通过R2到达192.168.10.0/24 2、用As Path策略,确保R4通过R3到达192.168.11.0/24 3.配置MED策略,确保R4通过R3到达192.168.12.0/24 4.使用Local Preference策略,确保…...

    践行“科学智能”!和鲸打造 AI for Science 专属应用

    AI for good, AI for Science. 在传统科研领域,人力与经验的局限始终如影随形。而“AI for Science”正逐渐改变科学研究的模式,以科学数据为基石、以强大算力为支撑,借助人工智能技术,开展计算密集度高且能够实现高效迭代的科学…...

    【vs2022的C#窗体项目】打开运行+sql Server改为mysql数据库+发布

    1. vs2022打开运行原sql Server的C#窗体项目更改为mysql数据库 1.1. vs2022安装基础模块即可 安装1️⃣vs核心编辑器2️⃣.net桌面开发必选,可选均不安装!!! 为了成功连接mysql数据库,需要安装组件NuGet包管理器 安…...

    wpf DataGrid 行选择事件

    在WPF中处理DataGrid行选择事件主要有以下几种实现方式: 1.SelectionChanged事件处理 ‌ 通过直接订阅DataGrid的SelectionChanged事件实现行选择响应: <DataGrid SelectionChanged="DataGridAccurateLocationList_SelectionChanged" .../>后台代码中处理…...

    Spring Cloud Seata 深度解析:原理与架构设计

    文章目录 前言&#xff1a;为什么我们需要理解分布式事务&#xff1f;一、Seata 核心架构深度拆解1.1 分布式事务核心模型1.2 Seata undo_log 存储结构与版本控制存储结构版本控制核心算法 1.3 Seata 事务模型深度对比与实现原理AT 模式&#xff08;Auto Transaction&#xff0…...

    从产品展示到工程设计:3DXML 转 STP 的跨流程数据转换技术解析

    在数字化设计与制造领域&#xff0c;不同格式的三维模型文件常常需要进行转换&#xff0c;以满足不同软件和工作流程的需求。3DXML 和 STP&#xff08;STEP AP214/AP242&#xff09;是工业领域常用的两种三维模型文件格式&#xff0c;3DXML 格式以其轻量化和便于网络传输、可视…...

    基于RT-Thread的STM32F4开发第五讲——软件模拟I2C

    文章目录 前言一、RT-Thread工程创建二、AT24C02三、函数编写1.I2C_soft.c2.I2C_soft.h3.main.h 四、效果展示五、资源分享总结 前言 本章是基于RT-Thread studio实现软件模拟I2C&#xff0c;开发板是正点原子的STM32F4探索者&#xff0c;使用的RT-Thread驱动是5.1.0&#xff0…...

    pkucpc2025 L:Game on Tree

    题意 两个人在一棵无根树上玩游戏&#xff0c;每次可以删掉若干个叶子节点&#xff0c;不能操作的人输。 思路 比赛的时候我去写H Quintuple了&#xff0c;队友貌似在我写的时候把这道题讨论出来了。 后来补题的时候花了大概花了70分钟左右ac这道题。 首先考虑一条链的情况…...

    大数据实时分析:ClickHouse、Doris、TiDB 对比分析

    随着企业对数据分析实时性、复杂性和多样性的要求越来越高,传统的批处理数仓已经无法满足实时指标看板、流量监控、用户行为分析等场景需求。因此,越来越多的公司开始引入实时分析型数据库系统。 目前,国内外常见的实时分析数据库有: ClickHouse:列式数据库,极致的分析性…...

    网络流量分析系统的十大应用场景

    在现代企业和组织的IT运维体系中&#xff0c;网络流量分析系统&#xff08;Network Traffic Analysis, NTA&#xff09;早已不仅仅是用来查看带宽使用率的“流量计数器”。随着网络环境的复杂化、攻击技术的不断演进&#xff0c;以及对业务连续性要求的提升&#xff0c;网络流量…...

    问题 | 代码审查:函数是否包含返回语句

    “函数是否包含返回语句”这一问题的核心是&#xff1a;在编程中&#xff0c;函数是否按照设计要求正确使用了 返回语句&#xff08;如 return、return value&#xff09;&#xff0c;以便向调用者传递结果或控制权。以下是详细解释&#xff1a; 1. 什么是函数的返回语句&#…...

    Spring Bean 生命周期中设计模式的应用与解析

    Spring Bean 生命周期中使用的设计模式 Spring Bean 的生命周期涉及多个阶段和扩展点&#xff0c;Spring 框架在这一过程中巧妙运用了多种设计模式&#xff0c;以实现强大的功能和灵活性。以下是主要设计模式及其应用场景&#xff1a; 1. 工厂模式&#xff08;Factory Patter…...

    设计模式的原理及深入解析

    创建型模式 创建型模式主要关注对象的创建过程&#xff0c;旨在通过不同的方式创建对象&#xff0c;以满足不同的需求。 工厂方法模式 定义&#xff1a;定义一个创建对象的接口&#xff0c;让子类决定实例化哪一个类。 解释&#xff1a;工厂方法模式通过定义一个创建对象的…...

    kotlin flow的两种SharingStarted策略的区别

    一 两种 SharingStarted 策略的区别&#xff1a; SharingStarted.Eagerly: 立即开始收集上游流&#xff0c;即使没有下游订阅者持续保持活跃状态&#xff0c;直到 ViewModel 被清除优点&#xff1a;响应更快&#xff0c;数据始终保持最新缺点&#xff1a;消耗更多资源&#x…...

    BGP综合实验(2)

    一、实验需求 1、实验拓扑图 2、实验需求 使用 PreVal 策略&#xff0c;让 R4 经 R2 到达 192.168.10.0/24 。 使用 AS_Path 策略&#xff0c;让 R4 经 R3 到达 192.168.11.0/24 。 配置 MED 策略&#xff0c;让 R4 经 R3 到达 192.168.12.0/24 。 使用 Local Preference 策…...

    python使用jsonpath-ng库操作json数据

    jsonpath-ng 库的详细使用如下&#xff1a; 一、安装与导入 安装 通过 pip 安装库&#xff1a; pip install jsonpath-ng支持 Python 3.6 及以上版本。 导入核心模块 主要使用 parse 函数和 JSONPath 对象&#xff1a; from jsonpath_ng import parse二、基础查询操作 1. 简单…...

    通用简洁工作汇报项目评估营销策划工作总结年终汇报PPT模版8套一组分享

    工作总结汇报PPT模版8套一组分享&#xff1a;工作总结汇报PPT模版分享https://pan.quark.cn/s/04b7ab7a47c4 第一套PPT模版&#xff0c;主要是黄色和灰色调&#xff0c;上方有大面积黄色不规则形状背景&#xff0c;有“POWERPOINT”和“XXXXPPT模版”字样&#xff0c;左侧是黑…...

    掌握Git:版本控制与高效协作指南

    一、初始Git 提出问题&#xff1a;无论是在工作还是学习&#xff0c;我们在编写各种文档的时候&#xff0c;更改失误&#xff0c;失误后恢复到原来版本&#xff0c;不得不复制出一个副本。 每个版本由各自的内容&#xff0c;但最终只有一个报告需要被我们使用。 但在此之前的…...

    ubuntu下配置vscode生成c_cpp_properties.json

    -------------学习记录--------------- 在ubuntu下使用vscode时发现cpp文件无法读到头文件&#xff0c;明明头文件在合适的路径下&#xff0c;由于没有制定头文件的路径造成的这个问题。用这篇文章进行简单记录解决方法 ctrlshiftp打开命令面板&#xff0c;也可以点击左上角, …...

    Qt读取Excel文件的技术实现与最佳实践

    目录 一、成果展示二、核心方法及原理1. QAxObject&#xff08;基于COM接口&#xff09;2. 第三方库QXlsx3. ODBC数据库驱动 三、实现步骤详解1. QAxObject读取Excel&#xff08;需安装Excel/WPS&#xff09;2. QXlsx读取Excel&#xff08;跨平台方案&#xff09; 四、技术选型…...

    双条件拆分工作表,一键生成独立工作簿-Excel易用宝

    你是否遇到过这样的崩溃瞬间&#xff1f;面对一张密密麻麻的销售数据表&#xff0c;需要按指定维度拆分成工作簿和工作表&#xff0c;而你却只能手动复制粘贴到不同工作簿、工作表&#xff0c;改一个字段就花半小时&#xff0c;数据量大时甚至要熬夜加班&#xff1f; 别担心&a…...

    iOS 蓝牙开发中的 BT 与 BLE

    在 iOS 开发者的语境里,大家把 BT 和 BLE 当成两种不同的蓝牙技术在谈——它们来自同一个 Bluetooth 规范,但面向的场景、协议栈乃至 Apple 提供的 API 都截然不同。 缩写全称 / 技术名称规范层叫法iOS 支持现状典型用途BTBluetooth Classic(经典蓝牙)又叫 BR/EDR(Basic R…...

    TCP和套接字SSL加密连接行为分析

    目录 一、前言 二、背景 三、参数介绍 3.1、 have_openssl 3.2、have_ssl 3.3、require_secure_transport 四、--ssl-modemode 五、CREATE USER SSL/TLS选项 六、问题验证 6.1、使用套接字连接 6.2、使用TCP连接 七、分析与总结 一、前言 SSL&#xff08;Secure S…...

    kafka 问与答

    kafka Q&A How does the client connect to kafka and discovery the brokers. client 只需要知道一部分nodes(brokers)的地址既可以&#xff0c;client 会自动发现剩下的所有topic partition leader nodes, 然后连接上。 When a client connects:It uses the bootstrap…...

    docker默认存储迁移

    在容器化场景下默认存储路径为&#xff08;/var/lib/docker&#xff09;大多数平台根目录不支持系统盘扩容&#xff0c;会有空间不足风险隐患&#xff0c;因未配置持久化存储导致容器数据丢失。以迁移Docker存储路径至大容量/data目录说明 一、停止容器 systemctl stop docke…...

    Ubuntu20.04系统下使用交叉编译工具链(aarch、x86)交叉编译opencv4.5.0

    文章目录 0. 引言1. 准备交叉编译工具链2. 安装依赖工具3. 下载 OpenCV 源码4. 创建交叉编译工具链文件5. 配置 CMake 构建6. 构建 OpenCV7. 安装 OpenCV8. 验证9. 问题及解决办法 0. 引言 Ubuntu20.04系统下使用交叉编译工具链&#xff08;aarch、x86&#xff09;交叉编译ope…...

    R语言数据可视化

    R note book 文档–输出html格式文档&#xff0c;plotly不能生成PDF文件 --- title: "R语言数据可视化" output: html_notebook ---在R语言中进行数据可视化是数据分析和呈现的重要环节&#xff0c;R提供了多种强大的绘图系统和工具。以下是常见的数据可视化方法和示…...

    NLP学习路线图(一): 线性代数(矩阵运算、特征值分解等)

    引言&#xff1a;语言与矩阵的奇妙邂逅 在自然语言处理&#xff08;NLP&#xff09;的魔法世界里&#xff0c;每个词语都像被施了变形术的精灵&#xff0c;在数学的殿堂中翩翩起舞。当我们用"king - man woman queen"这样的向量魔法破解语义密码时&#xff0c;线性…...

    【滑动窗口】LeetCode 1004题解 | 最大连续1的个数 Ⅲ

    最大连续1的个数 Ⅲ 一、题目链接二、题目三、题目解析四、算法原理解法一&#xff1a;暴力枚举 zero计数器解法二&#xff1a;滑动窗口 五、编写代码六、时空复杂度 一、题目链接 最大连续1的个数 Ⅲ 二、题目 三、题目解析 注意题目中说的是最多k次&#xff0c;在一个数组…...

    Linux 内核等待机制详解:prepare_to_wait_exclusive 与 TASK_INTERRUPTIBLE

    1. prepare_to_wait_exclusive 函数解析 1.1 核心作用 prepare_to_wait_exclusive 是 Linux 内核中用于将进程以独占方式加入等待队列的关键函数,其主要功能包括: 标记独占等待:通过设置 WQ_FLAG_EXCLUSIVE 标志,表明此等待条目是独占的。 安全入队:在自旋锁保护下,将条…...

    分布式数据库TiDB:深度解析原理、优化与架构设计

    &#x1f482; 个人网站:【 摸鱼游戏】【神级代码资源网站】【星海网址导航】 一、TiDB架构设计与核心原理 1.1 分布式架构演进 传统分库分表 vs TiDB架构 #mermaid-svg-8I88Hg2AVkzYTb3O {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fi…...

    【深度学习基础】损失函数与优化算法详解:从理论到实践

    【深度学习基础】损失函数与优化算法详解&#xff1a;从理论到实践 一、引言 1. 损失函数与优化算法在深度学习中的核心作用 在深度学习中&#xff0c;模型训练的本质是通过不断调整参数&#xff0c;使模型输出尽可能接近真实值。这一过程的核心驱动力是损失函数&#xff08;…...

    睿抗足球机器人

    目录 大框架 战术 Lua脚本语言编辑环境 大框架 策略脚本&#xff08;LUA-官方脚本&#xff09;、决策算法&#xff08;C-自定义&#xff09;、ROS系统 战术 我们研究了场地的长度、宽度、禁区范围、机器人运动速度等等&#xff0c;发现即使 Kicker 点球往极端角度踢&#xf…...

    助力DBA技能无缝平迁 | YashanDB携最新成果亮相XCOPS智能运维管理人年会

    5 月 16 日&#xff0c;由上海市软件行业协会、上海市计算机行业协会指导&#xff0c; dbaplus社群主办的XCOPS智能运维管理人年会在广州盛大召开&#xff0c;活动汇聚500余名金融、政府、能源、教育、电信、交通等领域的行业专家。深算院崖山数据库受邀参会&#xff0c;系统性…...

    服务端安全测试:OWASP ZAP使用

    ZAP下载地址:https://www.zaproxy.org/download/ ZAP有两种扫描方式: 1、使用 OpenAPI / Swagger 地址进行扫描 2、ZAP Proxy + Postman 因为业务云没有添加swagger插件所以本次介绍第2种方式。 【第一步】设置 ZAP 的代理端口(默认是 127.0.0.1:8080) 成功安装并打…...

    Amazon Q 从入门到精通 – 测试与重构

    Amazon Q Developer 是亚马逊推出的一个专为专业开发人员设计的人工智能助手&#xff0c;旨在提升代码开发和管理效率。其主要功能包括代码生成、调试、故障排除和安全漏洞扫描&#xff0c;提供一站式代码服务。 众所周知&#xff0c;在软件开发领域&#xff0c;测试代码是软件…...

    [CSS3]属性增强2

    空间转换 使用transform属性实现元素在空间内的位移、旋转、缩放等效果 空间: 是从坐标轴角度定义的。x、y 和z三条坐标轴构成了一个立体空间&#xff0c;z轴位置与视线方向相同。空间转换也叫3D转换 空间位移 使用translate实现元素空间位移效果 transform: translate3d(x…...

    Go 语言 vs C+Lua(Skynet)游戏服务器方案对比分析

    为啥挑这两个呢&#xff1f;因为两种技术分别对应CSP模型和Actor模型&#xff0c;都是经过时间检验的成熟且可靠的并发模型&#xff0c;问了很多地方&#xff0c;经过gpt整理得出如下报告。 从开发效率、运行性能、热更新扩展、云部署与水平扩展能力、多类型游戏支持等五个维度…...

    ArcGIS Pro 3.4 二次开发 - 内容

    环境&#xff1a;ArcGIS Pro SDK 3.4 .NET 8 文章目录 内容1 工程1.1 创建一个空工程1.2 使用指定名称创建新工程1.3 使用Pro的默认设置创建新工程1.4 使用自定义模板文件创建新工程1.5 使用 ArcGIS Pro 提供的模板创建工程1.6 打开现有工程1.7 获取当前工程1.8 获取当前工程的…...

    java每日精进 5.19【Excel 导入导出】

    基于 EasyExcel 实现 Excel 的读写操作&#xff0c;可用于实现最常见的 Excel 导入导出等功能。 Excel 导入导出功能涉及前后端协作&#xff0c;后端处理数据查询、文件生成和解析&#xff0c;前端提供用户交互和文件下载/上传界面。以下是全流程解析&#xff0c;分为导出流程…...

    基于Elasticsearch的搜索引擎简介

    ## 一、Elasticsearch简介 Elasticsearch&#xff08;简称ES&#xff09;是一个开源的、分布式、RESTful风格的搜索和数据分析引擎&#xff0c;基于Apache Lucene开发。它能够实现对海量结构化和非结构化数据的实时存储、搜索和分析&#xff0c;广泛应用于全文检索、日志分析、…...