Python实测PDF译文回填:排版溢出的四种自适应策略

Pandas入门教程(二十二):股票数据分析实战——yfinance 获取数据、技术指标与收益率分析 把 Pandas 用在真实场景,才能体会它的价值。本文以茅台股票为例,用 yfinance 获取历史行情,完成缺失值处理与列筛选,绘制收盘价曲线,计算 SMA 移动平均线与 RSI 相对强弱指数,并通过日收益率、累计收益率和波动率完成完整的量化分析流程。 阅读详情

前言

做 PDF 翻译流水线的人迟早会碰到同一个问题:译文回填到原文位置后,文字伸出了文本框。

这个问题的根源不是翻译质量,而是文本体积。同一段内容用不同语言写出来,占的横向空间完全不一样。原文是排满的版式,译文一长,就会溢出。

这篇文章用真实字体度量 + 真实 PDF 版面做一次完整实测,回答三个问题:

  1. 同一句话在不同语言下宽度差多少?
  2. 排版后的 PDF 行里还剩多少余量?
  3. 溢出发生后,四种常见策略的真实代价分别是多少?

所有数据来自本机真机实测,代码可复现。

环境准备

  • Python 3.13
  • PyMuPDF 1.28.2(负责字体度量、版面测量、文本回填)
  • reportlab 5.0.1(负责造测试文档)
  • 中文字体:C:\Windows\Fonts\simhei.ttf
pip install pymupdf reportlab

一、先量清楚:同一句话有多宽

第一步不能靠经验估,要用字体度量算。PyMuPDF 的 Font.text_length() 能给出一段文字在指定字号下的真实渲染宽度。

import fitz

f_latin = fitz.Font("helv")                                   # 拉丁字体
f_cjk = fitz.Font(fontfile=r"C:\Windows\Fonts\simhei.ttf")    # 中文字体

def width(text, font, size=10.0):
    """返回 text 在 size 字号下的渲染宽度(磅)"""
    return font.text_length(text, fontsize=size)

我准备了 20 句覆盖技术说明书、商务合同、学术报告三类文档的平行语料(中/英/德/西),逐句测量同一内容在 10 磅字号下的渲染宽度,再以英文为基准求比值。

实测结果:

语言方向平均宽度比最小最大
英 → 中0.57010.42620.7374
英 → 德1.09650.81651.3491
英 → 西1.07040.85141.2682
中 → 英1.78931.35612.3461

这张表里有三个值得记住的结论。

**第一,中英互译的两个方向严重不对称。**英文转中文平均只占原来的 57%,反过来中文转英文平均要变成 1.79 倍,最长的句子到了 2.35 倍。也就是说,中译英是排版事故的高发方向。

**第二,德语比英语长,但不是最常见的"长 30%"。**实测均值 9.65%,最大 34.9%。有些句子反而更短(最小 0.8165)。

**第三,单位字符的宽度差得很夸张。**实测单个汉字宽度 10.0 磅,日文汉字 10.0 磅,韩文 10.0 磅,而拉丁字母平均宽度只有 4.895 磅。

一个汉字占的横向空间 ≈ 2.04 个英文字母。

这就是所有"译文撑爆版面"问题的物理来源。

二、真实文档的行里还剩多少余量

知道了译文的体积,还要知道原文留了多少空间。做法是:取出每一行文本的实际渲染宽度,和它所在分栏的宽度比一下。

import fitz

def measure_doc(pdf_path, pages=10):
    """统计真实 PDF 的行宽与分栏宽度"""
    doc = fitz.open(pdf_path)
    lines, blocks = [], []
    for pno in range(min(len(doc), pages)):
        for blk in doc[pno].get_text("dict")["blocks"]:
            if blk.get("type") != 0:
                continue
            bl = [ln for ln in blk.get("lines", []) if ln.get("spans")]
            bl = [ln for ln in bl if "".join(s["text"] for s in ln["spans"]).strip()]
            if not bl:
                continue
            # 按原文实际字号算宽度,而不是统一字号
            widths = [sum(f_latin.text_length(s["text"], fontsize=s["size"])
                          for s in ln["spans"]) for ln in bl]
            col_w = max(widths)          # 块内最长行 ≈ 该分栏的可用宽度
            blocks.append({"lines": len(bl), "total_w": sum(widths), "col_w": col_w})
            lines += [(w, col_w) for w in widths]
    doc.close()
    return lines, blocks

在两份真实 PDF 上跑(各取前 10 页):

文档行数平均分栏宽度行平均填充率
报告 A310288.1 pt96.68%
报告 B410231.0 pt96.67%

行平均填充率 96.7% 是这份实测里最重要的一个数字。它说明排版引擎本来就会把每一行排到接近满格——原文的行几乎没有余量。

推论很直接:任何超过 3% 的宽度膨胀,都会让一部分行放不下。

按前面测出的宽度比代入,得到行级溢出率:

目标语言报告 A 溢出率报告 B 溢出率
中文0.00%0.00%
德语74.19%32.68%
西班牙语74.19%32.68%

两个文档的差异来自分栏宽度是否准确。报告 B 的块平均有 13.7 行,"块内最长行"能代表真实分栏宽度;报告 A 的块平均只有 1.35 行,此时"块内最长行"退化成了单行自身的宽度,会把溢出率算得偏高。

做这类测量时,一定要先确认块里有多少行,否则分栏宽度会失真。

三、端到端验证:造一份文档,真实回填

行级统计是静态推算,还需要一次端到端验证:造一份真实排版的文档,把译文真的填回去,看能不能放下。

from reportlab.lib.pagesizes import A4
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfgen import canvas

COL_W, F_SIZE, LEAD = 240.0, 10.0, 14.0

def make_src(path, paragraphs):
    """造一份固定列宽 240pt、10pt/14pt 行距的英文文档"""
    c = canvas.Canvas(path, pagesize=A4)
    W, H = A4
    c.setFont("Helvetica", F_SIZE)
    x, y = 56.0, H - 90.0
    for en in paragraphs:
        words, line, out = en.split(), "", []
        for wd in words:
            cand = (line + " " + wd).strip()
            if pdfmetrics.stringWidth(cand, "Helvetica", F_SIZE) <= COL_W:
                line = cand
            else:
                out.append(line); line = wd
        if line:
            out.append(line)
        for ln in out:
            c.drawString(x, y, ln)
            y -= LEAD
        y -= LEAD * 1.2      # 段后间距,保证每段能被切成独立块
    c.save()
    return path

文档造好之后,测量译文需要几行,靠的是"渲染后数行数"而不是估算:

def needed_lines(text, width, size, cjk=False):
    """把文本排进给定列宽,数出渲染后的真实行数"""
    d = fitz.open()
    p = d.new_page(width=width + 10, height=4200)
    p.insert_textbox(fitz.Rect(0, 0, width, 4190), text, fontsize=size,
                     fontname="china-s" if cjk else "helv", align=0)
    n = 0
    for blk in p.get_text("dict")["blocks"]:
        if blk.get("type") != 0:
            continue
        n += len([l for l in blk.get("lines", []) if l.get("spans")])
    d.close()
    return max(1, n)

这里有个坑:不要用 insert_textbox() 的返回值除以单行高度来推算行数。 它的返回值是剩余可用高度,不是精确的行高倍数,跨字体(尤其 CJK)算出来的行数会偏小。直接 get_text("dict") 数 lines 才是准的。

10 段英文(每段约 3–4 行),分别换成德语和中文,回填结果:

指标德语西班牙语中文
文本宽度比1.09331.06760.5741
原文总行数373737
译文所需行数414021
段落高度比(均值)1.1251.09170.575
段落高度比(最大)1.33331.33330.75

宽度只膨胀 9.3%,段落高度就涨了 12.5%,最高的段落涨了三分之一。 中文方向反而缩了 42%。

四、四种自适应策略的代价对比

有了真实回填能力,就可以对比四种策略了。判定方式统一为"译文所需行数 vs 原文行数"。

策略一:保持原字号、原行距,盒高固定。

最朴素的做法,也是事故来源。实测:德语 10 段里有 4 段溢出(40%),西班牙语 3 段(30%),中文 0 段。

策略二:自动缩小字号直到放得下。

实测平均字号比 0.97,最小降到 8.75 磅(德语)/ 8.25 磅(西班牙语)。听起来代价不大,但注意这是"为了塞进原高度"的下限——真实文档里字号更小、行更密时,会掉到 7 磅以下,可读性会崩。

