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

ReportLab 导出 PDF(页面布局)

ReportLab 导出 PDF(文档创建)
ReportLab 导出 PDF(页面布局)
ReportLab 导出 PDF(图文表格)

PLATYPUS - 页面布局和排版

  • 1. 设计目标
  • 2. 开始
  • 3. Flowables
    • 3.1. Flowable.draw()
    • 3.2. Flowable.drawOn(canvas,x,y)
    • 3.3. Flowable.wrap(availWidth, availHeight)
    • 3.4. Flowable.split(self, availWidth, availheight)
  • 4. 流动定位的准则
  • 5. Frames
    • 5.1. Frame.addFromList(drawlist, canvas)
    • 5.2. Frame.split(flowable,canv)
    • 5.3. Frame.drawBoundary(canvas)
  • 6. 文档和模板
    • 6.1. BaseDocTemplate.addPageTemplates(self,pageTemplates)
    • 6.2. BaseDocTemplate.build(self, flowables, filename=None,canvasmaker=canvas.Canvas)
    • 6.3. BaseDocTemplate.afterInit(self)
    • 6.4. BaseDocTemplate.afterPage(self)
    • 6.5. BaseDocTemplate.beforeDocument(self)
    • 6.6. BaseDocTemplate.beforePage(self)
    • 6.7. BaseDocTemplate.filterFlowables(self,flowables)
    • 6.8. BaseDocTemplate.afterFlowable(self, flowable)

1. 设计目标

Platypus 是"Page Layout and Typography Using Scripts"的缩写。它是一个高水平的页面布局库, 让你可以用最少的努力以编程方式创建复杂的文档。
Platypus 的设计力求将 "高层次 "的布局决定与文档内容尽可能分开 。例如,段落使用段落样式,页面使用页面模板,目的是让数百个有数千页的文件可以按照不同的样式规格重新格式化,只需在一个包含段落样式和页面布局规格的共享文件中修改几行即可。
Platypus的整体设计可以认为有几个层次,自上而下,这些是:
DocTemplates 作为文档的最外层容器。
PageTemplates 作为各种页面布局的规格。
Frames 页面中可包含流动文本或图形的区域规格。
Flowables 对应"flowed into the document"流入文档的文本或图形元素(即图像、段落和表格等内容,但不包括页脚或固定页面图形等内容)。
pdfgen.Canvas 为最终从其他图层接收文档绘画的最低层。
在这里插入图片描述
上面的插图形象地说明了 DocTemplate、PageTemplate 和 Flowables 的概念 。然而,它具有欺骗性,因为每一个 PageTemplate 实际上可以指定任何数量的页面的格式(而不是像从图中推断的那样只指定一个)。
DocTemplate 包含一个或多个 PageTemplate,每个 PageTemplate 包含一个或多个Frame。
Flowables 是指可以 flowed(流入) Frame的东西,例如 Paragraph 或 Table。
要使用 platypus,你需要从 DocTemplate 类中创建一个文档,并向其 build 方法传递一个 Flowables列表。document 的 build 方法知道如何将 flowable 列表处理成合理的东西。
在内部,DocTemplate 类使用各种事件来实现页面布局和格式化。每个事件都有一个对应的处理方法,称为 handle_XXX ,其中 XXX 是事件名称。一个典型的事件是 frameBegin,它发生在机械开始第一次使用一个框架的时候。
Platypus 故事由一系列基本元素组成,这些元素被称为 Flowables,它们驱动着数据驱动的 Platypus格式化引擎。为了修改引擎的行为,一种特殊的可流式元素 ActionFlowables 告诉布局引擎,例如,跳到下一列或者换成另一个 PageTemplate。

2. 开始

考虑以下代码序列,它为 Platypus 提供了一个非常简单的 "hello world "例子。

