InsertInlineImage или ReplaceImage URI - PullRequest
       14

InsertInlineImage или ReplaceImage URI

0 голосов
/ 08 октября 2019

Я пишу приложение WinForms. Я создал файл шаблона Google Doc, который содержит заполнители, такие как {{name}} для различных текстовых элементов. Я могу успешно сделать копию этого документа и использовать BatchUpdateDocumentRequest для их точного изменения.

Однако у меня также есть встроенное изображение в документе. Я могу получить objectId для этого изображения просто отлично. Я либо хочу заменить это изображение другим, либо удалить его из моего шаблона, а затем добавить новое изображение в конец документа. В обоих случаях классы InsertInlineImage или ReplaceImage требуют URI изображения для вставки или замены. Вот где у меня проблема.

Само изображение было получено из элемента управления на WinForms. Это на самом деле график. Я сохранил изображение в формате PNG, так как знаю, что это один из форматов, поддерживаемых Google drive / docs. Я подумал, чтобы использовать его в пакетном обновлении, мне нужно было сначала загрузить его, поэтому я сделал это и получил в ответ его идентификатор файла и веб-ссылку.

Я не заблокирован каким-либо конкретным способомделать это. Первоначально я пытался создать HTML-файл, загрузить его, но затем он лишил его изображения, поэтому он стал бесполезным, поэтому я переключился на использование Google Doc в качестве шаблона и просто попытался заменить элементы в нем. Это шло хорошо, пока я не добрался до изображения.

По сути, независимо от того, что я пытаюсь указать в качестве URI, он говорит, что файл не в поддерживаемом формате.

Насколько я могу судить, Google ожидает, что URI на самом деле будет заканчиваться на .png или будет реальной ссылкой, а не URL-адресом загрузки, который вы получите с Google Диска.

Вот пример кода, который я использую, чтобы попытаться заменить изображение. StrImageObjectId - это objectId встроенного объекта в копии шаблона документа, который я хочу заменить. Uri - это то, от чего Google должен вытащить новое изображение. Я счастлив вытащить его из моего локального компьютера или Google Диска, если бы я только мог заставить его принять это каким-либо образом.

BatchUpdateDocumentRequest batchUpdateRequest = new BatchUpdateDocumentRequest {
    Requests = new List<Google.Apis.Docs.v1.Data.Request>()
};
request = new Google.Apis.Docs.v1.Data.Request {
    ReplaceImage = new ReplaceImageRequest() {
        ImageObjectId = strImageObjectId,
        Uri = strChartWebContentLink
    }
};
batchUpdateRequest.Requests.Add(request);
DocumentsResource.BatchUpdateRequest updateRequest = 
    sDocsService.Documents.BatchUpdate(batchUpdateRequest, strCopyFileId);
BatchUpdateDocumentResponse updateResponse = updateRequest.Execute();

Я счастлив использовать любой метод, который приведет меня к точке, где яВ итоге получился Документ Google на Google Диске, основанный на шаблоне, в котором я могу заменить различные текстовые элементы, но самое главное добавить / заменить изображение.

Большое спасибо за совет.

1 Ответ

0 голосов
/ 08 октября 2019

Я дошел до того, что, как мне кажется, я правильно указал URI, но затем вместо этого я начал получать ошибку, запрещающую доступ.

У меня не было времени выследить этот, поэтому я вернулся к созданию шаблона HTML с моим изображением, загрузке в качестве Google Doc, экспорту в PDF, а затем загрузке в формате PDF. Это сработало, потому что изначально я использовал BMP в качестве формата файла, и он не поддерживается Google Docs, поэтому я переключился на PNG, и он работал просто отлично.

Я думаю, что в Документах Google нужно добавить возможность добавлять изображение с помощью MemoryStream или другого программного ресурса base64, а не просто основываться на URI и сталкиваться с проблемами временной загрузки или разрешения.

...