策略三:保持字号,压缩行距。

实测平均行距比 0.905,最小行距降到 10.5 磅(原 14 磅)。德语有 3 段、西语有 2 段的行距跌破了 11 磅。行距压到这个程度,阅读体验会明显变差,密集段落尤其明显。

策略四:保持字号与行距,允许段落变高。

实测每段平均多占 5.6 磅(德语)/ 4.2 磅(西语),10 段累计多占 56 磅 / 42 磅。这个方案保持了可读性,代价是整页内容往下推,跨页位置改变,目录页码可能失效。

四个策略汇总:

策略可读性版面稳定性适用场景
原样回填最高最差(40% 溢出)中文方向;或原文有大片留白
缩字号明显下降好文本框固定、且只差一两行
压行距中等下降好段落短、行距原本宽松
扩盒高不变差(整体下移)译后重排、不要求页码一致

五、结论与选型判据

实测下来,我给三条判据:

**判据一:先看语言方向。**中译英是高风险方向(1.79 倍),英译中基本不会溢出(0.57 倍)。同样的文档,中译英要考虑溢出,英译中要考虑的是大片空白带来的版面空洞。

**判据二:先算原文的行填充率。**如果文档每行都排到 96% 以上,就不要指望"原样回填"能不出问题;如果有明显留白,按原样回填是最省事的。

**判据三:策略按"增量"选。**译文比原文多的行数在 1 行以内,缩字号或压行距更划算;超过 2 行,扩盒高更合适——因为缩字号会让你为了最后一行把全篇字号都降低。

如果是自动化流水线,建议这么实现:先算 needed_lines / src_lines 的比值,小于 1.05 用缩字号,1.05–1.25 用扩盒高,大于 1.25 直接判定"该重排",不要硬塞。

总结

这次实测最反直觉的一点是:排版好的文档,本来就没有余量。

行填充率 96.7% 意味着任何膨胀都会溢出,而德语相对英语只长 9.7%,就能让三分之一的行出问题。所以"格式保留"这件事的本质,不是把文字贴回原位,而是做一次完整的重排——重新计算每一行的容量,再决定这一页要不要调整。

对于不想自己写这套重排逻辑的场景,用在线工具处理整份文档是一个省事的选择,比如 PDFTranslator 这类支持保留原始排版的服务,把上传、翻译、重排三件事一起做掉,免去自己算行宽和盒高。

标签:PDF翻译、Python、PyMuPDF、排版、自动化

如何处理动态语言(Python / JS)的“隐形”调用链? 本文揭示动态语言(Python/JS)中静态AST解析导致调用链“断链”的核心问题,提出通过运行时追踪补全图谱的解决方案。基于Code-Graph-RAG的cgr trace机制,分别利用pytest插件与V8 Profiler捕获真实调用路径,将动态边合并至静态图谱,并在权重体系中提升动态边优先级。实践表明,该方法可显著提升图谱覆盖率,实现“结构+行为”双视角理解代码,为MCP与Rerank系统提供可靠支持。 阅读详情

相关推荐

Python PDF翻译工具实战:文本提取、坐标回填与排版还原全解析

PDF文件本质上是基于坐标的页面描述,而非结构化的文本流,直接套用在线翻译往往导致排版崩坏、公式乱码。理解这一原理后,我们可以用Python构建一套完整的PDF翻译流程:借助PyMuPDF这类解析库,按版面坐标提取文本块,过滤图片与空块,再调用机器翻译API完成批量翻译,最后通过坐标回填或新建页面实现双语对照输出。这一方案不仅适用于学术论文、技术手册的快速阅读,还能通过缓存机制、并发控制和排版重排,解决长文档翻译中的乱序、溢出与术语一致性问题。本文基于实际工程经验,拆解从文本提取、翻译引擎选型到结果回填的完

weixin_31714129的博客 292

文声图OCR翻译全链路解析:从检测识别到多语种回填的工程实践

OCR文字识别与机器翻译是跨语种信息获取的核心技术,其原理是通过图像预处理、文字检测、文字识别、翻译回填四阶段链路,将图片中的文字转换为可编辑译文。技术价值在于降低跨语种信息获取门槛,支持离线部署与隐私保护。典型应用场景包括外文论文阅读、跨境电商运营、多语种文档处理等。PaddleOCR与DBNet、CRNN、SVTR等模型组合,配合本地翻译引擎,可实现高效准确的图文翻译。本文深入拆解检测、识别、翻译各环节实操要点,并分享多语种排版处理与性能优化经验。

