插入内联图像或替换图像 URI



我正在编写一个WinForms应用程序。我创建了一个 Google 文档模板文件,其中包含各种文本元素的占位符,例如 {{name}}。我可以成功地制作此文档的副本,并使用BatchUpdateDocumentRequest对其进行修改。

但是,我在文档中也嵌入了图像。我可以很好地获取此图像的对象ID。我想用另一个图像替换此图像,或者将其从模板中删除,然后将新图像附加到文档末尾。在这两种情况下,InsertInlineImage 或 ReplaceImage 类都需要插入或替换图像的 URI。这是我遇到问题的地方。

图像本身是从 WinForms 上的控件捕获的。它实际上是一个图表。我已经将图像保存为PNG格式,因为我知道这是Google驱动器/文档支持的格式之一。我想为了在批量更新中使用它,我需要先上传它,所以我这样做了,并在响应中恢复了它的文件 ID 和 webcontentlink。

我没有被锁定在任何特定的方法来做到这一点。我最初尝试创建一个 HTML 文件,上传,但随后它会从中剥离图像,所以变得毫无用处,所以我改用 Google Doc 作为我的模板,只是尝试替换其中的元素。这很顺利,直到我看到图像。

基本上,无论我尝试指定为URI什么,它都会以不支持的格式显示文件。

据我所知,谷歌希望URI实际上以.png结尾,或者是一个真正的链接,而不是你从谷歌云端硬盘获得的下载URL。

下面是我用来尝试替换图像的代码示例。strImageObjectId 是我要替换的模板文档副本中嵌入对象图像的对象 ID。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 Doc,我可以在其中替换各种文本元素,但最重要的是添加/替换图像。

非常感谢您的建议。

我到了点子上,我相信我正确地指定了 URI,但后来我开始收到禁止访问的错误。

我没有时间去寻找这个,所以我回到用我的图像创建一个HTML模板,上传为Google Doc,导出为PDF,然后上传为PDF。这最终起作用了,因为最初我使用 BMP 作为文件格式,而 Google 文档不支持这种格式,所以我改为 PNG,它工作得很好。

我认为Google Docs需要添加使用MemoryStream或其他一些编程base64资源添加图像的功能,而不是纯粹基于URI并遇到临时上传或权限问题。

嘿,我和你做同样的事情, 我得到了这个,通过修改下载链接格式。

由此:

https://docs.google.com/uc?export=下载&ID={{您的硬盘映像 ID}


对此

https://docs.google.com/uc?export=VIEW&ID={{您的GDRIVE IMAGE ID}


例如: 乌里:"https://docs.google.com/uc?export=view&id=1cjgyHqtYSgS0CBT4x-9eQIHRzOIfGgv-">

但图像应设置为公共权限

最新更新