<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[SamChan90的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/SamChan90</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; SamChan90]]></copyright><item><title><![CDATA[用户手册翻译实操：用 AI 处理 PDF，如何验收 OCR、术语与版式？]]></title><link>https://blog.youkuaiyun.com/SamChan90/article/details/170049925</link><guid>https://blog.youkuaiyun.com/SamChan90/article/details/170049925</guid><author>SamChan90</author><pubDate>Wed, 04 Nov 2026 17:27:19 +0800</pubDate><description><![CDATA[本文介绍适用于PDF工程手册的完整大模型翻译工作流：上传前确认文件类型与文本质量，建立术语表；翻译时保留版式，输出双语对照；验收阶段按参数、操作逻辑、图文对应等优先级核对错误；交付前执行“照文操作”验证，确保译文可读、可操作，并归档全流程资料，保障海外客户使用安全准确。]]></description><category></category></item><item><title><![CDATA[外贸文档翻译、扫描件翻译处理，程序员从找客户到交付的接单流程]]></title><link>https://blog.youkuaiyun.com/SamChan90/article/details/168881331</link><guid>https://blog.youkuaiyun.com/SamChan90/article/details/168881331</guid><author>SamChan90</author><pubDate>Fri, 23 Oct 2026 18:25:22 +0800</pubDate><description><![CDATA[程序员做文档处理副业，关键在于聚焦具体服务（如PDF转Word、手册排版），而非泛泛而谈。通过猪八戒、程序员客栈、翻译公司等渠道精准接单，以试单验证需求，用标准化交付包（含文档、疑点清单、版本说明）提升验收效率。重视客户沟通与资料脱敏，合理报价并记录真实工时，优先完成首单闭环，再评估可持续性。]]></description><category></category></item><item><title><![CDATA[图片翻译后文字挤出边框？用 Pillow 测量译文，不再靠字符数猜宽度]]></title><link>https://blog.youkuaiyun.com/SamChan90/article/details/168139038</link><guid>https://blog.youkuaiyun.com/SamChan90/article/details/168139038</guid><author>SamChan90</author><pubDate>Fri, 16 Oct 2026 18:01:42 +0800</pubDate><description><![CDATA[图片译文变长后，如何判断是否放得下？本文用 Pillow 测量文本包围框，在固定区域内选择字号，并给出换行、改框、人工复核和实际展示尺寸下的验收方法。]]></description><category></category></item><item><title><![CDATA[PDF 翻译后 1,250 变成 1.250，是错了吗？用 Python 核对数字格式]]></title><link>https://blog.youkuaiyun.com/SamChan90/article/details/168139011</link><guid>https://blog.youkuaiyun.com/SamChan90/article/details/168139011</guid><author>SamChan90</author><pubDate>Fri, 16 Oct 2026 18:00:41 +0800</pubDate><description><![CDATA[PDF 翻译后的数字不能只比字符串。本文用 Python Decimal 实现显式格式解析，区分数值相同、数值不同与待复核，并解释字段对齐、单位、有效位数和限定词的检查边界。]]></description><category></category></item><item><title><![CDATA[PDF 压缩后为什么不能搜索？用 Python 检查文本层是否保留]]></title><link>https://blog.youkuaiyun.com/SamChan90/article/details/168137557</link><guid>https://blog.youkuaiyun.com/SamChan90/article/details/168137557</guid><author>SamChan90</author><pubDate>Fri, 16 Oct 2026 16:00:04 +0800</pubDate><description><![CDATA[PDF 压缩不能只看文件大小。本文用可复现的单页实验，对比内容流压缩与整页栅格化，检查字节数、可提取文本和链接，并给出原生文字、扫描件与 OCR 文档的验收方法。]]></description><category></category></item><item><title><![CDATA[PDF 转 Word 后看着没变，为什么一改就乱？用 Python 检查文档结构]]></title><link>https://blog.youkuaiyun.com/SamChan90/article/details/168135089</link><guid>https://blog.youkuaiyun.com/SamChan90/article/details/168135089</guid><author>SamChan90</author><pubDate>Fri, 16 Oct 2026 15:14:34 +0800</pubDate><description><![CDATA[PDF 转为 DOCX 后，页面相似不代表适合继续编辑。本文用只读 Python 脚本检查段落、表格、文本框和手动换行，再通过正文增字、表格加行、标题改样式验证交付结果。]]></description><category></category></item><item><title><![CDATA[用 Python 翻译 DOCX，为什么加粗和超链接会丢失？]]></title><link>https://blog.youkuaiyun.com/SamChan90/article/details/168134173</link><guid>https://blog.youkuaiyun.com/SamChan90/article/details/168134173</guid><author>SamChan90</author><pubDate>Fri, 16 Oct 2026 14:25:53 +0800</pubDate><description><![CDATA[用一个可复现的 Python 实验，区分 DOCX 文本写回中的段落样式、字符格式和超链接结构，再讨论逐个 run 翻译的局限、结构化回填方案与整份文档的验收方法。]]></description><category></category></item><item><title><![CDATA[PDF页面旋转与CropBox陷阱：译文回填位置总是错位的根因实测]]></title><link>https://blog.youkuaiyun.com/SamChan90/article/details/166833187</link><guid>https://blog.youkuaiyun.com/SamChan90/article/details/166833187</guid><author>SamChan90</author><pubDate>Tue, 29 Sep 2026 10:08:46 +0800</pubDate><description><![CDATA[做 PDF 翻译回填的时候，有一种 bug 特别难查：代码逻辑没问题，文字也提取出来了，但**译文就是填在错误的位置**，有时候甚至直接跑到页面外面看不见。
我排查下来，根因基本都落在两个很少被注意的页面属性上——/Rotate（页面旋转标记）和 /CropBox（裁剪框）。这两个属性和 PyMuPDF 里的 page.rect、mediabox、transformation_matrix 交互起来，坐标系会在你毫无察觉的情况下换掉。
本文用一组可复现的实测把这件事讲清楚：两个属性各自怎么改变坐标系、...]]></description><category></category></item><item><title><![CDATA[PDF回填译文后数字签名就失效了？Python检测签名与增量保存实测]]></title><link>https://blog.youkuaiyun.com/SamChan90/article/details/166833085</link><guid>https://blog.youkuaiyun.com/SamChan90/article/details/166833085</guid><author>SamChan90</author><pubDate>Tue, 29 Sep 2026 10:07:45 +0800</pubDate><description><![CDATA[在批量 PDF 翻译的流水线里，有一类文件特别麻烦：**带数字签名的 PDF**。典型场景是电子合同、电子发票、加盖签章的报价单。这类文件如果被程序"打开—改内容—另存"，签名往往会失效，而失效的合同在业务上是废纸。
问题的关键不在于"能不能改"，而在于**用什么方式保存**。本文用一组可复现的实测，把 PDF 签名的检测方法、不同保存方式对签名的影响、以及实际开发中踩到的两个坑讲清楚。
顺便说清一个前提：翻译回填本身是"必须改文件"的操作——要么替换原文字，要么在旁侧插入译文图层。也就是说，只要你的...]]></description><category></category></item><item><title><![CDATA[批量PDF翻译任务队列设计：断点续传与失败重试的实测方案]]></title><link>https://blog.youkuaiyun.com/SamChan90/article/details/166773842</link><guid>https://blog.youkuaiyun.com/SamChan90/article/details/166773842</guid><author>SamChan90</author><pubDate>Mon, 28 Sep 2026 08:55:27 +0800</pubDate><description><![CDATA[批量翻译几十上百份 PDF 时，最怕两种场面：一是跑了两小时程序崩了或被杀，重启后所有文件从头再翻一遍；二是队列里混进一两个损坏文件，重试逻辑写得不对，程序在它身上死循环，后面的好文件全部卡死。这两个问题的解法是同一套东西：**带状态文件的任务队列 + 区分失败类型的重试策略**。本文给出一套可复现的最小实现，并在 30 份测试文档上实测断点续传、重试吸收率和状态文件损坏恢复。
三个核心决策，每一个都对应一个踩过的坑：
**状态文件选 JSONL（每行一个任务）而不是 JSON**。每处理完一个任务就...]]></description><category></category></item><item><title><![CDATA[PDF翻译时页眉页脚总在捣乱？跨页重复文本块的检测与过滤实测]]></title><link>https://blog.youkuaiyun.com/SamChan90/article/details/166773823</link><guid>https://blog.youkuaiyun.com/SamChan90/article/details/166773823</guid><author>SamChan90</author><pubDate>Mon, 28 Sep 2026 08:54:11 +0800</pubDate><description><![CDATA[做 PDF 批量翻译流水线时，有个问题几乎必然遇到：**页眉页脚**。一份 300 页的文档，页眉"XXX Annual Report"重复 300 次，每页还带一个页码。这些文字喂给翻译引擎，轻则浪费 token 和额度，重则污染译文——页码被翻成奇怪的字、版权行被断句错乱，回填后版面还会溢出。所以翻译前识别并过滤页眉页脚，是流水线的标配步骤。
本文在 3 份真实 PDF 上实测两条技术路线：固定 y 阈值过滤 vs 跨页重复内容识别，并把识别算法从 v1 迭代到 v3 的全过程（包括两次漏检）完整...]]></description><category></category></item><item><title><![CDATA[PDF表单域和批注翻译不了？用Python提取AcroForm与annotations并回填译文]]></title><link>https://blog.youkuaiyun.com/SamChan90/article/details/166573056</link><guid>https://blog.youkuaiyun.com/SamChan90/article/details/166573056</guid><author>SamChan90</author><pubDate>Thu, 24 Sep 2026 10:11:34 +0800</pubDate><description><![CDATA[做 PDF 翻译流水线的时候，有一种"内容缺失"特别隐蔽：正文全都译好了，但文件里的**表单域**和**批注**原封不动。
这两处文字不在页面的内容流里。表单域的值存在 AcroForm 字典中，批注存在页面对象的 /Annots 数组里。常规的 extract_text() 只能读到内容流，读不到这两层——所以它们会安静地被漏掉，你甚至不会收到任何报错。
用 Python 读取 AcroForm 表单域（文本框 / 复选框 / 下拉框）的类型、值、坐标，并批量回填译文；
读取批注层（高亮 / 便签 ...]]></description><category></category></item><item><title><![CDATA[Python实测PDF译文回填：排版溢出的四种自适应策略]]></title><link>https://blog.youkuaiyun.com/SamChan90/article/details/166572954</link><guid>https://blog.youkuaiyun.com/SamChan90/article/details/166572954</guid><author>SamChan90</author><pubDate>Thu, 24 Sep 2026 10:10:31 +0800</pubDate><description><![CDATA[做 PDF 翻译流水线的人迟早会碰到同一个问题：译文回填到原文位置后，文字伸出了文本框。
这个问题的根源不是翻译质量，而是文本体积。同一段内容用不同语言写出来，占的横向空间完全不一样。原文是排满的版式，译文一长，就会溢出。
这篇文章用真实字体度量 + 真实 PDF 版面做一次完整实测，回答三个问题：
同一句话在不同语言下宽度差多少？
排版后的 PDF 行里还剩多少余量？
溢出发生后，四种常见策略的真实代价分别是多少？
所有数据来自本机真机实测，代码可复现。
pip install pymupdf re...]]></description><category></category></item><item><title><![CDATA[Python给PDF翻译加段落级缓存：哈希去重与增量重译]]></title><link>https://blog.youkuaiyun.com/SamChan90/article/details/166462311</link><guid>https://blog.youkuaiyun.com/SamChan90/article/details/166462311</guid><author>SamChan90</author><pubDate>Wed, 23 Sep 2026 10:19:54 +0800</pubDate><description><![CDATA[批量翻译 PDF 的时候，真正消耗时间和费用的不是"难"的段落，而是那些重复出现几十遍的样板文字：页眉页脚、免责声明、固定条款、报价单底部的付款条件。这些段落每一份文档都要重新送一遍翻译接口，属于纯浪费。
这篇文章回答四个工程问题：一批真实文档里段落级重复率到底有多高、哈希键怎么设计才不会漏命中、缓存能省多少时间、文档小改之后要重译多少。所有数字都是本机实测跑出来的，测试语料是 20 份模板化商业报价单 PDF（共 60 页）。
不先量就动手是常见错误。如果语料的模板化程度很低，做缓存的计算开销可能比...]]></description><category></category></item><item><title><![CDATA[改写PDF文字后字形变了？PDF字体子集与嵌入的实测分析]]></title><link>https://blog.youkuaiyun.com/SamChan90/article/details/166461953</link><guid>https://blog.youkuaiyun.com/SamChan90/article/details/166461953</guid><author>SamChan90</author><pubDate>Wed, 23 Sep 2026 10:16:54 +0800</pubDate><description><![CDATA[做 PDF 翻译后回填译文时，我遇到过两个看起来毫无关联、但根因是同一个的问题：
一个是**改完字之后，PDF 全文档搜不到了**。译文肉眼看着正常，但 Ctrl+F 搜任何中文都没有结果，复制粘贴出来是一串点号。另一个是**文件体积暴涨**：一份原始只有 1KB 的测试文件，往里面写了一行中文，保存后变成 9.3MB。
这两个问题的答案都在 PDF 的字体机制里——字体有没有嵌入、嵌入的是完整字体还是子集。这篇用 PyMuPDF 把这几个环节实测一遍，给出一组可以直接用的结论和代码。
import ...]]></description><category></category></item><item><title><![CDATA[扫描版PDF做OCR预处理：DPI与灰度化参数的实测取舍]]></title><link>https://blog.youkuaiyun.com/SamChan90/article/details/166461826</link><guid>https://blog.youkuaiyun.com/SamChan90/article/details/166461826</guid><author>SamChan90</author><pubDate>Wed, 23 Sep 2026 10:15:54 +0800</pubDate><description><![CDATA[做 PDF 翻译的预处理时，扫描件是绕不过去的一类输入——它没有文本层，必须先 OCR 出文字才能翻译。这时候会碰上两个参数问题：
**DPI 该设多少？** 网上流传的说法是"扫描件要用 300dpi"，因为 300dpi 是印刷标准。但 300dpi 的 A4 页面是 2482×3509 ≈ 870 万像素，是 100dpi 的 9 倍，处理时间会不会成倍增加？
**要不要先转灰度？** 常见的优化建议是"转灰度能省一半时间"。
这两个说法我都实测了一遍。结论和流传的版本都不太一样，而且过程中我还...]]></description><category></category></item><item><title><![CDATA[用Python提取PDF表格：pdfplumber与PyMuPDF实测对比]]></title><link>https://blog.youkuaiyun.com/SamChan90/article/details/166344340</link><guid>https://blog.youkuaiyun.com/SamChan90/article/details/166344340</guid><author>SamChan90</author><pubDate>Tue, 22 Sep 2026 10:15:32 +0800</pubDate><description><![CDATA[做 PDF 翻译的时候，正文段落其实好办——取文本、翻译、写回，只要不改版式就行。真正难的是**表格**。
表格是"格式保留"里最脆弱的部分：它不是一段流动的文字，而是一个二维网格。翻错了位置，数字和项目名就会对不上号，比排版乱掉更严重。
**提取**：pdfplumber 和 PyMuPDF 谁更靠得住？在什么情况下会崩？
**回填**：把译文写回原来的单元格，到底会不会溢出？
测试环境：Windows 11，Python 3.13.12，PyMuPDF 1.28.2，pdfplumber 0.11...]]></description><category></category></item><item><title><![CDATA[批量PDF翻译预处理提速：多进程并行提取文本实测]]></title><link>https://blog.youkuaiyun.com/SamChan90/article/details/166344175</link><guid>https://blog.youkuaiyun.com/SamChan90/article/details/166344175</guid><author>SamChan90</author><pubDate>Tue, 22 Sep 2026 10:14:17 +0800</pubDate><description><![CDATA[批量处理 PDF 时（比如一晚上要预处理几百份文档、提取全文送翻译），"开多进程能不能加速"是个高频问题。网上答案两极分化：有人说"PDF 解析是 CPU 密集，多进程必提速"，有人说"Python 多进程开销大，得不偿失"。
我实测了两种典型负载：**轻负载**（12 个 30 页文档、纯文本提取）和**重负载**（8 个 40 页密集文档、dict 模式结构化提取），对比串行与 multiprocessing.Pool 2/4/8 进程的耗时。结论先行：**轻负载下多进程反而慢 5-8 倍，重负载...]]></description><category></category></item><item><title><![CDATA[翻译前后保住PDF书签目录：用pypdf读写outline的实战与踩坑]]></title><link>https://blog.youkuaiyun.com/SamChan90/article/details/166344027</link><guid>https://blog.youkuaiyun.com/SamChan90/article/details/166344027</guid><author>SamChan90</author><pubDate>Tue, 22 Sep 2026 10:13:05 +0800</pubDate><description><![CDATA[做 PDF 翻译流水线时，大家盯得最多的是正文、表格和图片，**书签（outline/目录树）是被忽略最多的元数据**。但对一份 300 页的技术手册或论文来说，书签是导航的命脉——翻译后的文件如果书签丢了，读者只能靠滚动条大海捞针。
最近在整理翻译预处理流程时，我系统测了一遍 pypdf 和 PyMuPDF 对书签的读写行为，包括：怎么读出完整的层级树、哪些常见操作会悄悄把书签弄丢、以及拆分场景下怎么按章节切分并保留对应书签。所有代码都在 Python 3.13 + pypdf 6.18.0 + P...]]></description><category></category></item><item><title><![CDATA[在线PDF翻译 vs 本地部署：30页文档的耗时、资源与隐私成本实测]]></title><link>https://blog.youkuaiyun.com/SamChan90/article/details/165848437</link><guid>https://blog.youkuaiyun.com/SamChan90/article/details/165848437</guid><author>SamChan90</author><pubDate>Fri, 18 Sep 2026 10:11:04 +0800</pubDate><description><![CDATA[做文档翻译的工程方案选型时，绕不开一个问题：**本地跑还是丢给在线服务？**
支持本地的理由很硬：数据不出内网、没有调用额度、可以随便改链路。支持在线的理由也很硬：不用维护模型环境、不用管显存、格式还原通常做得更成熟。
但这两边的讨论经常停留在"感觉"，缺少可量化的对比。这篇文章我用一台普通开发机，把两条路线都实测一遍，把**时间、资源、隐私**三个维度的成本摊开来看，最后给一套选择判据。
测试对象：30 页 / 50 页结构化 PDF（正文 + 12 行 × 3 列表格），含文本层，非扫描件。实测环...]]></description><category></category></item></channel></rss>