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

如何通过Google Docs PHP API设置默认字体、分页符及目录

嘿,我来帮你搞定这三个需求——给通过PHP API生成的Google Docs设置默认字体Calibri、添加分页符和目录。咱们一步步来,首先得明确:你当前用的是Drive API来创建/上传文档,但要调整文档的格式和内容,得结合Google Docs API(Drive API负责文件层面的操作,Docs API管文档内部的样式和内容)。


前置准备

首先确保你已经在Google Cloud Console里启用了Google Docs API,并且你的授权客户端拥有https://www.googleapis.com/auth/documents的权限(和Drive API的权限一起配置)。


完整实现步骤

1. 先通过Drive API创建/上传文档(你的现有代码)

这部分你已经有了,注意创建后要保存文档的ID,后面要用Docs API修改:

$parent = 'XXXXX'; 
$file = new Google_Service_Drive_DriveFile( array( 
    'name' => 'XXXX', 
    'mimeType' => 'application/vnd.google-apps.folder', 
    'teamDriveId' => $parent, 
    'parents' => array($parent) 
) ); 
$filename = 'XXXX'; 
$file->setName($filename); 
$file->setMimeType( 'application/vnd.google-apps.document' ); 
$result = $this->serviceDrive->files->create($file, array( 
    'data' => file_get_contents("path/to/file"), 
    'uploadType' => 'multipart', 
));

// 获取创建后的文档ID(关键,后续Docs API要用)
$docId = $result->getId();

2. 初始化Docs API服务

接下来初始化Docs服务(用和Drive API相同的授权客户端即可):

// 假设$client是你已经授权好的Google_Client实例
$serviceDocs = new Google_Service_Docs($client);

3. 构造批量更新请求(同时完成三个需求)

我们用Docs API的batchUpdate方法一次完成所有操作,避免多次调用API:

$requests = [];

// 🔹 设置文档默认字体为Calibri
// 修改文档的默认段落样式,所有新建文本都会继承这个字体
$requests[] = [
    'updateDocumentStyle' => [
        'documentStyle' => [
            'defaultParagraphStyle' => [
                'textStyle' => [
                    'fontFamily' => 'Calibri',
                    'fontSize' => [
                        'magnitude' => 11,
                        'unit' => 'PT' // Calibri默认常用字号是11号
                    ]
                ]
            ]
        ],
        'fields' => 'defaultParagraphStyle.textStyle.fontFamily,defaultParagraphStyle.textStyle.fontSize'
    ]
];

// 🔹 添加分页符(示例:插入到文档开头)
// 如果要插入到现有内容末尾,参考下方注意事项调整位置
$requests[] = [
    'insertPageBreak' => [
        'location' => [
            'index' => 1 // Docs的索引从1开始,1代表文档最开头
        ]
    ]
];

// 🔹 添加目录(示例:插入到文档开头,包含1-3级标题)
// 目录会自动关联文档中使用Heading 1/2/3样式的内容
$requests[] = [
    'insertTableOfContents' => [
        'location' => [
            'index' => 1 // 若想放在分页符后,可调整index值
        ],
        'tableOfContentsProperties' => [
            'outlineLevels' => [1, 2, 3] // 指定要包含的标题层级
        ]
    ]
];

// 执行批量更新
$batchUpdateRequest = new Google_Service_Docs_BatchUpdateDocumentRequest([
    'requests' => $requests
]);
$serviceDocs->documents->batchUpdate($docId, $batchUpdateRequest);

关键注意事项

  • 分页符位置调整:如果要把分页符插入到现有上传内容的末尾,需要先获取文档内容的结束索引:
    // 获取文档内容结构
    $document = $serviceDocs->documents->get($docId);
    // 取最后一个内容块的结束索引
    $lastContent = end($document->getBody()->getContent());
    $endIndex = $lastContent->getEndIndex();
    // 然后将insertPageBreak的location.index设为$endIndex即可
    
  • 目录显示内容:目录只会包含文档中使用Heading 1/Heading 2/Heading 3样式的段落。如果你的上传内容里没有这些样式,需要额外添加请求把指定段落设置为标题样式,比如:
    $requests[] = [
        'updateParagraphStyle' => [
            'paragraphStyle' => [
                'namedStyleType' => 'HEADING_1'
            ],
            'range' => [
                'startIndex' => 1,
                'endIndex' => 10 // 替换成你要设置为标题的文本范围
            ],
            'fields' => 'namedStyleType'
        ]
    ];
    
  • 字体兼容性:Calibri是Google Docs原生支持的字体,直接用'fontFamily' => 'Calibri'即可,无需额外处理。

内容的提问来源于stack exchange,提问作者SaNdY

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:54:34