如何使用PHP与Curl调用谷歌云翻译API翻译PDF文档
如何使用PHP与Curl调用谷歌云翻译API翻译PDF文档
嘿,我来帮你搞定这个问题~你之前写的文本翻译代码没问题,但处理PDF得用谷歌云翻译的文档翻译接口(属于V3版本API,V2不支持文档翻译),流程和文本翻译不太一样。我给你详细拆解一下,包括同步处理小PDF(直接返回内容)和异步处理大PDF的方案,还有你关心的“能不能直接接收文件内容”的问题。
首先,先明确:谷歌云翻译API处理PDF有两种模式:
- 同步模式:适合10MB以下的小文件,可以直接上传文件字节流,翻译完成后直接返回翻译后的文件内容(base64编码),不用依赖云存储。
- 异步模式:适合10MB以上的大文件,需要先把文件上传到谷歌云存储(GCS),翻译后的文件会保存到你指定的GCS路径,之后再从GCS下载。
同步模式:直接翻译小PDF并获取内容
下面是完整的PHP/Curl代码,直接处理本地PDF,翻译后保存成本地文件:
function _translate_pdf() { // 替换成你的信息 $apiKey = '你的谷歌云API密钥'; $projectId = '你的谷歌云项目ID'; $location = 'us-central1'; // 可选其他支持的区域,比如europe-west1 $sourceLang = 'en'; $targetLang = 'fr'; $localPdfPath = 'path/to/your/source.pdf'; // 本地源PDF路径 // 读取PDF文件并转成base64编码(接口要求的格式) $pdfRawContent = file_get_contents($localPdfPath); if (!$pdfRawContent) { echo '无法读取本地PDF文件!'; return; } $base64Pdf = base64_encode($pdfRawContent); // 构造API请求地址 $apiUrl = "https://translation.googleapis.com/v3/projects/{$projectId}/locations/{$location}/documents:translate?key={$apiKey}"; // 构造请求体 $requestBody = json_encode([ 'document' => [ 'content' => $base64Pdf, 'mimeType' => 'application/pdf' // 指定文件类型为PDF ], 'sourceLanguageCode' => $sourceLang, 'targetLanguageCode' => $targetLang ]); // 初始化Curl $curlHandle = curl_init($apiUrl); // 设置Curl参数 curl_setopt($curlHandle, CURLOPT_RETURNTRANSFER, true); curl_setopt($curlHandle, CURLOPT_POST, true); curl_setopt($curlHandle, CURLOPT_POSTFIELDS, $requestBody); curl_setopt($curlHandle, CURLOPT_HTTPHEADER, [ 'Content-Type: application/json' ]); // 可选:如果之前文本翻译需要Referer,这里也可以加上 curl_setopt($curlHandle, CURLOPT_REFERER, "你的网站域名"); // 执行请求 $response = curl_exec($curlHandle); $responseData = json_decode($response, true); // 检查Curl错误 if (curl_errno($curlHandle)) { echo "Curl请求出错:" . curl_error($curlHandle); curl_close($curlHandle); return; } curl_close($curlHandle); // 处理翻译结果 if (isset($responseData['documentTranslation']['document']['content'])) { // 解码base64内容并保存为本地PDF $translatedPdfContent = base64_decode($responseData['documentTranslation']['document']['content']); $savePath = 'translated_output.pdf'; file_put_contents($savePath, $translatedPdfContent); echo "翻译成功!已保存到:{$savePath}"; } else { echo "翻译失败,API返回信息:" . print_r($responseData, true); } } // 调用函数 _translate_pdf();
几个关键注意点
- API版本与权限:必须使用V3版本的翻译API,并且在谷歌云控制台里已经启用了翻译API,同时你的API密钥要有对应的调用权限。
- 文件大小限制:同步模式只支持≤10MB的PDF,超过这个大小就得用异步模式(需要结合谷歌云存储)。
- 区域选择:
location参数要选谷歌翻译API支持的区域,比如us-central1、europe-west1等,你可以在谷歌云控制台的翻译API页面查看所有支持的区域。
关于你关心的“能不能直接接收文件内容”
- 同步模式下完全可以!响应里会返回翻译后的PDF文件的base64编码内容,解码后就能直接保存成本地文件,不用依赖云存储。
- 如果是大文件(>10MB),必须用异步模式:你需要先把源PDF上传到谷歌云存储,调用API时指定GCS的源文件路径和目标存储路径,翻译完成后再从GCS下载翻译后的文件。
备注:内容来源于stack exchange,提问作者BechD
相关产品推荐
相关产品推荐