weixin_33859231的博客 349

Python PDF翻译实战:文本流排序与坐标回填的完整方案

PDF翻译的核心难点在于其内部并非按阅读顺序存储段落,而是由带坐标的文本对象构成,直接提取往往得到乱序内容。理解这一原理后,翻译质量取决于两个环节:先按坐标重建文本流,再通过翻译引擎处理。以Python生态为例,PyMuPDF提供了同时支持文本提取和回填的坐标能力,通过blocks排序、过滤页眉页脚、切句与术语表设计,可有效提升翻译准确度。该技术适用于批量英文技术文档本地化、保留原始排版的分发场景,以及表格术语一致性要求较高的资料翻译。本文从文本提取、翻译接入、坐标写回到并发控制,给出一条可落地的PDF翻译

weixin_42522148的博客 237

AI全栈实战 | 3.9-01 爬虫入门:requests 加 BeautifulSoup 三分钟跑通,但 90% 的人栽在这 4 个“礼貌“问题上

⚠️:本文内容仅用于。请遵守目标站点的服务条款与相关法律法规,不得对目标服务造成负担,不得采集、传播个人隐私数据。技术是中性的,边界在你手里。爬虫的入门技术(requests 发请求 + BeautifulSoup 解析)三分钟就能学会。真正区分"会用爬虫"和"会做爬虫的人"的,是这篇我们跑通"请求→解析→存储"的最小闭环,然后重点把"合规与礼貌"这根弦给你绷上。

源码获取 | 运行部署 | 定制二开修改,如果回复不及时请耐心等待,请见谅。 413

ISO14001:2015中文版PDF条款结构化与FTS5检索

PDF 全文检索的核心不是打开阅读器,而是把版式文本转成可计算的结构化数据。先判断文本层与扫描件,再用坐标分栏、页眉页脚过滤和断行合并完成清洗;随后按条款号锚定切分成树,以编号作为主键保留层级关系。为让中文术语可召回,可用 jieba 分词写入倒排索引,并借 SQLite FTS5 与 BM25 做关键词加权排序。这样标准条款就能被快速检索、范围过滤和一致性校验,进一步生成审核检查表、支撑差距分析与体系文件比对。面对 ISO14001:2015中文版.pdf 这类双栏、条款严格的标准,这条流水线能把 Ctr

weixin_33857679的博客 315

UART中断接收的实战陷阱:HAL库常见误区与性能调优指南

本文深入解析STM32 HAL库UART中断接收机制,揭示常见实战陷阱如数据溢出、中断优先级配置不当等,并提供性能调优方案。重点介绍如何使用空闲中断处理不定长数据、DMA与中断混合模式优化,以及工业级错误恢复与流量控制策略,帮助开发者构建稳定可靠的串口通信系统。

pea55的博客 747

从一段视频到可漫游的 4D 有声场景:思路拆解与最小复现手记

只需一段手机视频,你就能生成可"走进去"的 4D 有声场景:转头时狗叫声方向随之变化,走近时声音更清晰。本文拆解 Video-to-4DAVScene 的核心思路,手把手带你用几十行 Python 搭出最小管线,把视频中的运动物体变成带空间位置的声源,并附上三个真实踩坑的排障经验,代码可直接跑。🎧

helloagent的博客 235

CH341的I2C流模式(StreamI2C)到底怎么用?从EEPROM读写到自定义设备,一篇讲清参数配置逻辑

本文详细解析了CH341的I2C流模式(StreamI2C)的使用方法,从EEPROM读写到自定义设备的参数配置逻辑。通过深入分析I2C协议基础、StreamI2C参数映射关系及典型设备配置示例,帮助开发者快速掌握StreamI2C的应用技巧,解决实际开发中的常见问题。

weixin_30932215的博客 449

【每天一个 Python 小案例30】Python 基础知识综合小项目:我的工具盒

