You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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();

几个关键注意点

  1. API版本与权限:必须使用V3版本的翻译API,并且在谷歌云控制台里已经启用了翻译API,同时你的API密钥要有对应的调用权限。
  2. 文件大小限制:同步模式只支持≤10MB的PDF,超过这个大小就得用异步模式(需要结合谷歌云存储)。
  3. 区域选择:location参数要选谷歌翻译API支持的区域,比如us-central1、europe-west1等,你可以在谷歌云控制台的翻译API页面查看所有支持的区域。

关于你关心的“能不能直接接收文件内容”

  • 同步模式下完全可以!响应里会返回翻译后的PDF文件的base64编码内容,解码后就能直接保存成本地文件,不用依赖云存储。
  • 如果是大文件(>10MB),必须用异步模式:你需要先把源PDF上传到谷歌云存储,调用API时指定GCS的源文件路径和目标存储路径,翻译完成后再从GCS下载翻译后的文件。

备注:内容来源于stack exchange,提问作者BechD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 11:24:52