from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.rl_config import defaultPageSize
from reportlab.lib.units import inchPAGE_HEIGHT=defaultPageSize[1]
PAGE_WIDTH=defaultPageSize[0]styles = getSampleStyleSheet()
Title = "Hello world"
pageinfo = "platypus example"# 首页
def myFirstPage(canvas, doc):canvas.saveState()# 标题canvas.setFont('Times-Bold',16)canvas.drawCentredString(PAGE_WIDTH/2.0, PAGE_HEIGHT-108, Title)# 页脚 填充固定字符canvas.setFont('Times-Roman',9)canvas.drawString(inch, 0.75 * inch, "First Page / %s" % pageinfo)canvas.restoreState()# 非首页
def myLaterPages(canvas, doc):canvas.saveState()# 页脚 填充页码canvas.setFont('Times-Roman',9)canvas.drawString(inch, 0.75 * inch, "Page %d %s" % (doc.page, pageinfo))canvas.restoreState()def main(filename: str):doc = SimpleDocTemplate(filename)# 与标题间隔Story = [Spacer(1, 2*inch)]style = styles["Normal"]for i in range(100):bogustext = ("This is Paragraph number %s. " % i) * 5p = Paragraph(bogustext, style)Story.append(p)# 段落之间间隔Story.append(Spacer(1, 0.2*inch))# 添加doc.build(Story, onFirstPage=myFirstPage, onLaterPages=myLaterPages)if __name__ == '__main__':main(filename='example.pdf')

我们创建一个"store"并构建文档。请注意,我们在这里使用的是"canned"(罐头)文档模板,它是预建的页面模板。
我们还使用了预建的段落样式 。
我们在这里只使用了两种类型的"flowables"–Spacers和Paragraphs 。第一个Spacer确保段落跳过标题字符串。

在这里插入图片描述在这里插入图片描述在这里插入图片描述

3. Flowables

Flowables 是可以被绘制的东西,它有wrap, draw和可能的split方法。Flowable 是一个抽象的基类,用于绘制事物,一个实例知道它的大小,并在它自己的坐标系中绘制(这需要基 API 在调用 Flowable.draw方法时提供一个绝对坐标系)。要获得一个实例,使用 f=Flowable()。
注意: Flowable 类是一个抽象类,通常只作为基类使用.
为了说明使用 Flowables 的一般方式,我们将展示如何在画布上使用和绘制衍生类 Paragraph。

def main(filename):from reportlab.lib.styles import getSampleStyleSheetfrom reportlab.platypus import Paragraphfrom reportlab.pdfgen.canvas import CanvasstyleSheet = getSampleStyleSheet()style = styleSheet['BodyText']P=Paragraph('This is a very silly example',style)canv = Canvas(filename)aW = 460 # available width and heightaH = 800w,h = P.wrap(aW, aH) # find required spaceif w<=aW and h<=aH:P.drawOn(canv,0,aH)aH = aH - h # reduce the available heightcanv.save()else:raise ValueError("Not enough room")if __name__ == '__main__':main(filename='example.pdf')

在这里插入图片描述

3.1. Flowable.draw()

这将被调用来要求 flowable 实际渲染自己。Flowable类没有实现draw。调用代码应该确保 flowable 有一个属性canv,它pdfgen.Canvas,它应该被绘制到Canvas上,并且Canvas处于一个适当的状态(就翻译、旋转等而言)。通常这个方法只在内部被drawOn方法调用,派生类必须实现这个方法。派生类必须实现这个方法。

3.2. Flowable.drawOn(canvas,x,y)

这是控制引擎用来将flowable渲染到特定画布的方法。它处理转换为画布坐标(x,y),并确保flowable有一个canv属性,这样draw方法(在基类中没有实现)就可以在一个绝对坐标框架中渲染。

3.3. Flowable.wrap(availWidth, availHeight)

在询问对象的大小、绘制或其他什么之前,这个函数将被包围的框架调用。它返回实际使用的尺寸。

3.4. Flowable.split(self, availWidth, availheight)

当wrap失败时,更复杂的框架会调用这个函数。愚蠢的flowables应该返回[],这意味着它们无法拆分。聪明的flowables应该自己拆分并返回一个flowables列表。客户端代码要确保避免重复尝试拆分。如果空间足够,拆分方法应该返回[self]。否则,flowable应该重新排列,并返回一个按顺序考虑的flowable列表[f0,…]。实现的拆分方法应该避免改变self,因为这将允许复杂的布局机制在一个可流动的列表上进行多次递。

4. 流动定位的准则

有两种方法,默认情况下返回零,为可流动物的垂直间距提供指导。
Flowable.getSpaceAfter(self):
Flowable.getSpaceBefore(self):
这些方法会返回flowable后面或前面应该有多少空间。这些空间不属于flowable本身,也就是说,flowable的draw方法在渲染时不应该考虑它。控制程序将使用返回的值来确定上下文中特定flowable需要多少空间。
所有的flowables都有一个hAlign属性:(‘LEFT’,‘RIGHT’,‘CENTER’或’CENTRE’)。对于占满整个框架宽度的段落,这个属性没有影响。对于小于框架宽度的表格、图像或其他对象,这决定了它们的水平位置。
下面的章节将涵盖最重要的特定类型的可流动文件,段落和表格。

