如何使用Google Apps Script将PDF正文格式调整为与电子邮件格式一致
问题原因
你生成PDF时内容挤为单行的核心原因是:纯文本的换行符\n无法被HTML渲染识别,且你没有给内容加上对应的标题、段落HTML标签,仅在外层套了<b>标签,导致HTML渲染时所有内容默认按行内文本拼接,转PDF后自然就是连续的单行内容。
调整后的完整代码
function onFormSubmit(e) { // 获取提交的表单响应 var formResponse = e.response; // 获取提交的所有问题响应项 var itemResponses = formResponse.getItemResponses(); // 定义变量存储待发送邮件的纯文本正文 var emailBody = "New form response:\n\n"; // 新增变量存储用于生成PDF的结构化HTML内容 var htmlContent = "<h1>New form response</h1>"; // 拼接所有问题和响应内容 itemResponses.forEach(function(itemResponse) { var title = itemResponse.getItem().getTitle(); var response = itemResponse.getResponse(); // 纯文本内容拼接,保留原有邮件逻辑 emailBody += title + "\n" + response + "\n\n"; // HTML内容拼接,按要求用h2放标题,p放响应内容 htmlContent += `<h2>${title}</h2><p>${response}</p>`; }); // 调用sendEmail函数发送邮件通知 sendEmail(emailBody); var folderID = "SOME_FOLDERID"; // 生成中间HTML文件时使用结构化的htmlContent,不再用纯文本加b标签 var intermediate = DriveApp.createFile('New Form Response', htmlContent, MimeType.HTML); var blob = intermediate.getAs(MimeType.PDF); Logger.log(blob.getContentType()); var pdfFile = DriveApp.createFile(blob); DriveApp.getFolderById(folderID).addFile(pdfFile) DriveApp.getFileById(intermediate.getId()).setTrashed(true); } // 发送邮件通知的函数 function sendEmail(emailBody) { MailApp.sendEmail("EMAIL_ADDRESS", "New form response", emailBody); }
核心修改点
- 新增了独立的
htmlContent变量存储结构化HTML内容,避免影响原有纯文本邮件的发送格式 - 每个问题标题用
<h2>标签包裹,每个响应用<p>标签包裹,完全匹配你需要的排版结构 - 生成中间HTML文件时直接传入结构化的HTML内容,不再使用纯文本加外层
<b>标签的错误写法
调整后生成的PDF格式就会和你要求的邮件正文格式完全一致。
内容的提问来源于stack exchange,提问作者onit
相关产品推荐
相关产品推荐

