资讯动态

BabelDOC 实战指南:基于 LLM 的 PDF 科学论文翻译与双语对照排版

发布时间:2026/9/15 15:46:25 来源:尧图企业网站定制
BabelDOC 实战指南基于 LLM 的 PDF 科学论文翻译与双语对照排版【免费下载链接】BabelDOCYet Another Document Translator项目地址: https://gitcode.com/GitHub_Trending/ba/BabelDOCBabelDOCYet Another Document Translator是一个开源的 PDF 科学论文翻译与双语对照库专注于保留原始版式的 PDF 翻译解析 PDF 的文本块、图片、表格等结构后借助 OpenAI 兼容的 LLM 完成翻译再重新渲染为单语或双语 PDF。本文以官方 README 为主线结合仓库源码CLI 入口、TranslationConfig、翻译管线、术语表与资产管理等模块完整讲解从安装、命令行翻译、全部高级参数到架构原理的实战细节读完即可上手把一篇英文论文翻译成中英对照的 PDF。项目概览与适用场景BabelDOC 的核心定位是PDF 科学论文翻译与双语对照库主要面向三类使用方式嵌入到其他程序中使用官方主要设计目标例如 Zotero 插件、自建 WebUI直接使用命令行工具完成简单翻译任务babeldoc命令调用 Python API注意BabelDOC 官方声明其所有 API 均为内部 API直接使用不受支持推荐通过 pdf2zh next 的high_level.do_translate_async_stream间接调用见下文 Python API 一节。项目支持的语言范围可参考 docs/supported_languages.md不依赖连字ligature的语言可获得良好支持部分依赖连字的语言如波兰语、法语、缅甸语基本可满足自读需求而完全依赖连字的语言如部分印度语言当前暂不支持官方正在开发连字支持。注意 README 同时提示当前项目主要聚焦英文到中文的翻译其他语言场景尚未充分测试2025.3.1 起补充了基础的英语目标语言支持主要目的是最小化单词内部的换行对应[0-9A-Za-z]这类单词正则更多语言的单词正则正在征集贡献。仓库本身是只读研究资源本文只介绍查看、安装、运行与配置方式。安装方式一从 PyPI 安装推荐官方推荐使用 uv 的 Tool 特性安装# 1. 先安装 uv 并按提示配置 PATH 环境变量 # 2. 安装 BabelDOC 并查看帮助 uv tool install --python 3.12 BabelDOC babeldoc --help安装后即可使用babeldoc命令。项目在 pyproject.toml 中声明了babeldoc babeldoc.main:cli作为命令行入口Python 版本要求为3.10,3.14许可证为 AGPL-3.0。运行时依赖包含configargparse参数与配置文件解析、pymupdfPDF 读写、openaiLLM 调用、onnxruntime文档布局模型推理、hyperscan术语表高速匹配等可选依赖还提供cudaonnxruntime-gpu与directml等加速选项。方式二从源码安装同样推荐用 uv 管理虚拟环境# clone 项目 git clone https://github.com/funstory-ai/BabelDOC cd BabelDOC # 安装依赖并运行 babeldoc uv run babeldoc --help提示无论哪种方式官方都建议输入文件使用绝对路径。首次运行时BabelDOC 会通过 babeldoc/assets/assets.py 自动下载所需资产文档布局 ONNX 模型、字体、CMap、tiktoken 缓存等并使用 SHA3-256 哈希校验文件完整性下载失败会按指数退避自动重试最多 3 次。快速开始命令行翻译使用 OpenAI 兼容接口翻译单个 PDFbabeldoc --openai --openai-model gpt-4o-mini --openai-base-url https://api.openai.com/v1 --openai-api-key your-api-key-here --files example.pdf一次翻译多个文件重复传入--filesbabeldoc --openai --openai-model gpt-4o-mini --openai-base-url https://api.openai.com/v1 --openai-api-key your-api-key-here --files example1.pdf --files example2.pdf源码安装时对应命令为uv run babeldoc --files ... --openai ...。从 babeldoc/main.py 的实现看命令行至少必须提供--openai翻译服务且使用 OpenAI 服务时必须提供 API key否则解析器会直接报错退出。注意README 明确说明该 CLI 主要用于调试目的。虽然终端用户可以用它翻译文件但官方不为此提供技术支持终端用户应优先使用在线服务Immersive Translate BabelDOC每月有免费额度或自行部署 PDFMathTranslate 2.0提供 WebUI 和更多翻译服务。README 中未列出的参数属于维护者专用的调试选项请勿使用。语言选项参数别名说明默认值--lang-in-li源语言代码en--lang-out-lo目标语言代码zh两点提示来自官方 README项目目前主要聚焦英译中其他语言场景未经充分测试2025.3.1 更新后加入了基础英语目标语言支持主要用于最小化单词内部换行[0-9A-Za-z]更多语言的单词正则表达式正在社区征集中。翻译器的语言映射在 babeldoc/translator/translator.py 的BaseTranslator中完成lang_map会做小写归一化因此语言代码大小写不敏感。PDF 处理选项--files一个或多个输入 PDF 文档路径。--pages,-p指定要翻译的页面例如1,2,1-,-3,3-5不设置则翻译全部页面。底层由 translation_config.py 的parse_pages解析为(start, end)区间列表-1表示无上界should_translate_page负责逐页判定。--split-short-lines强制把短行拆分成不同段落可能导致排版变差甚至出现 bug。--short-line-split-factor短行拆分阈值因子默认0.8。实际阈值 当前页所有行长度的中位数 × 该因子。--skip-clean跳过 PDF 清理步骤。--dual-translate-first双语 PDF 模式下译文页在前默认原文页在前。--disable-rich-text-translate禁用富文本翻译有助于提升某些 PDF 的兼容性。--enhance-compatibility一键启用全部兼容性增强选项等价于--skip-clean --dual-translate-first --disable-rich-text-translate。--use-alternating-pages-dual双语 PDF 采用交替页模式——原文页与译文页交替排列默认关闭即原文与译文同页并排显示。--watermark-output-mode控制水印输出模式watermarked默认为翻译后的 PDF 加水印、no_watermark不加、both两种都输出。该枚举在 translation_config.py 中定义为WatermarkOutputMode。--max-pages-per-part分拆翻译时每部分的最大页数不设置则不分拆。大文档拆成多个小部分分别翻译后会自动合并回一份见下文分拆翻译。--no-watermark已废弃请改用--watermark-output-modeno_watermark。--translate-table-text翻译表格文字实验性默认False。--formular-font-pattern/--formular-char-pattern用于识别公式文本的字体模式 / 字符模式默认None。--show-char-box显示字符包围框仅调试默认False。--skip-scanned-detection跳过扫描文档检测默认False。使用分拆翻译时只有第一部分会执行检测。--ocr-workaroundOCR 变通方案默认False。仅适用于黑字白底的文档启用后会在译文下方添加白色矩形块遮盖原文并把所有文字强制为黑色。启用该选项会自动同时开启--skip-scanned-detection。--auto-enable-ocr-workaround自动启用 OCR 变通默认False。若文档被检测为重度扫描件将尝试开启 OCR 处理并跳过后续扫描检测。该参数与--ocr-workaround、--skip-scanned-detection存在重要交互详见下文重要交互说明。--primary-font-family覆盖译文主字体族可选serif衬线、sans-serif无衬线、script手写/斜体不指定时根据原文属性自动选字体。该取值在TranslationConfig中有显式断言校验。--only-include-translated-page输出 PDF 中只包含翻译页仅在配合--pages时有效默认False。--merge-alternating-line-numbers启用交替行号版式后处理——当layout_id和xobj_id匹配、行号段为独立段落且内容仅为 ASCII 数字与空格时合并其两侧的相邻文本段落默认开启可用--no-merge-alternating-line-numbers关闭。--skip-form-render跳过表单渲染默认False。--skip-curve-render跳过曲线渲染默认False。--only-parse-generate-pdf只解析 PDF 并生成输出 PDF、不翻译默认False。会跳过布局分析、段落查找、样式处理与翻译等全部翻译相关步骤适合用来测试 PDF 解析与重建功能。此时管线会自动移除所有翻译阶段见 high_level.py 的get_translation_stage。--remove-non-formula-lines移除段落区域中不属于公式的装饰性线条同时保护图片/表格区域中的线条默认False用于清理干扰文本流的装饰元素。--non-formula-line-iou-threshold移除非公式线条时检测段落重叠的 IoU 阈值默认0.9值越大越保守、移除越少。--figure-table-protection-threshold移除非公式线条时保护图片/表格区域线条的 IoU 阈值默认0.9值越大对图/表结构元素保护越强。--rpc-doclayout文档布局分析 RPC 服务地址默认None。从 main.py 看还支持--rpc-doclayout2~--rpc-doclayout8等多个候选版本按顺序回退全部未设置时加载本地 ONNX 模型DocLayoutModel.load_onnx()。--working-dir翻译工作目录不设置则使用临时目录。--no-auto-extract-glossary禁用自动术语提取默认启用--save-auto-extracted-glossary将自动提取的术语表保存到指定 CSV 文件默认不保存。兼容性提示官方 README--skip-clean与--dual-translate-first都可能提升部分 PDF 阅读器的兼容性--disable-rich-text-translate通过简化翻译输入也能提升兼容性但使用--skip-clean会导致输出文件体积变大遇到兼容性问题先尝试--enhance-compatibility大文档用--max-pages-per-part拆小后翻译再自动合并确认文档不是扫描件时用--skip-scanned-detection加速扫描 PDF 用--ocr-workaround填充背景当前假设背景纯白、文字纯黑且会自动启用--skip-scanned-detection。分拆翻译的底层机制--max-pages-per-part的实现位于 high_level.py 的do_translate通过SplitManager.determine_split_points计算切分点为每个部分创建独立配置part_config将原 PDF 按页区间抽取为临时输入文件逐部分串行翻译其中只有第一部分执行扫描检测只有第一部分输出带水印的 PDF各部分的工作目录与输出目录隔离最后通过ResultMerger.merge_results合并回完整文档。拆分策略由TranslationConfig.create_max_pages_per_part_split_strategy创建对应 split_manager.py 的PageCountStrategy。翻译服务选项--qps翻译服务每秒查询数QPS上限默认4。底层使用 translator.py 中基于漏桶算法、线程安全且使用单调时钟monotonic time的RateLimiter实现。--ignore-cache忽略翻译缓存强制重新翻译。默认情况下BaseTranslator.translate会先查 peewee 持久化缓存TranslationCache命中则直接返回。--no-dual不输出双语 PDF。--no-mono不输出单语 PDF。--min-text-length参与翻译的最小文本长度默认5。--openai使用 OpenAI 兼容接口翻译默认False为必选翻译服务。--custom-system-prompt自定义翻译系统提示词。典型用途是给 Qwen 3 附加/no_think指令例如--custom-system-prompt /no_think You are a professional, authentic machine translation engine.--add-formula-placehold-hint为翻译添加公式占位符提示当前不推荐可能影响翻译质量默认False。--disable-same-text-fallback当 LLM 输出与输入文本相同时禁用原样回退翻译默认False。--pool-max-workers内部任务处理池的最大工作线程数未指定时默认取 QPS 值。该参数直接设置线程数取代了以前基于 QPS 的动态计算。在TranslationConfig.__init__中可见其默认逻辑pool_max_workers pool_max_workers if pool_max_workers is not None else qps。--no-auto-extract-glossary禁用自动术语提取默认启用配置文件中对应auto_extract_glossary false。官方提示目前仅支持 OpenAI 兼容的 LLM更多翻译器请使用 PDFMathTranslate 2.0推荐使用与 OpenAI 兼容性强的模型如glm-4-flash、deepseek-chat等尚未针对 Bing/Google 等传统翻译引擎优化建议使用 LLM可通过 litellm 接入多种模型--custom-system-prompt主要用于在提示词中加入 Qwen 3 的/no_think指令。翻译管线中的 LLM 判定从 high_level.py 的_do_translate_single可以看到翻译器若实现了do_llm_translate方法则使用ILTranslatorLLMOnly否则回退到传统ILTranslator。自动术语提取阶段AutomaticTermExtractor使用独立的term_extraction_translator默认与翻译器相同可通过--openai-term-extraction-*系列参数单独指定模型/地址/密钥其 token 用量会在结束日志中单独统计。OpenAI 特定选项参数说明默认值--openai-model使用的 OpenAI 模型gpt-4o-mini--openai-base-urlOpenAI API 的基础 URL无--openai-api-keyOpenAI 服务的 API key别名-k无--enable-json-mode-if-requested对 OpenAI 请求启用 JSON 模式False--term-pool-max-workers自动术语提取专用工作线程数未指定时默认取--pool-max-workers该值未设置时又默认取 QPS 值无此外 main.py 还支持--openai-term-extraction-model/--openai-term-extraction-base-url/--openai-term-extraction-api-key为术语提取单独指定模型未设置时回退到普通翻译参数、--send-dashscope-header发送 DashScope 数据检查头以关闭输入/输出检查、--no-send-temperature不发送 temperature 参数、--openai-reasoning在请求体 reasoning 字段中附加内容。官方提示本工具支持任何 OpenAI 兼容的 API 端点只需设置正确的 base URL 与 API key例如自建服务https://xxx.custom.xxx/v1对于 Ollama 等本地模型API key 可以填任意值如--openai-api-key a。术语表选项Glossary--glossary-files逗号分隔的术语表 CSV 文件路径列表。规则如下每个 CSV 文件需包含source、target列以及可选的tgt_lng列source列存放原文术语target列存放目标语言译文tgt_lng可选指定该条目适用的目标语言如zh-CN、en-US若某条目提供了tgt_lng则仅当其归一化后与--lang-out指定的整体目标语言归一化后一致时才会被加载使用归一化规则为转小写并把连字符-替换为下划线_若条目省略tgt_lng则该条目对任意--lang-out均适用每个术语表的名称由其文件名不含.csv后缀决定该名称会出现在 LLM 提示词中翻译时系统会把输入文本与已加载术语表进行比对若在当前文本段中命中某术语表的词条就把该术语表连同相关词条注入给语言模型的提示词并附带必须遵守的指令。仓库提供了示例文件 docs/example/demo_glossary.csv内容如下注意a,a等含逗号、引号的转义写法source,target,tgt_lng AutoML,自动ML,zh-CN a,a,a,zh-CN ,,zh-CN底层实现在 babeldoc/glossary.pyGlossary.from_csv会用 chardet 自动探测文件编码按tgt_lng过滤条目加载时对重复的归一化source去重并基于 hyperscan 编译正则数据库每 20000 条一个分片大小写不敏感实现高速文本命中检测get_active_entries_for_text。--lang-out为zh时示例中的zh-CN条目经归一化zh-cn后会被视为匹配而加载。另外自动术语提取会通过SharedContextCrossSplitPart见 translation_config.py跨分拆部分共享、按多数投票去重Counter.most_common生成auto_extracted_glossary。输出控制--output,-o译文输出目录不设置则使用当前工作目录。从 main.py 看目录不存在时会自动创建。--debug开启调试日志级别并把详细的中间结果导出到~/.cache/babeldoc/working缓存根目录定义在 babeldoc/const.py 的CACHE_FOLDER。调试模式下_do_translate_single会写出input.decompressed.pdf、create_il.debug.json、layout_generator.json、paragraph_finder.json、il_translated.json、typsetting.json等中间产物便于逐阶段排查。--report-interval进度上报间隔秒默认0.1。CLI 进度条由 main.py 的create_progress_handler渲染rich 或 tqdm事件流由async_translate通过ProgressMonitor产生。通用选项--warmup仅下载并校验所需资产后即退出默认False。适合在正式翻译前预取模型与字体或在 CI 中验证环境就绪。离线资产管理--generate-offline-assets在指定目录生成离线资产包——一个包含全部所需模型和字体的 zip 文件。--restore-offline-assets从指定文件恢复离线资产包解压其中的模型与字体。官方说明离线资产包适合无网络环境或在多台机器上加速安装在一台有网的机器上执行一次babeldoc --generate-offline-assets /path/to/output/dir然后分发该包在目标机器上执行babeldoc --restore-offline-assets /path/to/offline_assets_*.zip离线资产包文件名不可修改因为文件列表哈希被编码在名称中若传给--restore-offline-assets的是目录路径工具会自动在该目录中查找正确的离线资产包文件包内含文档处理所需的全部字体与模型确保不同环境结果一致打包与恢复过程中所有资产都会用 SHA3-256 哈希校验完整性对应 assets.py 的verify_file若要在完全隔离air-gapped环境部署请先在可联网的机器上生成资产包。配置文件TOML--config,-c配置文件路径使用TOML格式由configargparse.TomlConfigParser([babeldoc])解析见 main.py键对应 CLI 参数下划线_与连字符-均可。完整示例[babeldoc] # Basic settings debug true lang-in en-US lang-out zh-CN qps 10 output /path/to/output/dir # PDF processing options split-short-lines false short-line-split-factor 0.8 skip-clean false dual-translate-first false disable-rich-text-translate false use-alternating-pages-dual false watermark-output-mode watermarked # Choices: watermarked, no_watermark, both max-pages-per-part 50 # Automatically split the document for translation and merge it back. only_include_translated_page false # Only include translated pages in the output PDF. Effective only when pages is used. # no-watermark false # DEPRECATED: Use watermark-output-mode instead skip-scanned-detection false # Skip scanned document detection for faster processing auto_extract_glossary true # Set to false to disable automatic term extraction formular_font_pattern # Font pattern for formula text formular_char_pattern # Character pattern for formula text show_char_box false # Show character bounding boxes (debug) ocr_workaround false # Use OCR workaround for scanned PDFs rpc_doclayout # RPC service host for document layout analysis working_dir # Working directory for translation auto_enable_ocr_workaround false # Enable automatic OCR workaround for scanned PDFs. See docs for interaction with ocr_workaround and skip_scanned_detection. skip_form_render false # Skip form rendering (default: False) skip_curve_render false # Skip curve rendering (default: False) only_parse_generate_pdf false # Only parse PDF and generate output PDF without translation (default: False) remove_non_formula_lines false # Remove non-formula lines from paragraph areas (default: False) non_formula_line_iou_threshold 0.2 # IoU threshold for paragraph overlap detection (default: 0.2) figure_table_protection_threshold 0.3 # IoU threshold for figure/table protection (default: 0.3) # Translation service openai true openai-model gpt-4o-mini openai-base-url https://api.openai.com/v1 openai-api-key your-api-key-here enable-json-mode-if-requested false # Enable JSON mode when requested (default: false) disable_same_text_fallback false # Disable fallback translation when LLM output matches input text (default: false) pool-max-workers 8 # Maximum worker threads for task processing (defaults to QPS value if not set) # Glossary Options (Optional) # glossary-files /path/to/glossary1.csv,/path/to/glossary2.csv # Output control no-dual false no-mono false min-text-length 5 report-interval 0.5 # Offline assets management # Uncomment one of these options as needed: # generate-offline-assets /path/to/output/dir # restore-offline-assets /path/to/offline_assets_package.zipPython API官方推荐在 Python 中通过 pdf2zh next 的high_level.do_translate_async_stream函数调用 BabelDOC该函数会异步产出进度事件可驱动进度条与取消逻辑。警告BabelDOC 的所有 API 都应视为内部 API任何直接使用 BabelDOC 的行为均不受官方支持。若要在自有服务中集成建议使用上述 pdf2zh next 入口当前仓库的 babeldoc/format/pdf/high_level.py 提供的translate同步与async_translate异步事件流实现可作参考。架构与设计背景解析/渲染两阶段管线README 将 PDF 解析/翻译问题划分为两个主要阶段Parsing解析获取 PDF 的结构如文本块、图片、表格等Rendering渲染把结构渲染成新的 PDF 或其他格式。业界一些服务如 mathpix、Doc2X、MinerU、PDFMathTranslate会先把 PDF 解析成 XML 之类的结构再用单一栏阅读顺序类似 layoutreader重排渲染代价是原始版式信息丢失也有人用 Adobe PDF 解析器生成保留原结构的 Word 文档但成本较高且 PDF/Word 在移动端阅读体验不佳。BabelDOC 的差异化方案是提供一个中间表示Intermediate RepresentationIL承载解析器的输出结果并可从该表示渲染出新的 PDF 或其他格式整个管线是插件化系统任何人都可以接入新的模型、OCR、渲染器等。从源码看该中间表示即 babeldoc/format/pdf/document_il/ 下的 IL 模型il_version_1.py及配套的 XSD/RNC/RNG Schema翻译管线在 high_level.py 的TRANSLATE_STAGES中定义包括解析 PDF 并创建中间表示权重 14.12扫描文件检测DetectScannedFile2.45布局解析LayoutParser14.03表格解析TableParser1.0仅启用表格翻译时段落查找ParagraphFinder6.26公式与样式解析StylesAndFormulas1.66自动术语提取AutomaticTermExtractor30.0默认启用段落翻译ILTranslator/ILTranslatorLLMOnly46.96排版Typesetting4.71字体映射FontMapper0.61生成绘制指令PDFCreater1.96字体子集化SUBSET_FONT0.92保存 PDFSAVE_PDF6.34各阶段实现位于 document_il/midend/渲染由 document_il/backend/pdf_creater.py 完成。翻译结束后还会执行 CMAP 重建fix_cmap、元数据标记add_metadata会在 producer 中写入 Translation_generated_by_AI,please_carefully_discern 以便识别、并拒绝二次翻译已翻译文件以及目录迁移migrate_toc交替页模式除外。路线图与 1.0 质量目标官方 Roadmap添加线条支持添加表格支持添加跨页/跨栏段落支持更高级的排版功能大纲Outline支持其他……1.0 版本的首要目标是完成从《PDF Reference, Version 1.7》到简体中文、繁体中文、日语、西班牙语四个语言版本的翻译并满足两项硬性指标布局错误率低于 1%、内容丢失率低于 1%。版本号说明项目采用 Semantic Versioning语义化版本 Pride Versioning 的组合版本号格式为0.MAJOR.MINORMAJOR发生 API 不兼容变更或实现了值得骄傲proud的改进时 1MINOR发生任何 API 兼容变更时 1。其中API 兼容性主要指与 pdf2zh next 的兼容性。当前仓库版本为 0.6.2见 pyproject.toml 与 babeldoc/main.py 的__version__。已知问题官方 README 列出的已知问题作者与参考文献部分的解析错误——翻译后会被合并为一个段落不支持线条lines不支持首字下沉drop caps过大的页面会被跳过。重要交互说明--auto-enable-ocr-workaround官方文档专门强调当--auto-enable-ocr-workaround为true命令行或配置文件均可时存在如下两阶段交互逻辑与 translation_config.py 及 high_level.py 的DetectScannedFile阶段对应初始化阶段TranslationConfig会把ocr_workaround和skip_scanned_detection强制置为false——即使你同时传了--ocr-workaround或--skip-scanned-detection也会被覆盖扫描检测阶段DetectScannedFile若文档被识别为重度扫描件例如超过 80% 的页面为扫描页且auto_enable_ocr_workaround为true系统会尝试把ocr_workaround与skip_scanned_detection都设为true若文档未被识别为重度扫描件则初始化阶段强制写入的false值会保持生效除非被其他逻辑改变。简言之--auto-enable-ocr-workaround把是否启用 OCR 处理的决定权交给系统它会根据检测结果覆盖手动设置的--ocr-workaround与--skip-scanned-detection。从源码看该决策结果通过SharedContextCrossSplitPart.auto_enabled_ocr_workaround跨分拆部分共享并在每个部分翻译前统一应用。如何贡献BabelDOC 目前采用维护者主导maintainer-led的开发模式欢迎提交 bug 报告、可复现的 PDF、文档修正和小型兼容性修复涉及解析、渲染、翻译或服务集成行为的改动请先开 issue 讨论再提交 PR。参与社区互动需遵守 docs/CODE_OF_CONDUCT.md活跃贡献者可获得 Immersive Translation 月度 Pro 会员兑换码详见 docs/CONTRIBUTOR_REWARD.md。在致谢列表中项目明确感谢了 PDFMathTranslate、DocLayout-YOLO、pdfminer、PyMuPDF、Asynchronize、PriorityThreadPoolExecutor 等上游项目——这些依赖在 pyproject.toml 中均有对应例如 PDF 解析使用自带的 pdfminer 运行时与 PyMuPDF布局检测基于 DocLayout-YOLO 导出的 ONNX 模型异步编排使用babeldoc/asynchronize/。仓库内还提供了 docs/ImplementationDetails 系列实现细节文档PDF 解析、IL 翻译、段落查找、排版、样式与公式等以及 docs/intro-to-pdf-object.md 这类 PDF 对象入门读物适合想深入理解翻译管线内部原理的读者继续阅读。BabelDOC 仍处于早期开发阶段部分环节还不够完善但保留原版式的 LLM 论文翻译这一路径已经可以通过babeldoc命令行开箱即用安装、配置好 OpenAI 兼容端点一行命令即可得到单语与双语对照 PDF。【免费下载链接】BabelDOCYet Another Document Translator项目地址: https://gitcode.com/GitHub_Trending/ba/BabelDOC创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价