首页 > 解决方案 > file.getas('application/pdf') 正在将嵌入式网址更改为 google.com 查询

问题描述

我使用 AppScript 创建了一个幻灯片文档。幻灯片包含使用以下代码插入到文本框中的嵌入式 URL:

textStyle.setLinkUrl(" https://www.apple.com ");

生成的幻灯片文档具有正确的嵌入 URL。但是,当我使用以下代码将幻灯片文档转换为 PDF 文档时,URL 将更改为以下内容。当在 PDF 查看器中单击链接时,这会导致重定向。

https://www.google.com/url?q=https://www.apple.com&sa=D&ust=1587520665890000&usg=AFQjCNFxTpL_mRUtgTWoi4Zgz97trJNIEg

此代码将幻灯片文档转换为 PDF:

var pdfBlob = slideFile.getAs('application/pdf'); pdfBlob.setName(slideFile.getName() + ".pdf"); var pdfFile = DriveApp.createFile(pdfBlob);

奇怪的是,如果我使用浏览器界面从 Google Drive 打开幻灯片文档,然后选择下载 -> PDF,它会生成具有正确 URL ( https://www.apple.com ) 的 PDF 文档。

所以我已经验证了幻灯片文档中的 URL 是正确的。我不明白为什么使用 AppScript 的 getAs 接口转换为 PDF 会更改目标 PDF 文档中的 url,而 Google 用户界面却没有在同一个文档上执行此操作。

我感觉 Google 正在为我的应用程序添加信息,以便它可以对我的应用程序创建的文档进行某种形式的跟踪。但我似乎无法验证这一点。

标签: google-apps-script

解决方案


修改点:

当 Google 幻灯片文件通过DriveApp.getFileById(###).getAs('application/pdf')和转换为 PDF 格式时DriveApp.getFileById(###).getBlob(),超链接就像您的问题一样。我认为这可能是谷歌方面的规范。当您想使用转换后的 PDF 格式的原始 URL 时,请使用端点导出为 PDF 格式。端点可以从exportLinksFiles 的方法中检索:在 Drive API v3 中获取。

修改后的脚本:

当你的脚本被修改后,它变成如下。

var fileId = "###";  // Please set the Google Slides ID.

var url = "https://docs.google.com/feeds/download/presentations/Export?exportFormat=pdf&id=" + fileId;
var pdfBlob = UrlFetchApp.fetch(url, {headers: {authorization: "Bearer " + ScriptApp.getOAuthToken()}}).getBlob();
var slideFile = DriveApp.getFileById(fileId);
pdfBlob.setName(slideFile.getName() + ".pdf");
var pdfFile = DriveApp.createFile(pdfBlob);

参考:


推荐阅读