5. Frames

Frames是活动的容器,它本身就包含在PageTemplate中,Frames有一个位置和大小,并保持一个剩余可绘制空间的概念。如:

Frame(x1, y1, width, height, leftPadding=6, bottomPadding=6, rightPadding=6, topPadding=6, id=None, showBoundary=0)

创建一个左下角坐标为(x1,y1)的Frame实例(在使用时相对于画布),尺寸为 width x height。Padding参数是用于减少绘画空间的正量。参数id是运行时使用的标识符,例如"LeftColumn"或"RightColumn"等。如果showBoundary参数是非零,那么框架的边界将在运行时被绘制出来(这有时很有用)。
Frames可以直接与canvases和flowables一起使用来创建文档。Frame.addFromList方法为你处理wrap 和 drawOn调用。你不需要所有的Platypus引擎来获得有用的东西到PDF中。

def main(filename): from reportlab.pdfgen.canvas import Canvasfrom reportlab.lib.styles import getSampleStyleSheetfrom reportlab.lib.units import inchfrom reportlab.platypus import Paragraph, Framestyles = getSampleStyleSheet()styleN = styles['Normal']styleH = styles['Heading1']story = []#add some flowablesstory.append(Paragraph("This is a Heading",styleH))story.append(Paragraph("This is a paragraph in <i>Normal</i> style.",styleN))c = Canvas(filename)f = Frame(inch, inch, 6*inch, 9*inch, showBoundary=1)f.addFromList(story,c)c.save()if __name__ == '__main__':main(filename='example.pdf')

在这里插入图片描述

5.1. Frame.addFromList(drawlist, canvas)

消耗drawlist前面的Flowables,直到帧满为止。如果不能容纳一个对象,则引发一个异常。

5.2. Frame.split(flowable,canv)

要求flowable使用可用空间进行分割,并返回flowable的列表。

5.3. Frame.drawBoundary(canvas)

将框架边界画成一个矩形(主要用于调试)。

6. 文档和模板

BaseDocTemplate类
实现了文档格式化的基本机制。该类的一个实例包含了一个或多个PageTemplate的列表,这些PageTemplate可用于描述单页信息的布局。build方法可用于处理Flowables列表,以生成一个PDF文档。