作为系列收官,本篇把前 29 篇的知识点合成一个能直接用的命令行工具"我的工具盒":计算器(用 ast 解析表达式,不碰 eval)、单位换算与温度转换(一张换算表 + 特例分支)、记账与分类统计(Decimal + JSON 持久化)、以及用"字典当命令表"把菜单和业务逻辑解耦的主循环。文中对比了 eval 的安全隐患与 ast 白名单的做法,解释了 lambda 闭包在字典里的写法与晚绑定陷阱,并在最后给出整个系列的知识地图,把变量、数据结构、控制流、函数、类、异常、文件、标准库八块内容对应到具体篇目。

xinjiyaya的博客 427

QT6与QT5安装全攻略:从下载到环境配置一站式指南

本文提供了一份详尽的QT6与QT5安装教程,涵盖从版本选择、在线安装器使用到环境变量配置的全过程。针对新手常见痛点,重点对比了QT6与QT5的安装差异,并给出了MinGW与MSVC编译器的选择建议,旨在帮助开发者快速搭建稳定可用的QT开发环境,避免常见错误。

weixin_29216353的博客 311

别再一个个BAPI调了!用CVI_EI_INBOUND_MAIN一次性搞定SAP BP主数据(附完整ABAP代码)

本文详细介绍了如何使用SAP标准函数CVI_EI_INBOUND_MAIN高效维护业务伙伴(BP)主数据,替代传统的多BAPI调用方式。通过完整ABAP代码示例,展示了如何一站式处理供应商、客户、公司代码等所有视图的创建与更新,提升数据一致性和开发效率。

weixin_29204205的博客 295

详解Python条件语句

在 Python 中,if...else 是一种条件语句,可以根据给定的条件执行不同的操作。这个语句通常用于控制程序的流程。

2601_96798737的博客 208

北斗导航 | raPPPid软件功能模块详解

raPPPid(Rapid Precise Point Positioning with integer ambiguity resolution,快速精密单点定位与整周模糊度解算)是由维也纳工业大学(TU Wien)大地测量与地理信息系开发的MATLAB开源PPP软件包。它是VieVS(Vienna VLBI and Satellite Software,维也纳VLBI与卫星软件)的PPP模块,由Marcus Franz Glaner和Robert Weber主导开发。

尘世冰封的专栏 586

Python3 协程:异步编程的核心机制与实战

协程是解决I/O密集型任务等待瓶颈的高效机制,相比线程更轻量、无锁开销。从yield到async/await的演进,使异步编程语义清晰、易于理解。通过async/await可实现并发执行多个任务(如gather、create_task),显著提升网络请求、爬虫等场景性能。关键在于使用异步库(如aiohttp)替代同步库,避免阻塞事件循环。合理控制超时与并发数,才能发挥协程最大优势。

Lxn2zh的博客 159

安装openclaw时出现npm error code ENOENT npm error syscall spawn git报错的解决方案

本文主要介绍了安装openclaw时出现npm error code ENOENT npm error syscall spawn git报错的解决方案,希望能对使用openclaw的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 12万+

【人工智能】全面盘点国内AI九大模型:各擅胜场的智能先锋(豆包、文心一言、讯飞星火、通义千问、Kimi、智谱清言、腾讯元宝、秘塔、天工AI)

追求性价比与全能:选豆包,适合个人与中小企业日常使用;侧重中文创作与理解:选文心一言,文学与商业文案创作首选;需要专业语音交互:选讯飞星火,智能客服、车载场景必备;看重生态与多场景:选通义千问,适配电商、办公等企业需求;处理超长文本任务:选Kimi,文档分析、学术研究的利器;专注深度推理创作:选智谱清言,学术与创意写作的伙伴;依赖腾讯生态协同:选腾讯元宝,日常轻量需求的便捷之选;深耕法律学术领域:选秘塔,专业文本处理的权威工具;布局前沿技术体验:选天工AI,享受接近国际顶尖的智能服务。

奶爸的编程之路,也就一周冷个三天 1122

二进制木马免杀-Python 分离免杀与 Web 挂马

二进制木马免杀-Python 分离免杀与 Web 挂马

2503_94637398的博客 268

comsol如何实现五厚度的单元模拟?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 471

torch.compile 差异仅 1e-6,边界样本预测为何翻转

torch.compile 加速后输出与 eager 不一致,部分预测翻转。逐层对比与 graph break 分析定位到动态分支翻转根因。容差回归仅适用于无分支翻转场景,零容忍场景应禁用编译。

