【问题标题】:Google Script - Conversion from text/html to application/pdf failedGoogle Script - 从 text/html 到 application/pdf 的转换失败
【发布时间】:2018-07-18 08:40:40
【问题描述】:

我有一个具有简单逻辑的自定义 Google 脚本:它从电子表格中查找部分并构建内存中的 HTML 字符串,然后我调用以下代码来生成 PDF。

var blob = Utilities.newBlob(html_body, 'text/html').getAs('application/pdf').setName(pdf_name);

var newDoc = DriveApp.createFile(blob);

var pdf_url = newDoc.getUrl();

令人惊讶的是对于相同的内容,它有时会起作用并随机返回错误:

从 text/html 到 application/pdf 的转换失败。

我发现这种情况最常发生在较大的文件中,所以我可能会遇到一些配额限制。

但根据https://developers.google.com/apps-script/guides/services/quotas#current_limitations,任何限制都应该引发相关信息。

https://developers.google.com/apps-script/reference/base/blob#getAs(String) 周围的文档也没有说明任何内容。

有什么想法吗?

谢谢!

【问题讨论】:

  • 在启用 Drive v2“高级服务”并使用它创建文档后,您是否得到相同的行为,而不是 DriveApp
  • 感谢 tehhowch 的建议!我启用了 Drive v2 并根据developers.google.com/apps-script/advanced/drive 更改了代码,从而产生了以下代码。可悲的是,问题仍然存在。代码的第一行会生成错误。 var blob = Utilities.newBlob(html_body, 'text/html').getAs('application/pdf').setName(fileName); var file = { title: fileName, mimeType: 'application/pdf', }; newDoc = Drive.Files.insert(file, blob); var pdf_url = newDoc.id;
  • 如上所述,遗憾的是它并没有解决问题。
  • 您可以/应该在 OP 中提供导致此问题的大小示例,以及文件创建失败频率的统计信息。测试有效负载的相关链接可以帮助其他人重现您的确切问题。
  • 就像更新一样,我也尝试过使用 GSuite Business 的早期访问功能:灵活的配额和延长的脚本执行时间,但这也无济于事 - 请参阅 productforums.google.com/forum/#!topic/apps/…

标签: google-apps-script html-to-pdf


【解决方案1】:

我遇到了同样的问题,做了以下操作:

var html = HtmlService.createHtmlOutput(html_body);//This is now an object
html = html.getContent();//Get data as string - So its not an object or file
var blob = Utilities.newBlob(html,'application/pdf');//Create pdf from string

blob.setName(pdf_name);

就我而言,getAs('application/pdf') 方法无法将 blob 从文本文件转换为 pdf 文件。

【讨论】:

  • 嗨。感谢您的回答。我试图用它来解决问题,但由于某种原因 DriveApp 正在生成损坏的 PDF。也许只是因为我对 HTML 不是很熟悉。但我正在尝试以下功能,输出 PDF 已损坏:var html = '<html><body><h2>Test</h2></body></html>'; var pdf = Utilities.newBlob(html, 'application/pdf'); pdf.setName('test.pdf'); DriveApp.createFile(pdf).setName("test.pdf");
  • 我可能弄错了,但这似乎实际上并没有将 HTML convert 转换为 PDF,而是采用原始 HTML 并将其解释为 PDF。例如,当我使用此答案将简单的 HTML 文档转换为 PDF 并查看 PDF 的 hexdump 时,它不是 PDF 文档,而是带有 PDF 扩展名的 HTML 文档。
  • 自 2021 年 8 月 9 日以来,存在一个导致此代码失败的 Google 错误。我不知道这个问题是否与你的发现有关。许多人在创建 PDF 文件时遇到代码错误。我正在努力寻找解决方案,但还没有运气。
  • 备份 @AlanWells 的评论:在 issuetracker 上有一个未解决的问题:issuetracker.google.com/issues/196210913(请注意链接的重复问题)
【解决方案2】:

从 8 月 13 日星期五开始,我遇到了同样的问题(其他人从 2021 年 8 月 9 日开始遇到)(因为我每周运行进程/触发器)。

Here is the WORKING solution by muhdtam...@gmail.com,我从 Google Apps 脚本社区获得:

您必须将以下授权添加到您的“选项”语句中指向的“标题”部分,该语句是...的一部分。

var blob = UrlFetchApp.fetch(fileUrl, options).getBlob();

"authorization": "Bearer " + ScriptApp.getOAuthToken()

在我这样做并重新测试之后,错误“异常:从 text/html 到 application/pdf 的转换失败”消失了。

Google 一定改变了一些东西,但从未告诉任何人。

【讨论】:

    【解决方案3】:

    我面临或多或少相同的问题“文本/html 到应用程序/pdf 失败”错误消息。 据我了解,问题来自新版本的迁移 “这个项目正在我们由 Chrome V8 提供支持的新 Apps 脚本运行时上运行。”,在现有脚本上,该脚本将仅一个选项卡的快照从谷歌工作表转换为 PDF。

    https://pastebin.pl/view/8ebb6742

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-24
    • 2018-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多