from reportlab.lib.pagesizes import A4
from reportlab.platypus import BaseDocTemplate
from reportlab.lib.units import inchBaseDocTemplate(filename,pagesize=A4,pageTemplates=[],showBoundary=0,		# 控制是否绘制Frame的边界,这对于调试来说是很有用的leftMargin=inch,rightMargin=inch,topMargin=inch,bottomMargin=inch,allowSplitting=1,	# allowSplitting参数决定了内置方法是否应该尝试split单个Flowables跨越Frametitle=None,author=None,_pageBreakQuick=1,	# 参数决定了在结束页面之前,是否应该尝试结束页面上的所有框架encrypt=None		# encrypt 参数决定了是否对文档进行加密,以及如何加密)

创建一个适合创建基本文档的文档模板。它带有相当多的内部机制,但没有默认的页面模板。所需的filename可以是一个字符串,一个用于接收创建的PDF文档的文件名;也可以是一个有write方法的对象,如 BytesIO 或 file 或 socket。
showBoundary控制是否绘制Frame的边界,这对于调试来说是很有用的。
allowSplitting参数决定了内置方法是否应该尝试split单个Flowables跨越Frame。
_pageBreakQuick参数决定了在结束页面之前,是否应该尝试结束页面上的所有框架。
encrypt 参数决定了是否对文档进行加密,以及如何加密。默认情况下,文档是不加密的。如果encrypt是一个字符串对象,那么它将作为pdf的用户密码。如果encrypt是一个reportlab.lib.pdfencrypt.StandardEncryption的实例,那么这个对象就被用来加密pdf。这允许对加密设置进行更精细的控制。

PageTemplate类
是一个语义相当简单的容器类。每个实例都包含一个Frames的列表,并且有一些方法应该在每个页面的开始和结束时被调用。

PageTemplate(id=None, frames=[], onPage=_doNothing, onPageEnd=_doNothing)

用于初始化一个实例,frames参数应该是一个Frames的列表,而可选的onPageonPageEnd参数是可调用的,它们的签名应该是 def XXX(canvas,document),其中canvas和document是正在绘制的画布和文档。这些例程的目的是用来绘制页面的非流动(即标准)部分。
这些属性函数与纯虚拟方法 PageTemplate.beforPage 和 PageTemplate.afterPage完全平行,这两个方法的签名是 beforPage(self,canvas,document)。这些方法允许使用类派生来定义标准行为,而属性则允许改变实例。在运行时,id 参数用于执行 PageTemplate 的切换,所以 id=‘FirstPage’ 或 id='TwoColumns’是典型的。

6.1. BaseDocTemplate.addPageTemplates(self,pageTemplates)

此方法用于在现有文档中添加一个或一系列PageTemplate。

6.2. BaseDocTemplate.build(self, flowables, filename=None,canvasmaker=canvas.Canvas)

这是应用程序程序员感兴趣的主要方法。假设文档实例被正确设置,build方法将story以flowables
列表的形式接收(flowables参数),并在列表中循环,将flowables列表一次一个地强制通过格式化
机制。实际上,这使得BaseDocTemplate实例发出对实例handle_XXX方法的调用来处理各种事件。

6.3. BaseDocTemplate.afterInit(self)

这个方法在基类初始化后被调用;派生类可以覆盖该方法来添加默认的PageTemplates。

6.4. BaseDocTemplate.afterPage(self)

这是在页面处理后,紧接着当前页面模板的afterDrawPage方法被调用。一个派生类可以使用这个方
法来做一些依赖于页面信息的事情,比如字典页面上的首字和尾字。

6.5. BaseDocTemplate.beforeDocument(self)

在对文档进行任何处理之前,但在处理机制准备好之后,就会调用这个函数,因此它可以用来对实
例的pdfgen.canvas等进行处理。因此,它可以用来对实例的pdfgen.canvas等进行操作。

6.6. BaseDocTemplate.beforePage(self)

这是在页面处理开始时,在当前页面模板的beforeDrawPage方法之前调用的。它可以用来重置页面
特定的信息持有者。

6.7. BaseDocTemplate.filterFlowables(self,flowables)

在主 handle_flowable 方法开始时,调用这个函数来过滤flowables。在返回时,如果flowables[0]
被设置为None,则会被丢弃,主方法立即返回。

6.8. BaseDocTemplate.afterFlowable(self, flowable)

在flowable被渲染后调用。有兴趣的类可以使用这个钩子来收集特定页面或框架上存在的信息。

相关文章:

ReportLab 导出 PDF(页面布局)

ReportLab 导出 PDF&#xff08;文档创建&#xff09; ReportLab 导出 PDF&#xff08;页面布局&#xff09; ReportLab 导出 PDF&#xff08;图文表格) PLATYPUS - 页面布局和排版 1. 设计目标2. 开始3. Flowables3.1. Flowable.draw()3.2. Flowable.drawOn(canvas,x,y)3.3. F…...

Ubuntu 安装与配置 Docker

Ubuntu 安装与配置 Docker Docker 是一个开源的容器化平台&#xff0c;允许开发者将应用程序及其依赖项打包在一个轻量级、可移植的容器中。它可以帮助开发者和运维人员快速构建、部署和管理应用程序&#xff0c;提升开发和运维效率。本文将介绍如何在 Ubuntu 系统上安装和配置…...

【数据结构与算法】LeetCode每日一题

此题跟27.移除数组中的指定值 类似&#xff0c;都是移除且双指针玩法&#xff0c;只不过判断条件发生了变化...

【HDFS入门】数据存储原理全解,从分块到复制的完整流程剖析

目录 1 HDFS架构概览 2 文件分块机制 2.1 为什么需要分块&#xff1f; 2.2 块大小配置 3 数据写入流程 4 数据复制机制 4.1 副本放置策略 4.2 复制流程 5 数据读取流程 6 一致性模型 7 容错机制 7.1 数据节点故障处理 7.2 校验和验证 8 总结 在大数据时代&#x…...

力扣热题100——普通数组(不普通)

普通数组但一点不普通&#xff01; 最大子数组和合并区间轮转数组除自身以外数组的乘积缺失的第一个正数 最大子数组和 这道题是非常经典的适用动态规划解决题目&#xff0c;但同时这里给出两种解法 动态规划、分治法 那么动态规划方法大家可以在我的另外一篇博客总结中看到&am…...

Ubuntu中snap

通过Snap可以安装众多的软件包。需要注意的是&#xff0c;snap是一种全新的软件包管理方式&#xff0c;它类似一个容器拥有一个应用程序所有的文件和库&#xff0c;各个应用程序之间完全独立。所以使用snap包的好处就是它解决了应用程序之间的依赖问题&#xff0c;使应用程序之…...

uniapp(Vue)开发微信小程序 之 保存图片到本地

一、保存图片到本地&#xff08;要拿到图片的 src&#xff09;&#xff1a; 查看隐私条约是否加上相册&#xff08;仅写入&#xff09;权限&#xff1a; 微信公众平台 -》 左下角头像 -》账号设置 -》 用户隐私保护指引 -》去完善 -》 相册&#xff08;仅写入&#xff09;权限 …...

TailwindCss快速上手

什么是Tailwind Css? 一个实用优先的 CSS 框架&#xff0c;可以直接在标记中组合以构建任何设计。 开始使用Tailwind Css 如何安装 下面是使用vite构建工具的方法 ①安装 Tailwind CSS: tailwindcss通过tailwindcss/vitenpm安装。 npm install tailwindcss tailwindcss…...

Gladinet CentreStack Triofox 远程RCE漏洞(CVE-2025-30406)

免责声明 本文档所述漏洞详情及复现方法仅限用于合法授权的安全研究和学术教育用途。任何个人或组织不得利用本文内容从事未经许可的渗透测试、网络攻击或其他违法行为。使用者应确保其行为符合相关法律法规,并取得目标系统的明确授权。 对于因不当使用本文信息而造成的任何直…...

ASP.NET WEB 手动推送 URL 到百度站长工具实例

下面是一个完整的 ASP.NET Web 应用程序示例,演示如何手动推送 URL 到百度站长工具。 1. 创建推送页面 (PushToBaidu.aspx) <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="PushToBaidu.aspx.cs" Inherits="BaiduPushEx…...

【Ragflow】18.更好的推理框架:vLLM的docker部署方式

概述 看到不少人说“Ollama就图一乐,生产环境还得用vLLM”。 本文决定使用docker对vLLM进行部署,并解决模型配置中,IP地址的硬编码问题。 Ollama与vLLM风评比较 查询相关资料,Ollama与vLLM主要特点及对比情况如下[1]: Ollama:轻量级本地大模型部署工具,面向个人用户…...

智能 GitHub Copilot 副驾驶® 更新升级!

智能 GitHub Copilot 副驾驶 迎来重大升级&#xff01;现在&#xff0c;所有 VS Code 用户都能体验支持 Multi-Context Protocol&#xff08;MCP&#xff09;的全新 Agent Mode。此外&#xff0c;微软还推出了智能 GitHub Copilot 副驾驶 Pro 订阅计划&#xff0c;提供更强大的…...

什么是高防服务器

高防服务器是具备高强度防御能力、专门应对网络攻击(如DDoS、 CC攻击)的服务器类 型&#xff0c;通过流量清洗、多层防护等技术保障业务稳定运行。具备高强度防御能力和智能攻击识别技术&#xff0c;可保障业务在极端网络环境下稳定运行。其核心特点及技术原理如下&#xff1a…...

纷析云开源财务软件:企业财务数字化转型的灵活解决方案

纷析云是一家专注于开源财务软件研发的公司&#xff0c;自2018年成立以来&#xff0c;始终以“开源开放”为核心理念&#xff0c;致力于通过技术创新助力企业实现财务管理的数字化与智能化转型。其开源财务软件凭借高扩展性、灵活部署和全面的功能模块&#xff0c;成为众多企业…...

open webui 介绍 是一个可扩展、功能丰富且用户友好的本地部署 AI 平台,支持完全离线运行。

AI MCP 系列 AgentGPT-01-入门介绍 Browser-use 是连接你的AI代理与浏览器的最简单方式 AI MCP(大模型上下文)-01-入门介绍 AI MCP(大模型上下文)-02-awesome-mcp-servers 精选的 MCP 服务器 AI MCP(大模型上下文)-03-open webui 介绍 是一个可扩展、功能丰富且用户友好的…...

Spring缓存抽象机制

一、核心架构图解 #mermaid-svg-pUShmqsPanYTNVBI {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-pUShmqsPanYTNVBI .error-icon{fill:#552222;}#mermaid-svg-pUShmqsPanYTNVBI .error-text{fill:#552222;stroke:#5…...

[Jenkins]pnpm install ‘pnpm‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。

这个错误提示再次说明&#xff1a;你的系统&#xff08;CMD 或 Jenkins 环境&#xff09;找不到 pnpm 命令的位置。虽然你可能已经用 npm install -g pnpm 安装过&#xff0c;但系统不知道它装在哪里&#xff0c;也就无法执行 pnpm 命令。 ✅ 快速解决方法&#xff1a;直接用完…...

如何用AI辅助数据分析及工具推荐

以下是针对数据分析的 AI辅助工具推荐&#xff0c;结合国内外主流工具的功能特点、优劣势及适用场景分析&#xff0c;并标注是否为国内软件及付费情况&#xff1a; 一、国内工具推荐 1. WPS AI 特点&#xff1a;集成于WPS Office套件&#xff0c;支持智能数据分析、自动生成可…...

使用KeilAssistant代替keil的UI界面

目录 一、keil Assistant的优势和缺点 二、使用方法 &#xff08;1&#xff09;配置keil的路径 &#xff08;2&#xff09;导入并使用工程 &#xff08;3&#xff09;默认使用keil自带的ARM编译器而非GUN工具链 一、keil Assistant的优势和缺点 在日常学…...

spark-SQL数据加载和保存

数据加载与保存 通用方式&#xff1a; 通过 spark.read.load 和 df.write.save 实现数据加载与保存。可利用 format 指定数据格式&#xff0c;如 csv 、 jdbc 等&#xff1b; option 用于设置特定参数&#xff0c;像 jdbc 格式下的数据库连接信息&#xff1b; load 和 save 则…...

strings.Replace 使用详解

目录 1. 官方包 2. 支持版本 3. 官方说明 4. 作用 5. 实现原理 6. 推荐使用场景和不推荐使用场景 推荐场景 不推荐场景 7. 使用场景示例 示例1&#xff1a;官方示例 示例2&#xff1a;模板变量替换 示例3&#xff1a;敏感信息脱敏&#xff08;隐藏手机号中间四位&a…...

K8S微服务部署及模拟故障观测

概述 本文介绍了如何在 Kubernetes (K8S) 集群中部署微服务&#xff0c;并模拟常见的故障场景&#xff08;如 Pod 故障、节点故障、网络故障&#xff09;以测试系统的容错能力。通过本实验&#xff0c;了解 Kubernetes 的自动恢复机制以及如何通过监控和日志分析快速定位和解决…...

3.k8s是如何工作的

Kubernetes 是一个复杂的分布式系统&#xff0c;其核心设计理念是 声明式管理 和 自动化控制。以下是 Kubernetes 的工作机制详解&#xff0c;从用户提交应用到容器运行的全流程&#xff1a; 1. 核心架构&#xff1a;控制平面&#xff08;Control Plane&#xff09;与工作节点&…...

打通任督二脉 - Device Plugin 让 k8s “看见” GPU

打通任督二脉 - Device Plugin 让 k8s “看见” GPU 上一篇咱们聊了为啥要把 GPU 这个“计算猛兽”拉进 Kubernetes (k8s) 这个“智能调度中心”。目标很美好:提高效率、简化管理、弹性伸缩。但现实是,k8s 天生并不认识 GPU 这位“新朋友”。就像你的电脑操作系统,默认只认…...

锚定“体验驱动”,锐捷EDN让园区网络“以人为本”

作者 | 曾响铃 文 | 响铃说 传统的网络升级路径&#xff0c;一如巴别塔的建造思路一般——工程师们按技术蓝图逐层堆砌&#xff0c;却常与地面用户的实际需求渐行渐远&#xff0c;从而带来了诸多体验痛点&#xff0c;如手工配置效率低下、关键业务用网无法保障、网络架构趋于…...

Flutter的自动化测试 python flutter编程

Flutter应用开发入门指南 第一步&#xff1a;创建Flutter应用 创建一个默认的Flutter应用后&#xff0c;将以下代码复制到 lib/main.dart 中&#xff1a; import package:flutter/material.dart;//运行Flutter应用,创建了一个自己实现的Widget对象 void main() > runApp(…...

Day09【基于jieba分词和RNN实现的简单中文分词】

基于jieba分词和RNN实现的中文分词 目标数据准备主程序预测效果 目标 本文基于给定的中文词表&#xff0c;将输入的文本基于jieba分词分割为若干个词&#xff0c;词的末尾对应的标签为1&#xff0c;中间部分对应的标签为0&#xff0c;同时将分词后的单词基于中文词表做初步序列…...

机器学习 | 神经网络介绍 | 概念向

文章目录 &#x1f4da;从生物神经元到人工神经元&#x1f4da;神经网络初识&#x1f407;激活函数——让神经元“动起来”&#x1f407;权重与偏置——调整信息的重要性&#x1f407;训练神经网络——学习的过程&#x1f407;过拟合与正则化——避免“死记硬背” &#x1f440…...

使用cursor进行原型图设计

1.下载cursor 2.模式设置&#xff1a; 模型使用claude-3.7-sonnet的think模式 3.引导词模板&#xff1a; 我想要开发一个中高考英语口语考试的模拟考试系统&#xff0c;我需要将上面的这个应用输出成高保真的原型图设计。请考虑以下的规范&#xff1a; 用户体验&#xff1…...

Vue el-from的el-form-item v-for循环表单如何校验rules(二)

在上一篇文章中&#xff0c;通过校验规则写成内联循环去校验from表单项&#xff0c;在之前的代码基础上&#xff0c;进行校验规则的二次封装&#xff0c;使代码更加简洁&#xff0c;灵活高效、 参考上一篇&#xff1a;Vue el-from的el-form-item v-for循环表单如何校验rules&a…...

Spark-SQL3

Spark-SQL 一.Spark-SQL核心编程&#xff08;四&#xff09; 1.数据加载与保存&#xff1a; 1&#xff09;通用方式&#xff1a; SparkSQL 提供了通用的保存数据和数据加载的方式。这里的通用指的是使用相同的API&#xff0c;根据不同的参数读取和保存不同格式的数据&#…...

Redis字符串类型实战:解锁五大高频应用场景

精心整理了最新的面试资料和简历模板&#xff0c;有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 Redis的字符串&#xff08;String&#xff09;类型是最基础的数据结构&#xff0c;但其灵活性和原子性操作使其成为解决高并发场景问题的利器。本文通过真实项…...

通信算法之266: 无人机信号带宽计算

pwelch 通常返回功率谱密度&#xff08;PSD&#xff09;和对应的频率向量。带宽的计算可能涉及到找到 PSD 的有效频率范围&#xff0c;比如半功率点&#xff08;-3dB&#xff09;或者根据信号的能量集中区域。 pwelch 的参数设置&#xff0c;比如窗函数、重叠、FFT 点数&#x…...

【MySQL】前缀索引、索引下推、访问方法,自适应哈希索引

最左前缀原则 对于INDEX(name, age)来说最左前缀可以是联合索引的最左N个字段, 也可以是字符串索引的最左M个字符。 SELECT * FROM t WHERE name LIKE 张%其效果和单独创建一个INDEX(name)的效果是一样的若通过调整索引字段的顺序, 可以少维护一个索引树, 那么这个顺序就是需要…...

【C++游戏引擎开发】第16篇:ImGui指南

ImGui官方Github ImGUI(即时模式图形用户界面)是一种颠覆传统GUI开发范式的界面系统,由Casey Muratori于2005年提出概念,后经Omar Cornut开发为Dear ImGui开源库。其核心设计理念彻底改变了开发者构建交互式工具的方式。 一、vcpkg安装与特点介绍 1.1 安装 vcpkg install…...

分享一下这几天在公司学到的东西

这几天我学到了很多东西 &#xff08;1&#xff09;我自己原来写项目&#xff0c;前后端联调用的都是postman&#xff0c;然后直接测试接口&#xff0c;然后连一下就完了。这几天我接触到了apifox的Mock这个东西&#xff01;我知道了一个前端工程师进行前后端链条的时候&#…...

C# 将Excel格式文件导入到界面中,用datagridview显示

界面按钮不做介绍。 主要代码: //用于获取从上一个页面传过来datagridview标题 public DataTable GetHeader { get; set; } private void UI_EXPINFO_Load(object sender, EventArgs e) { //页面加载显示listbox1中可…...

Shell编程之正则表达式与文本

目录 一 正则表达式 1 正则表达式的定义 2 正则表达式用途 二 正则表达式类型 1 基础正则表达式示例 &#xff08;1&#xff09;查找特定字符 &#xff08;2&#xff09;利用中括号” [] “来查找集合字符 &#xff08;3&#xff09;查找行首” ^ “与行尾字符”$“ &…...

Spring JDBC 与数据访问:从性能优化到事务协同

在高并发场景&#xff08;如电商、金融等行业&#xff09;&#xff0c;数据库访问的性能和事务一致性是系统稳定性的关键。 Spring JDBC通过模板化操作和事务管理机制&#xff0c;大幅简化了传统 JDBC 繁琐的 API 处理&#xff0c;使数据库操作更加高效、安全、可维护。 一、…...

Markdown 编辑器的使用

欢迎使用 Markdown 编辑器 你好&#xff01; 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章&#xff0c;了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持&…...

自动化浏览器环境与 Node.js 环境的逆向分析:完整教程

在当今的 Web 开发中&#xff0c;了解浏览器环境与 Node.js 环境之间的差异是非常重要的&#xff0c;特别是当你希望进行自动化操作、逆向工程或进行跨平台开发时。在这篇教程中&#xff0c;我们将探讨如何通过 JavaScript 在浏览器中自动化环境检测、分析并对比 Node.js 和浏览…...

脉冲编码调制(PCM)在三角形信号中的应用

基于MATLAB平台&#xff0c;详细阐述脉冲编码调制&#xff08;PCM&#xff09;在三角形信号处理中的全流程实现。我这里将变量名更改为具有辨识度的Dogness_、Lhuu_&#xff0c;包括信号生成、均匀量化、编码、解码及解量化过程&#xff0c;为数字信号处理提供实践参考。 Dogne…...

# 03_Elastic Stack 从入门到实践(三)-- 4

03_Elastic Stack 从入门到实践&#xff08;三&#xff09;-- 4 七、Elasticsearch之中文分词器&#xff08;IK分词器&#xff09; 1、什么是分词&#xff1f; 分词&#xff1a;就是指将一个文本转化成一系列单词的过程&#xff0c;也叫文本分析&#xff0c;在Elasticsearch…...

前端VUE框架理论与应用(10)

1、记住全局注册的行为必须在根 Vue 实例 (通过 new Vue) 创建之前发生。 2、要注意,以 / 开头的嵌套路径会被当作根路径。 这让你充分的使用嵌套组件而无须设置嵌套的路径。 3、注意:在 Vue 实例内部,你可以通过 $router 访问路由实例。因此你可以调用 this.$router.push…...

基础学习:(6)nanoGPT

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言1 nanoGPT 浅尝1.1 基础环境1.2 prepare.py1.2 train.py1.3 sample.py 2 再探gpt2.1 layer_norm2.2 KQV 和 self attention2.3 masked self-attention2.4 调用构…...

python支持自定义基准的相对误差计算

def is_within_tolerance_custom(a, b, tolerance0.1, reference“max”): “”" 支持自定义基准的相对误差计算。 参数:reference (str): 基准类型&#xff0c;可选 "max"&#xff08;默认&#xff09;、"min"、"mean"、"a"&am…...

力扣DAY52-54 | 热100 | 图论:腐烂的橘子、课程表、前缀树

前言 中等 √ 腐烂的橘子用层次遍历&#xff0c;课程表用俩哈希表&#xff0c;前缀树基本与题解一致。however不太规范。 腐烂的橘子 我的题解 层次遍历&#xff0c;先找出所有腐烂的橘子进入队列并记录数量&#xff0c;接着内层遍历第一层腐烂的橘子&#xff0c;上下左右四…...

java CountDownLatch用法简介

CountDownLatch倒计数锁存器 CountDownLatch&#xff1a;用于协同控制一个或多个线程等待在其他线程中执行的一组操作完成&#xff0c;然后再继续执行 CountDownLatch用法 构造方法&#xff1a;CountDownLatch(int count)&#xff0c;count指定等待的条件数&#xff08;任务…...

科技项目验收测试报告有哪些作用?需要多长时间和费用?

在当今快速发展的科技环境中&#xff0c;科技项目的有效验收至关重要。对于公司、开发团队以及客户来说&#xff0c;科技项目验收测试报告更是一个不可缺少的一项重要环节。 科技项目验收测试报告是对一个项目在开发完成后所进行的一系列测试结果的总结。这份报告不仅用于证明…...

网络原理面试题

1.如何理解 URI? URI, 全称为(Uniform Resource Identifier), 也就是统一资源标识符,它的作用很简单,就是区分互联网上不同的资源。但是,它并不是我们常说的网址, 网址指的是URL, 实际上URI包含了URN和URL两个部分,由于 URL 过于普及,就默认将 URI 视为 URL 了。 URI 的…...