如何用 Python + PDFTranslator API 做多语言产品手册批量翻译

发布时间:2026/7/22 10:13:10
如何用 Python + PDFTranslator API 做多语言产品手册批量翻译 做跨境电商或出海产品的同学经常会遇到一个问题产品手册只有中文版但要快速生成英文、西班牙语、法语、德语等多语言版本。手动翻译不现实找翻译公司又贵又慢。今天分享一个用 Python 批量处理产品手册翻译的 workflow先对PDF做结构分析再调用在线翻译能力生成多语言版本最后按语言归档输出。文章会给出可直接运行的代码框架你可以根据实际 API 文档替换具体参数。一、需求分析假设我们有以下输入一份中文版产品手册manual_zh.pdf目标语言列表[en, es, fr, de]输出要求每种语言一个PDF尽量保留原始排版核心流程读取PDF - 提取文本与元信息 - 调用翻译 - 格式还原 - 保存结果二、环境准备Python 3.10依赖库pipinstallrequests pdfplumber openpyxl说明pdfplumber用于本地提取PDF文本做预处理requests用于调用翻译服务openpyxl用于记录翻译日志。三、代码实现1. 读取PDF并提取文本importpdfplumberfrompathlibimportPathdefextract_pdf_text(pdf_path:str)-list[dict]:按页提取PDF文本保留页码信息pages[]withpdfplumber.open(pdf_path)aspdf:foridx,pageinenumerate(pdf.pages,start1):textpage.extract_text()orpages.append({page:idx,text:text.strip(),})returnpagesif__name____main__:pagesextract_pdf_text(manual_zh.pdf)print(f共提取{len(pages)}页文本)2. 调用翻译服务这里以 PDFTranslator 的 API 为例具体接口参数请参考官方文档封装一个通用翻译函数importrequestsimporttime API_BASEhttps://api.pdftranslator.org/v1API_KEYyour_api_key_here# 替换为你的API Keydeftranslate_text(text:str,target_lang:str,source_lang:strzh)-str:调用PDFTranslator API翻译文本ifnottext.strip():returnpayload{text:text,source_lang:source_lang,target_lang:target_lang,preserve_format:True,# 请求保留格式标记}headers{Authorization:fBearer{API_KEY},Content-Type:application/json,}try:resprequests.post(f{API_BASE}/translate,jsonpayload,headersheaders,timeout60,)resp.raise_for_status()returnresp.json().get(translated_text,)exceptrequests.RequestExceptionase:print(f翻译失败:{e})return注意如果 PDFTranslator 提供的是文件级翻译 API直接上传PDF并下载译文可以跳过按页提取文本的步骤直接上传整个文件。上述代码适用于文本级 API 的演示。3. 批量翻译整个手册deftranslate_manual(pdf_path:str,target_langs:list[str],output_dir:stroutput):批量翻译产品手册到多语言output_dirPath(output_dir)output_dir.mkdir(parentsTrue,exist_okTrue)pagesextract_pdf_text(pdf_path)base_namePath(pdf_path).stemforlangintarget_langs:translated_pages[]print(f正在翻译到{lang}...)forpageinpages:translatedtranslate_text(page[text],target_langlang)translated_pages.append({page:page[page],text:translated,})time.sleep(0.5)# 避免请求过快# 保存为文本文件后续可结合排版工具生成PDFout_fileoutput_dir/f{base_name}_{lang}.txtwithopen(out_file,w,encodingutf-8)asf:forpintranslated_pages:f.write(f\n--- Page{p[page]}---\n)f.write(p[text])f.write(\n)print(f已保存:{out_file})if__name____main__:translate_manual(pdf_pathmanual_zh.pdf,target_langs[en,es,fr,de],)4. 记录翻译日志importopenpyxlfromdatetimeimportdatetimedeflog_translation(log_file:str,records:list[dict]):记录翻译日志到Excelwbopenpyxl.Workbook()wswb.active ws.title翻译日志ws.append([时间,源文件,目标语言,页数,状态])forrinrecords:ws.append([r[time],r[source],r[lang],r[pages],r[status],])wb.save(log_file)四、进一步提升效果的建议使用文件级翻译 API如果翻译服务支持直接上传PDF并返回保留排版的译文PDF优先使用文件级接口。这样可以避免手动提取文本后再还原排版的麻烦。术语表对齐产品手册里通常有大量固定术语。可以在翻译前准备术语表glossary在调用API时传入保证型号“规格”保修等词翻译一致。分块处理大文件如果手册页数很多可以按章节或页码范围分批翻译降低单次请求失败的影响。后处理校验翻译完成后建议写一个校验脚本检查输出页数是否和输入一致关键章节标题是否全部翻译表格行数是否一致五、完整代码汇总 批量翻译产品手册示例 依赖pip install requests pdfplumber openpyxl importtimeimportrequestsimportpdfplumberimportopenpyxlfrompathlibimportPathfromdatetimeimportdatetime API_BASEhttps://api.pdftranslator.org/v1API_KEYyour_api_key_heredefextract_pdf_text(pdf_path:str)-list[dict]:pages[]withpdfplumber.open(pdf_path)aspdf:foridx,pageinenumerate(pdf.pages,start1):textpage.extract_text()orpages.append({page:idx,text:text.strip()})returnpagesdeftranslate_text(text:str,target_lang:str,source_lang:strzh)-str:ifnottext.strip():returnpayload{text:text,source_lang:source_lang,target_lang:target_lang,preserve_format:True,}headers{Authorization:fBearer{API_KEY},Content-Type:application/json,}try:resprequests.post(f{API_BASE}/translate,jsonpayload,headersheaders,timeout60)resp.raise_for_status()returnresp.json().get(translated_text,)exceptrequests.RequestExceptionase:print(f翻译失败:{e})returndeftranslate_manual(pdf_path:str,target_langs:list[str],output_dir:stroutput):output_dirPath(output_dir)output_dir.mkdir(parentsTrue,exist_okTrue)pagesextract_pdf_text(pdf_path)base_namePath(pdf_path).stem records[]forlangintarget_langs:translated_pages[]print(f正在翻译到{lang}...)forpageinpages:translatedtranslate_text(page[text],target_langlang)translated_pages.append({page:page[page],text:translated})time.sleep(0.5)out_fileoutput_dir/f{base_name}_{lang}.txtwithopen(out_file,w,encodingutf-8)asf:forpintranslated_pages:f.write(f\n--- Page{p[page]}---\n{p[text]}\n)records.append({time:datetime.now().isoformat(),source:pdf_path,lang:lang,pages:len(pages),status:成功,})print(f已保存:{out_file})log_translation(output_dir/translation_log.xlsx,records)deflog_translation(log_file:Path,records:list[dict]):wbopenpyxl.Workbook()wswb.active ws.title翻译日志ws.append([时间,源文件,目标语言,页数,状态])forrinrecords:ws.append([r[time],r[source],r[lang],r[pages],r[status]])wb.save(log_file)if__name____main__:translate_manual(pdf_pathmanual_zh.pdf,target_langs[en,es,fr,de],)六、结语用Python做PDF批量翻译的核心价值不是替代翻译本身而是把重复上传、下载、归档的流程自动化。结合 PDFTranslator 这类支持格式保留的翻译服务可以在保证排版不乱的前提下快速产出多语言版本的产品手册。如果你也在做类似需求建议先拿一份样本手册跑通流程再批量扩展到全量文档。标签PDF翻译、Python自动化、AI翻译、批量翻译、开发者工具