我正在使用Google Slides API创建PowerPoint演示文稿。额外必需的功能是 - 导出到PDF导出到HTML导出到文档/图像格式。
是否有幻灯片API给出的方法?
幻灯片API不直接支持导出,但是该功能可以从驱动器API中获得:
https://developers.google.com/drive/v3/reference/files/export
只需将幻灯片presentationId
用作驱动器fileId
。
@sangram
假设您已经创建了幻灯片甲板,将Google幻灯片转换为PDF的过程将如下:
import apiclient.http as client_methods
# exporting the slide deck and specifying the desired final file type
data = drive_client.files().export(fileId=slide_id, mimeType='application/pdf').execute()
# request body to be send together the upload method
body = {'name':file_name, 'mimeType':'application/pdf'}
# wrapping the binary (data) file with BytesIO class
fh = client_methods.BytesIO(data)
# creating the Media Io upload class for the file (note that our original slide data is of binary type)
media_body = client_methods.MediaIoBaseUpload(fh,
mimetype='application/pdf')
# drive API v3 - .create | drive API v2 - .insert
pdf_file_id = drive_client.files().create(body=body, media_body=media_body).execute()['id']
# extra step: moving to desirable folder destination with the function method
def move_files(drive_client, id_, folder_id):
file_ = drive_client.files().get(fileId=id_, fields='parents').execute()
drive_client.files().update(fileId=id_, addParents=folder_id,
removeParents=file_['parents'][0],
fields='id,parents').execute()
# calling the move_files function.
# drive_client is authorized client, folder_id = desired destination directory (from url).
move_files(drive_client, pdf_file_id, folder_id)
希望这会有所帮助。
资源:
驱动API V3导出方法
驱动器API V3创建方法
驱动器API V3在文件夹之间移动文件
正如@codik所述,Google Slides API不直接支持导出,但您可以将Google Drive API用于导出。
这是我的解决方案。在导出之前,我也在侧面替换一些文本。
$substitutions = [
'text_block_1' => "My First Text",
'text_block_2' => "My Second Text"
];
// You can fond the google slide Id in the URL
$templateId = "Here comes the Google Slide Id";
$client = $certificationService->getGoogleClient();
$driveService = new Google_Service_Drive($client);
$slidesService = new Google_Service_Slides($client);
$copy = new Google_Service_Drive_DriveFile(array(
'name' => 'Pdf Name' . ' presentation'
));
$driveResponse = $driveService->files->copy($templateId, $copy);
$fileId = $driveResponse->id;
// replaceable text should be covered with {{}}
// example = {{text_block_1}}
$requests = [];
foreach ($substitutions as $key => $value) {
$requests[] = new Google_Service_Slides_Request(
[
'replaceAllText' => [
'containsText' => [
'text' => '{{'.$key.'}}',
'matchCase' => true
],
'replaceText' => $value
]
]
);
}
$batchUpdateRequest = new Google_Service_Slides_BatchUpdatePresentationRequest(array(
'requests' => $requests
));
$updateResponse = $slidesService->presentations->batchUpdate($fileId, $batchUpdateRequest);
// here you can specify the file type you want to export as
$response = $driveService->files->export($fileId, 'application/pdf', array('alt' => 'media'));
$content = $response->getBody()->getContents();
// delete the exported file from the Google Drive
$driveService->files->delete($fileId);
注意: - 为了使此代码工作,应与Google Service帐户电子邮件共享Google幻灯片。