昨日种种,皆成今我。今日种种,皆成新我。 159

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级 备考:莫队算法离线区间查询详解

备赛进行时:第十八届蓝桥杯软件赛报名已于 2026-10-08 10:00 开启、12-18 14:00 截止,省赛定在 2027-04-10(C/C++·Python 程序设计 9:00–13:00);中国电子学会 2026 年 12 月软件编程(C/C++ 一级至十级、Python 一级至六级)考级报名 9/23–12/2 16:00、统考 12-12;全国青少年信息素养大赛 2026—2027 赛季算法应用主题赛也已进入复盘练兵窗口。

IT_Scratch的博客 146

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【Python】国家中小学智慧教育平台电子教材批量下载与 PDF 合成实战

成果:两本语文电子课本(一年级上册 118 页 / 23MB、三年级上册 130 页 / 30.3MB),合计 248 页、约 54MB,单本下载加合成 40~60 秒,PDF 页数校验全部通过。经验教训SPA 站点的数据接口优先从 bundle 里挖,比抓页面稳得多;资源链接要按 private/public 分组看待,只取平台公开部分;页数、目录名这类“可推断”的信息,永远用实际响应验证一次;受限环境里“能不能跑浏览器”要在方案定稿前确认。后续计划:这版 PDF 是图片版,没有文字层;

木头大左的博客 139

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

魔塔社区微调训练Qwen2-1.5B-Instruct模型并烧录到‌RK3568开发板教程

本文基于Ubuntu 22.04 + CUDA 13.0.3环境,使用LLaMA-Factory框架对Qwen2-1.5B-Instruct模型进行LoRA微调,训练儿童故事生成专用模型。通过配置qwen模板、制作alpaca格式数据集、执行sft训练并合并LoRA权重,最终将模型转换为GGUF格式,并量化为Q4_K_M以适配RK3568嵌入式平台。全程支持国产镜像加速下载与显存优化,实现高效轻量化部署。

浅清秋慕夏的博客 187

【回眸】DeepSeek V4.1 Flash 快速上手与实战

本文介绍如何高效本地部署开源大模型,通过现代化工具链实现分钟级环境搭建。聚焦显存优化、一键安装、代码调用与多轮对话实现,解决“显存不足”“连接超时”等痛点,提供参数调优与结构化输出技巧,助力开发者在离线场景下快速构建稳定、高效的本地推理系统。

啤酒鸭的物联网开发记录博客 224

智叟云集-手机证据抓取系统的工程结构与应用入口

本文系统阐述手机证据抓取系统的工程结构与应用入口,涵盖四大层面:工程目录划分(Android、Python服务、Web页面、测试与构建工具);Android组件通过Manifest声明可启动页面,主界面由MainActivity管理;Python服务通过run.py解析参数并启动FastAPI应用,支持远程访问;浏览器页面采用HTML/CSS/JS分离架构,静态资源通过路径关联,实现动态交互。各模块分工明确,协同构建可运行的采集系统。

2301_77178996的博客 233

Java Arrays.asList 常见坑详解|UnsupportedOperationException、数组联动、基本类型 bug

解析 Arrays.asList 常见开发陷阱,演示 UnsupportedOperationException、底层数组引用共享、基本类型数组问题,区分 Arrays 内部 ArrayList 与 java.util.ArrayList,给出数组转 List 的各种场景正确代码。

weixin_42617033的博客 478

利用python中matplotlib.pyplot库绘制图

plt.plot(x,y) # x,y是每个点的坐标,plot()把每个点按顺序画折线。plt.subplots(2,2)表示绘制2*2的子图布局,axs[0,0]表示在第0行第0列绘制子图...coordinates_i[:,0]表示获取每一行(每一个spot)的第0列(x坐标)coordinates_i[:,1]表示获取每一行(每一个spot)的第0列(y坐标)plot.subplot(2,2,1) 表示子图布局是2*2的,开始绘制第一个。也可以导入数据绘制。可以设置color属性,设置颜色。

qq_46147236的博客 102
上一篇: Python给PDF翻译加段落级缓存:哈希去重与增量重译
下一篇: PDF表单域和批注翻译不了?用Python提取AcroForm与annotations并回填译文
SamChan90
博客等级 码龄1年 39粉丝 109原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值