PDF翻译服务 API文档
这是一个PDF文件翻译服务,用户上传PDF文件并指定源语言和目标语言,系统会自动将PDF翻译成目标语言的PDF文件。
功能特性
- 支持PDF文件上传
- 支持使用远程PDF
- 支持多种语言互译
- 翻译后的PDF高保真还原
- RESTful API接口
申请API Key
在使用API之前,您需要先申请API Key:
API接口
1. 上传PDF文件
接口地址: POST http://ltranslate.cn/translate-pdf/api/v1/upload
请求参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| file | File | 是 | PDF文件(表单文件) |
| source-lang | String | 是 | 源语言代码(支持的语言列表) |
| target-lang | String | 是 | 目标语言代码(支持的语言列表 |
| apikey | String | 是 | 创建项目时生成的API Key |
| url | String | 否 | 创建项目时填写的网站域名 |
响应示例:
{
"code": 200,
"message": "文件上传成功,翻译任务已创建",
"data": {
"task_id": 123
}
}
2. 远程下载PDF文件
接口地址: POST http://ltranslate.cn/translate-pdf/api/v1/remote-pdf
请求参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| source-lang | String | 是 | 源语言代码 |
| target-lang | String | 是 | 目标语言代码 |
| apikey | String | 是 | API密钥 |
| pdf_url | String | 是 | 远程PDF文件的URL地址 |
请求示例:
curl -X POST "http://ltranslate.cn/translate-pdf/api/v1/remote-pdf" \
-F "source-lang=en" \
-F "target-lang=zh-cn" \
-F "pdf_url=https://example.com/document.pdf" \
-F "apikey=your-api-key"
成功响应:
{
"code": 200,
"message": "远程PDF文件下载成功,翻译任务已创建",
"data": {
"task_id": 12345
}
}
错误响应:
{
"code": 400,
"message": "下载PDF文件失败: 网络错误"
}
3. 查询任务状态
接口地址: GET http://ltranslate.cn/translate-pdf/api/v1/task/{id}
请求头:
apikey: 用户API Key(必需)
成功响应示例:
{
"code": 200,
"message": "获取成功",
"data": {
"task_id": 123,
"filename": "document.pdf",
"status": 2,
"source_lang": "zh-cn",
"target_lang": "en",
"create_time": 1703123456,
"result": "http://ltranslate.cn/translate-pdf/uploads/document_translated_20231221123456.pdf"
}
}
失败响应示例(HTTP 500):
{
"code": 500,
"message": "PDF转HTML失败: 转换超时",
"data": {
"task_id": 123,
"filename": "document.pdf",
"status": 3,
"source_lang": "zh-cn",
"target_lang": "en",
"create_time": 1703123456
}
}
状态说明:
- 0: 等待中
- 1: 进行中
- 2: 转换成功
- 3: 转换失败
4. 获取用户任务列表
接口地址: GET http://ltranslate.cn/translate-pdf/api/v1/tasks
请求头:
apikey: 用户API Key(必需)
请求参数:
| 参数名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| page | Integer | 1 | 页码 |
| page_size | Integer | 10 | 每页数量(最大100) |
使用Web界面演示
启动服务后,访问以下地址打开Web演示界面:
访问地址: http://ltranslate.cn/assets/translate-pdf.html
Web界面功能:
- 📁 文件上传:支持PDF文件拖拽上传
- 🌍 语言选择:支持多种语言互译
- 🔑 API Key配置:可配置和管理API密钥
- 📊 实时进度:显示翻译处理进度
- 📥 一键下载:完成后直接下载翻译结果
下载翻译结果
任务完成后,result字段会返回完整的下载URL,用户可以直接通过该URL下载翻译后的PDF文件。
示例下载:
curl -O http://ltranslate.cn/translate-pdf/uploads/document_translated_20231221123456.pdf
代码示例
# 上传PDF文件
curl -X POST "http://ltranslate.cn/translate-pdf/api/v1/upload" \
-F "file=@document.pdf" \
-F "source-lang=zh-cn" \
-F "target-lang=en" \
-F "apikey=your-api-key" \
-F "url=http://your-domain.com"
# 查询任务状态
curl -X GET "http://ltranslate.cn/translate-pdf/api/v1/task/123" \
-H "apikey: your-api-key"
<?php
// 上传PDF文件
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://ltranslate.cn/translate-pdf/api/v1/upload');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$postData = [
'file' => new CURLFile('document.pdf'),
'source-lang' => 'zh-cn',
'target-lang' => 'en',
'apikey' => 'your-api-key',
'url' => 'http://your-domain.com'
];
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
if ($result['code'] == 200) {
$taskId = $result['data']['task_id'];
echo "任务创建成功,任务ID: " . $taskId;
}
?>
package main
import (
"bytes"
"fmt"
"io/ioutil"
"mime/multipart"
"net/http"
"os"
)
func uploadPDF() error {
file, err := os.Open("document.pdf")
if err != nil {
return err
}
defer file.Close()
var requestBody bytes.Buffer
writer := multipart.NewWriter(&requestBody)
writer.CreateFormFile("file", "document.pdf")
_, err = writer.WriteField("source-lang", "zh-cn")
if err != nil {
return err
}
writer.WriteField("target-lang", "en")
writer.WriteField("apikey", "your-api-key")
writer.WriteField("url", "http://your-domain.com")
writer.Close()
req, err := http.NewRequest("POST", "http://ltranslate.cn/translate-pdf/api/v1/upload", &requestBody)
if err != nil {
return err
}
req.Header.Set("Content-Type", writer.FormDataContentType())
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
return err
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return err
}
fmt.Println("Response:", string(body))
return nil
}
func main() {
err := uploadPDF()
if err != nil {
fmt.Println("Error:", err)
}
}
import requests
import json
def upload_pdf():
url = "http://ltranslate.cn/translate-pdf/api/v1/upload"
files = {
'file': open('document.pdf', 'rb')
}
data = {
'source-lang': 'zh-cn',
'target-lang': 'en',
'apikey': 'your-api-key',
'url': 'http://your-domain.com'
}
response = requests.post(url, files=files, data=data)
result = response.json()
if result['code'] == 200:
task_id = result['data']['task_id']
print(f"任务创建成功,任务ID: {task_id}")
return task_id
else:
print(f"上传失败: {result['message']}")
return None
def check_task_status(task_id):
url = f"http://ltranslate.cn/translate-pdf/api/v1/task/{task_id}"
headers = {
'apikey': 'your-api-key'
}
response = requests.get(url, headers=headers)
result = response.json()
if result['code'] == 200:
data = result['data']
print(f"任务状态: {data['status']}")
if data['status'] == 2:
print(f"下载链接: {data['result']}")
return data
else:
print(f"查询失败: {result['message']}")
return None
if __name__ == "__main__":
task_id = upload_pdf()
if task_id:
check_task_status(task_id)
注意事项
- 文件大小限制:50MB
- 支持的文件格式:PDF
- API Key需要预先分配
- 翻译过程可能需要几分钟时间
错误码说明
| 错误码 | 说明 |
|---|---|
| 200 | 成功 |
| 400 | 请求参数错误 |
| 401 | API Key无效 |
| 403 | 无权限 |
| 404 | 资源不存在 |
| 500 | 服务器内部错误 |
常见问题
Q: 如何获取API Key?
A: 请访问 http://manage.ltranslate.cn/ 注册账号并创建项目后获取API Key。
Q: 支持哪些语言?
A: 支持多种语言互译,包括中文、英文、日文、韩文、法文、德文、西班牙文等主流语言,具体可查看(支持的语言列表)。
Q: 翻译一个PDF文件需要多长时间?
A: 翻译时间取决于文件大小和复杂程度,一般需要几分钟到十几分钟不等。
Q: 如何处理翻译失败的情况?
A: 可以通过查询任务状态接口获取失败原因,常见失败原因包括文件损坏、格式不支持等。
Q: 翻译后的文件会保存多久?
A: 翻译后的文件会保存7天,请及时下载保存。