Comment créer un lien hypertexte vers des images dans un fichier DOC à l'aide de l'API Google ?
P粉449281068
P粉449281068 2023-07-21 13:47:02
0
1
632

J'ai créé un nouveau fichier de document sur Google Docs, inséré une image et (il n'y a pas d'option pour insérer une image liée, n'est-ce pas ?) j'ai dû lui attribuer une URL pour que l'on puisse cliquer sur l'image.

$docs_service = new Google_Service_Docs($client);
$drive_service = new Google_Service_Drive($client); 

$document = new Google_Service_Docs_Document(array(
    'title' => $file_name
));
$document = $docs_service->documents->create($document);   

$requests[] =
    new Google_Service_Docs_Request(array(
        'insertText' => array(
            'location' => array(
                'index' => 1,
            ),
            'text' => "n".$text
        )
    ));

$requests[] = new Google_Service_Docs_Request(array(
    'insertInlineImage' => array(
        'uri' => 'https://example.com/img.jpg',
        'location' => array(
            'index' => 1,
        ),
        'objectSize' => array(
            'height' => array(
                'magnitude' => 675,
                'unit' => 'PT',
            ),
            'width' => array(
                'magnitude' => 360,
                'unit' => 'PT',
            ),
        )
    )
));

$batchUpdateRequest = new Google_Service_Docs_BatchUpdateDocumentRequest(array(
    'requests' => $requests
));
$response = $docs_service->documents->batchUpdate($document->getDocumentId(), $batchUpdateRequest);

$doc = $docs_service->documents->get($document->getDocumentId(), ['fields' => 'body']);

Mais je ne trouve pas la bonne fonction API. Il existe une méthode setLinkUrl de la classe InlineImage, mais comment obtenir une instance d'InlineImage ?

Une autre façon consiste à parcourir le document

$doc = $docs_service->documents->get($document->getDocumentId(), ['fields' => 'body']);

foreach ($doc->body->content as $content) {
  print_r($content);
}

Mais le contenu imprimé ne contient aucune information utile.

P粉449281068
P粉449281068

répondre à tous(1)
P粉083785014

Dans le script que vous avez montré, un nouveau document est créé à l'aide de l'API Docs et l'image est placée dans le nouveau document créé. Dans ce cas, vous pouvez modifier le corps de la requête comme suit, à l'aide de UpdateTextStyleRequest.

Exemple :

$requests[] = new Google_Service_Docs_Request(array(
    'insertInlineImage' => array(
        'uri' => 'https://example.com/img.jpg',
        'location' => array(
            'index' => 1,
        ),
        'objectSize' => array(
            'height' => array(
                'magnitude' => 675,
                'unit' => 'PT',
            ),
            'width' => array(
                'magnitude' => 360,
                'unit' => 'PT',
            ),
        )
    )
));

Exemple :

$requests = [
    new Google_Service_Docs_Request(array(
        'insertInlineImage' => array(
            'uri' => 'https://example.com/img.jpg',
            'location' => array(
                'index' => 1,
            ),
            'objectSize' => array(
                'height' => array(
                    'magnitude' => 675,
                    'unit' => 'PT',
                ),
                'width' => array(
                    'magnitude' => 360,
                    'unit' => 'PT',
                ),
            )
        ),
    )),
    new Google_Service_Docs_Request(array(
        'updateTextStyle' => array(
            'range' => array(
                'startIndex' => 1,
                'endIndex' => 2,
            ),
            'textStyle' => array(
                'link' => array(
                    'url' => 'https://www.google.com', // Please set your URL.
                ),
            ),
            'fields' => 'link',
        ),
    )),
];
  • Lors de l'utilisation de ce corps de requête modifié, le lien hypertexte https://www.google.com sera défini vers l'image insérée dans Google Docs.

  • Par exemple, si vous souhaitez récupérer startIndex et endIndex à partir d'une image insérée dans le document, vous pouvez utiliser l'exemple de script suivant :

    $doc = $docs_service->documents->get($document->getDocumentId(), ['fields' => 'body']);
      foreach ($doc->body->content as $content) {
          if (array_key_exists('paragraph', $content)) {
              foreach ($content->paragraph->elements as $element) {
                  if (array_key_exists('inlineObjectElement', $element)) {
                      $startIndex = $element->startIndex;
                      $endIndex = $element->endIndex;
                      print_r(array($startIndex, $endIndex));
                  }
              }
          }
      }
    • Dans votre script, les valeurs de $startIndex et $endIndex sont respectivement 1 et 2. Veuillez utiliser ces valeurs avec la portée de updateTextStyle comme indiqué dans la modification ci-dessus.
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal