如何通过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
相关产品推荐
相关产品推荐

