首页 > 解决方案 > 从谷歌应用脚​​本创建正确编码/解码的 pdf 文件

问题描述

我正在设置一个电子表格,它创建一个 pdf 文件并与某人共享以打印并签名。

 var content = getMessage(X,Y,Z, etc);
 var FolderFile = DriveApp.getFoldersByName('CreatingFolderTest').next();
 var FileCreation = FolderFile.createFile(EmployeeID, content, MimeType.PDF).addViewer(Email);

问题是,当我尝试下载文件时,它给了我一个错误,即 pdf 文件未正确解码。

试图搜索解决方案,发现它可能是我正在使用的元数据标签

 <!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <meta name="viewport" content="width=device-width"/>

我希望我可以从代码中已有的 HTML 文件创建一个 PDF 格式的文件,然后将其发送给员工打印出来!如果我可以在 pdf 文件中添加密码,那将是额外的,但这是一种额外的努力

标签: google-apps-scriptgoogle-sheets

解决方案


  • 您想将文件创建text/html为 PDF 文件。
  • 的MimeTypecontent是.var content = getMessage(X,Y,Z, etc)text/html

如果我的理解是正确的,那么这个修改呢?

修改点:

  • 遗憾的是,text/html无法使用createFile(EmployeeID, content, MimeType.PDF). 运行脚本时,会创建一个内容和 mimeType 为 HTML 的文件application/pdf。这样,当打开文件时,就会发生错误。因为内容不是PDF格式。
  • 为了避免这个问题,我使用了HtmlService.createHtmlOutput().

请认为这只是几个答案之一。

修改后的脚本:

从:
var content = getMessage(X,Y,Z, etc);
var FolderFile = DriveApp.getFoldersByName('CreatingFolderTest').next();
var FileCreation = FolderFile.createFile(EmployeeID, content, MimeType.PDF).addViewer(Email);
到:
var content = getMessage(X,Y,Z, etc);
var FolderFile = DriveApp.getFoldersByName('CreatingFolderTest').next();

var html = HtmlService.createHtmlOutput(content); // Added
var FileCreation = FolderFile.createFile(html.getAs(MimeType.PDF)).setName(EmployeeID); // Modified

笔记:

  • 如果 HTML 包含从 URL 检索的图像,请将图像作为 base64 数据放入 HTML。您可以在此处查看示例脚本。

参考:


推荐阅读