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

📅 2026/7/22 10:19:06 👁️ 阅读次数 📝 编程学习
如何用 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,start=1):text=page.extract_text()or""pages.append({"page":idx,"text":text.strip(),})returnpagesif__name__=="__main__":pages=extract_pdf_text("manual_zh.pdf")print(f"共提取{len(pages)}页文本")

2. 调用翻译服务

这里以 PDFTranslator 的 API 为例(具体接口参数请参考官方文档),封装一个通用翻译函数:

importrequestsimporttime API_BASE="https://api.pdftranslator.org/v1"API_KEY="your_api_key_here"# 替换为你的API Keydeftranslate_text(text:str,target_lang:str,source_lang:str="zh")->str:"""调用PDFTranslator API翻译文本"""ifnottext.strip():return""payload={"text":text,"source_lang":source_lang,"target_lang":target_lang,"preserve_format":True,# 请求保留格式标记}headers={"Authorization":f"Bearer{API_KEY}","Content-Type":"application/json",}try:resp=requests.post(f"{API_BASE}/translate",json=payload,headers=headers,timeout=60,)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:str="output"):"""批量翻译产品手册到多语言"""output_dir=Path(output_dir)output_dir.mkdir(parents=True,exist_ok=True)pages=extract_pdf_text(pdf_path)base_name=Path(pdf_path).stemforlangintarget_langs:translated_pages=[]print(f"正在翻译到{lang}...")forpageinpages:translated=translate_text(page["text"],target_lang=lang)translated_pages.append({"page":page["page"],"text":translated,})time.sleep(0.5)# 避免请求过快# 保存为文本文件,后续可结合排版工具生成PDFout_file=output_dir/f"{base_name}_{lang}.txt"withopen(out_file,"w",encoding="utf-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_path="manual_zh.pdf",target_langs=["en","es","fr","de"],)

4. 记录翻译日志

importopenpyxlfromdatetimeimportdatetimedeflog_translation(log_file:str,records:list[dict]):"""记录翻译日志到Excel"""wb=openpyxl.Workbook()ws=wb.active ws.title="翻译日志"ws.append(["时间","源文件","目标语言","页数","状态"])forrinrecords:ws.append([r["time"],r["source"],r["lang"],r["pages"],r["status"],])wb.save(log_file)

四、进一步提升效果的建议

  1. 使用文件级翻译 API

如果翻译服务支持直接上传PDF并返回保留排版的译文PDF,优先使用文件级接口。这样可以避免手动提取文本后再还原排版的麻烦。

  1. 术语表对齐

产品手册里通常有大量固定术语。可以在翻译前准备术语表(glossary),在调用API时传入,保证"型号"“规格”"保修"等词翻译一致。

  1. 分块处理大文件

如果手册页数很多,可以按章节或页码范围分批翻译,降低单次请求失败的影响。

  1. 后处理校验

翻译完成后,建议写一个校验脚本,检查:

  • 输出页数是否和输入一致
  • 关键章节标题是否全部翻译
  • 表格行数是否一致

五、完整代码汇总

""" 批量翻译产品手册示例 依赖:pip install requests pdfplumber openpyxl """importtimeimportrequestsimportpdfplumberimportopenpyxlfrompathlibimportPathfromdatetimeimportdatetime API_BASE="https://api.pdftranslator.org/v1"API_KEY="your_api_key_here"defextract_pdf_text(pdf_path:str)->list[dict]:pages=[]withpdfplumber.open(pdf_path)aspdf:foridx,pageinenumerate(pdf.pages,start=1):text=page.extract_text()or""pages.append({"page":idx,"text":text.strip()})returnpagesdeftranslate_text(text:str,target_lang:str,source_lang:str="zh")->str:ifnottext.strip():return""payload={"text":text,"source_lang":source_lang,"target_lang":target_lang,"preserve_format":True,}headers={"Authorization":f"Bearer{API_KEY}","Content-Type":"application/json",}try:resp=requests.post(f"{API_BASE}/translate",json=payload,headers=headers,timeout=60)resp.raise_for_status()returnresp.json().get("translated_text","")exceptrequests.RequestExceptionase:print(f"翻译失败:{e}")return""deftranslate_manual(pdf_path:str,target_langs:list[str],output_dir:str="output"):output_dir=Path(output_dir)output_dir.mkdir(parents=True,exist_ok=True)pages=extract_pdf_text(pdf_path)base_name=Path(pdf_path).stem records=[]forlangintarget_langs:translated_pages=[]print(f"正在翻译到{lang}...")forpageinpages:translated=translate_text(page["text"],target_lang=lang)translated_pages.append({"page":page["page"],"text":translated})time.sleep(0.5)out_file=output_dir/f"{base_name}_{lang}.txt"withopen(out_file,"w",encoding="utf-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]):wb=openpyxl.Workbook()ws=wb.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_path="manual_zh.pdf",target_langs=["en","es","fr","de"],)

六、结语

用Python做PDF批量翻译的核心价值,不是替代翻译本身,而是把"重复上传、下载、归档"的流程自动化。结合 PDFTranslator 这类支持格式保留的翻译服务,可以在保证排版不乱的前提下,快速产出多语言版本的产品手册。

如果你也在做类似需求,建议先拿一份样本手册跑通流程,再批量扩展到全量文档。

标签:PDF翻译、Python自动化、AI翻译、批量翻译、开发者工具