该程式利用 Python 开发,结合多个强大的文本处理与翻译工具,为用户提供了一个从 PDF 论文到翻译后 Word 文档的全自动流程。主要适用于需要快速掌握大量英文资料、文献或技术报告的场景,特别是学术研究者、专业技术人员或需要跨语言工作的从业者。


  • 建置 Python 环境安装 Python,确保已包含 pip 工具。
  • 创建资料夹英文 PDF 资料夹:放入需要翻译的 PDF 文件(例如 englishpdf 资料夹)。翻译后资料夹:用于存放翻译完成的 Word 文件(例如 cn 资料夹,预设为空)。
  • 在 CMD 中安装必要模组执行以下命令依次安装所需的 Python 套件:
  • C:/Program Files/Python312/python.exe" -m pip install googletrans==4.0.0-rc1
    C:/Program Files/Python312/python.exe" -m pip install opencc-python-reimplemented
    C:/Program Files/Python312/python.exe" -m pip install python-docx
    C:/Program Files/Python312/python.exe" -m pip install pdfplumber

  • 修改程式内路径(更新程式中以下路径为你的资料夹位置)en_pdf_folder = r"你的英文 PDF 资料夹路径"cn_word_folder = r"你的翻译后文档存放路径"
  • 执行程式翻译完成后,检查 cn 资料夹中的 Word 文件即可。

    • 运行流程
  • 初始化环境与资料夹设定英文 PDF 存放资料夹和翻译后文件的存放资料夹,如果翻译后的资料夹不存在,程式会自动建立。
  • 初始化翻译工具使用 Google 翻译(googletrans)进行英文到中文的翻译。使用 OpenCC (opencc) 将翻译结果由简体转为繁体中文。
  • 逐档处理 PDF遍历 en_pdf_folder 资料夹内的每个 PDF 文件,为每个 PDF 设定对应的翻译后 Word 文件的存放路径。
  • PDF 翻译到 Word 的完整流程文本提取:利用 pdfplumber 提取 PDF 文件中的文字内容。分段处理:将长文本切分成不超过 3000 字元的小段,避免 Google 翻译的限制。逐段翻译:对每段文字进行翻译,并透过 OpenCC 转为繁体中文。合併结果:将翻译后的所有段落合併为一整篇文字。保存为 Word 文件:将翻译完成的文本保存为 Word 文件,并存入 cn_word_folder。
  • 错误处理与重试机制若翻译过程中出现问题,程式会重试最多 3 次,并在重试间隔等待 2 秒。若多次尝试后仍失败,该段文本将保留原文,程式继续处理下一段或下一文件。
  • 完成与输出翻译完成后,显示已成功处理的档案及其存放路径。
    • 含式解释

    PDF 文字撷取
    import pdfplumber

    翻译
    from googletrans import Translator
    from opencc import OpenCC

    Word 文件处理
    from docx import Document

    将长字串分割成多个小段的函式。适用于将大段文字分割成较小的部分,避免一次翻译过多字元而导致翻译工具失败。
    def chunk_text(text, chunk_size=3000):

    翻译单段文字的函式。支援多次重试与简繁体转换,保证翻译结果的準确性和稳定性。
    def translate_chunk(chunk, translator, opencc, max_retry=3, wait_secs=2):

    提取 PDF 文件文字内容的函式。通过 pdfplumber 从 PDF 文件的每一页提取文字,并将其合併为一个完整的文本。
    def read_pdf_text(pdf_path):

    将翻译后的文字内容保存为 Word 文件的函式。每一行文字将作为 Word 文件中的一段。
    def save_translated_to_word(translated_text, output_word_path):

    完整的 PDF 翻译至 Word 文件的流程。包含提取文本、分段翻译、简繁转换,以及生成翻译后的 Word 文件。
    def translate_pdf_to_word(pdf_path, output_word_path, translator, opencc):

    主程式入口。设定资料夹路径,初始化翻译工具,并遍历资料夹内的所有 PDF 文件,执行翻译与保存流程。
    def main():

    • 完整程式

    import os
    import time
    import pdfplumber
    from googletrans import Translator
    from opencc import OpenCC
    from docx import Document

    def chunk_text(text, chunk_size=3000):
    chunks = []
    start = 0
    while start < len(text):
    end = start + chunk_size
    chunks.append(text[start:end])
    start = end
    return chunks

    def translate_chunk(chunk, translator, opencc, max_retry=3, wait_secs=2):
    for attempt in range(max_retry):
    try:
    result = translator.translate(chunk, src=\'en\', dest=\'zh-TW\')
    translated_text = result.text
    translated_text = opencc.convert(translated_text)
    return translated_text
    except Exception as e:
    print(f"翻译失败: {e}")
    if attempt < max_retry - 1:
    print(f"稍等 {wait_secs} 秒后重试...")
    time.sleep(wait_secs)
    else:
    print("多次尝试仍失败,保留原文。")
    return chunk

    def read_pdf_text(pdf_path):
    all_text_list = []
    with pdfplumber.open(pdf_path) as pdf:
    for page in pdf.pages:
    page_text = page.extract_text()
    if page_text:
    all_text_list.append(page_text)
    entire_text = "\\n".join(all_text_list)
    return entire_text

    def save_translated_to_word(translated_text, output_word_path):
    doc = Document()
    for line in translated_text.split("\\n"):
    doc.add_paragraph(line)
    doc.save(output_word_path)

    def translate_pdf_to_word(pdf_path, output_word_path, translator, opencc):
    entire_text = read_pdf_text(pdf_path)
    print(f"[DEBUG] 原文长度: {len(entire_text)}")
    text_chunks = chunk_text(entire_text, 3000)
    translated_results = []
    for chunk in text_chunks:
    t_chunk = translate_chunk(chunk, translator, opencc)
    translated_results.append(t_chunk)
    final_text = "\\n".join(translated_results)
    print(f"[DEBUG] 翻译后长度: {len(final_text)}")
    save_translated_to_word(final_text, output_word_path)

    def main():
    en_pdf_folder = r"C:\\Users\\chenchen\\Desktop\\chenchen_code\\pdf_file_translation\\englishpdf"
    cn_word_folder = r"C:\\Users\\chenchen\\Desktop\\chenchen_code\\pdf_file_translation\\cn"

    if not os.path.exists(cn_word_folder):
    os.makedirs(cn_word_folder)

    translator = Translator()
    opencc = OpenCC(\'s2t\')

    for filename in os.listdir(en_pdf_folder):
    if filename.endswith(".pdf"):
    pdf_path = os.path.join(en_pdf_folder, filename)
    word_filename = os.path.splitext(filename)[0] + ".docx"
    output_word_path = os.path.join(cn_word_folder, word_filename)

    print(f"正在处理: {filename}")
    try:
    translate_pdf_to_word(pdf_path, output_word_path, translator, opencc)
    print(f"翻译完成,保存至: {output_word_path}")
    except Exception as e:
    print(f"处理失败: {filename}, 错误: {e}")

    if __name__ == "__main__":
    main()