google-apps-script - file.getas('application/pdf') 正在将嵌入式网址更改为 google.com 查询
问题描述
我使用 AppScript 创建了一个幻灯片文档。幻灯片包含使用以下代码插入到文本框中的嵌入式 URL:
textStyle.setLinkUrl(" https://www.apple.com ");
生成的幻灯片文档具有正确的嵌入 URL。但是,当我使用以下代码将幻灯片文档转换为 PDF 文档时,URL 将更改为以下内容。当在 PDF 查看器中单击链接时,这会导致重定向。
此代码将幻灯片文档转换为 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 幻灯片文件通过DriveApp.getFileById(###).getAs('application/pdf')
和转换为 PDF 格式时DriveApp.getFileById(###).getBlob()
,超链接就像您的问题一样。我认为这可能是谷歌方面的规范。当您想使用转换后的 PDF 格式的原始 URL 时,请使用端点导出为 PDF 格式。端点可以从exportLinks
Files 的方法中检索:在 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);
参考:
推荐阅读
- opengl - 如何使用 GL 作为后端将 cairo 输出渲染到 GLFW 窗口
- python-3.x - 从 csv 文件中检索信息
- ios - 本地化 SwiftUI
- javascript - Ajax 多重上传
- r - 如何调用创建的变量,在 R 循环中向 i 添加后缀
- vb.net - 如何在开始 3 位置代码中动态使用插入索引位置而不是多个 if 语句
- python - 删除熊猫框架中的列
- service-worker - 用户退出后可以向用户发送推送通知吗?
- typescript - 包含另一个数组的 Array 的 TypesScript 通用语法
- c++11 - Codeforces 中的“诊断检测到问题 [cpp.g++17-drmemory]: ~~Dr.M~~ Dr. Memory 版本 1.11.0”错误是什么?