我有几个 jpg 图像文件需要以编程方式插入到谷歌幻灯片演示文稿中。第一步是创建一个只生成一张幻灯片并将一张图像插入幻灯片的程序。如果这成功了,我将在我的图像上循环放大代码。代码如下:
from __future__ import print_function
import pickle
import os.path
from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request
import library_JP
# If modifying these scopes, delete the file token.pickle.
#SCOPES = ['https://www.googleapis.com/auth/presentations.readonly']
SCOPES = ['https://www.googleapis.com/auth/presentations']
# The ID of a sample presentation.
PRESENTATION_ID = '1EAYk18WDjIG-zp_0vLm3CsfQh_i8eXc67Jo2O9C6Vuc'
PRESENTATION_ID = '1tWESMVHXsbbW-rro6wdeDQL3ygkxAf3c0xSd-JK-oXg'
presentation_id = '1tWESMVHXsbbW-rro6wdeDQL3ygkxAf3c0xSd-JK-oXg'
def main():
"""Shows basic usage of the Slides API.
Prints the number of slides and elments in a sample presentation.
"""
creds = None
# The file token.pickle stores the user's access and refresh tokens, and is
# created automatically when the authorization flow completes for the first
# time.
if os.path.exists('token.pickle'):
with open('token.pickle', 'rb') as token:
creds = pickle.load(token)
# If there are no (valid) credentials available, let the user log in.
if not creds or not creds.valid:
if creds and creds.expired and creds.refresh_token:
creds.refresh(Request())
else:
flow = InstalledAppFlow.from_client_secrets_file(
'credentials.json', SCOPES)
creds = flow.run_local_server(port=0)
# Save the credentials for the next run
with open('token.pickle', 'wb') as token:
pickle.dump(creds, token)
service = build('slides', 'v1', credentials=creds)
# Call the Slides API
IMAGE_URL = ('https://www.google.com/images/branding/'
'googlelogo/2x/googlelogo_color_272x92dp.png')
# page_id = '3b330c04-6eb2-11eb-9439-0242ac130002'
page_id = '0c00dd21-da6d-4b9a-9694-3b9e81b2ab1b'
requests = [
{
'createSlide': {
# 'objectId': page_id,
'insertionIndex': '1',
'slideLayoutReference': {
'predefinedLayout': 'TITLE_AND_TWO_COLUMNS'
}
}
}
]
title = 'JP_february13-2021 '
print('debug requests before creating pres ',requests)
body0 = {'title': title}
#
presentation = service.presentations().create(body=body0).execute()
print('Created presentation with ID: {0}'.format(
presentation.get('presentationId')))
body = { 'requests': requests}
#
response = service.presentations() \
.batchUpdate(presentationId=presentation_id, body=body).execute()
create_slide_response = response.get('replies')[0].get('createSlide')
print('Created slide with ID: {0}'.format(
create_slide_response.get('objectId')))
#
requests = []
image_id = 'MyImage_01'
emu4M = {
'magnitude': 4000000,
'unit': 'EMU',
}
requests.append({
'createImage': {
'objectId': image_id,
'url': IMAGE_URL,
'elementProperties': {
'pageObjectId': page_id,
'size': {
'height': emu4M,
'width': emu4M
},
'transform': {
'scaleX': 1,
'scaleY': 1,
'translateX': 100000,
'translateY': 100000,
'unit': 'EMU'
}
}
}
})
response = service.presentations() \
.batchUpdate(presentationId=presentation_id, body=body).execute()
create_image_response = response.get('replies')[0].get('createImage')
# print('Created image with ID: {0}'.format(
# create_image_response.get('objectId')))
if __name__ == '__main__':
main()
程序的输出是:
python quickstart_JP5.py
debug requests before creating pres [{'createSlide': {'insertionIndex': '1', 'slideLayoutReference': {'predefinedLayout': 'TITLE_AND_TWO_COLUMNS'}}}]
Created presentation with ID: 1gRl0h60XXK8_p7kfn4pgBe212ncKHbScj1Y7pesjZlo
Created slide with ID: SLIDES_API1707490034_0
但是,当我使用带有上述演示 ID 的 chrome 时,结果不是我所期望的:
https://docs.google.com/presentation/d/1gRl0h60XXK8_p7kfn4pgBe212ncKHbScj1Y7pesjZlo/edit#slide=id.p