gpt4 book ai didi

google-apps-script - 将 Google 表单响应映射或导出到 PDF 表单字段

转载 作者:行者123 更新时间:2023-12-04 08:06:21 30 4
gpt4 key购买 nike

我想实现一个工作流程,用户通过 Google 表单提交数据,他们的回复会自动发布到预先存在的 PDF 表单中。

我有几个经常使用的 PDF 表单。我创建了一个 Google 表单来收集完成 PDF 所需的所有信息。现在我试图找到一种方法来将答案映射到原始 PDF。

我怎样才能做到这一点?

最佳答案

在patentbytes.com 上有一篇文章,Automatically Completing Your PDF Forms ,其中详细介绍了该主题,这也是本答案的灵感来源。

使用 Google Apps Script,您无法修改现有的 PDF 表单。但是,您可以利用 Adob​​e Acrobat 和 Acrobat Reader 等应用程序中现有的导入功能,通过以易于导入的方式编写表单数据生成脚本。

这是想法:

  • 让用户填写 Google 表单。使用表单设置来确保回答所需的问题。
  • 在提交表单时,让一个包含电子表格的触发器函数生成一个包含用户答案的​​ XML 文件。使用文本替换来完成此操作很简单,但我们将使用使用 Google 的 XmlService 的替代方法。
  • 将 XML 格式的答案传输给管理员。这可以通过电子邮件或通过在 Google 云端硬盘中放置文件来完成。
  • 使用 Adob​​e Acrobat 或 Reader 将 XML 文件导入 pdf 格式。 (如果需要。)

  • 在继续之前,您的 PDF 表单需要具有特定特征:
  • 它必须是可填写的表格。
  • 它必须包括对表单数据的导出和导入的支持。 (在 Adob​​e Reader 中,您将看到一个“扩展”菜单,如此屏幕截图所示。)
  • 我们将使用前面提到的文章中的示例表单作为示例。它有效,虽然它需要清理。

    Screenshot

  • 导出 XML 表单数据示例

    使用 Acrobat Reader(或类似工具),完整填写示例表单,并将表单数据导出为 XML。 (如果您使用将用于 HTML 模板的驼峰式术语填写表单,则可以简化后续步骤 - 例如 inventionTitle 。)

    从导出的 XML 创建 HTML 模板

    在 Apps 脚本编辑器中,使用 File-New 在项目中创建一个新的 html 文件,并将其命名为“formXml”。将导出的 xml 文件的文本内容粘贴到 formXml.html 中。
  • XML 声明需要在我们的最终输出中,但如果留在模板中会导致 HtmlService 崩溃。从模板中删除它;我们将把它添加回我们的代码中。
    <?xml version="1.0" encoding="UTF-8"?>
  • (可选)美化 XML,使其更容易避免引入错误。 (freeformatter.com 有一个有用的 xml 格式化程序。我发现第一遍使用“紧凑模式”,然后第二遍每个缩进 2 个空格产生了很好的结果。
  • (可选)按逻辑对字段重新排序。
  • 对于每个输入字段,将示例文本替换为有效的 printing scriplets .
    inventionTitle    becomes   <?= inventionTitle ?>

  • 表单XML.html

    这是您的表单 XML 模板最终应该是什么样的。在这个例子中,我们只有 5 个表单域。
    <fields xmlns:xfdf="http://ns.adobe.com/xfdf-transition/">
    <TitleofInvention xfdf:original="Title of Invention"><?= inventionTitle ?></TitleofInvention>
    <Inventorone xfdf:original="Inventor one"><?= inventor1name ?></Inventorone>
    <Citizenof xfdf:original="Citizen of"><?= inventor1citizenship ?></Citizenof>
    <Inventortwo xfdf:original="Inventor two"><?= inventor2name ?></Inventortwo>
    <Citizenof_2 xfdf:original="Citizen of_2"><?= inventor2citizenship ?></Citizenof_2>
    </fields>

    代码.gs

    这是表单提交触发函数。每次用户填写您的在线 google 表单时,此电子表格表单提交触发器将处理他们的回复,并在您的 google 驱动器上保存一个带时间戳的 xml 文件,准备导入到 PDF 表单中。
    function formSubmission(eventData) {
    // Get a handle on the xml template
    var formXml = HtmlService.createTemplateFromFile('formXml');

    // Replace templated values with user's input
    formXml.inventionTitle = eventData.namedValues['Invention Title'];
    formXml.inventor1name = eventData.namedValues['Inventor 1 Name'];
    formXml.inventor1citizenship = eventData.namedValues['Inventor 1 Citizenship'];
    formXml.inventor2name = eventData.namedValues['Inventor 2 Name'];
    formXml.inventor2citizenship = eventData.namedValues['Inventor 2 Citizenship'];

    // Evaluate the template with substitutions
    var xml = formXml.evaluate();

    // Get the evaluated template as text, prepend the XML Declaration
    var formXmlText = '<?xml version="1.0" encoding="UTF-8"?>'
    + xml.getContent();

    // Save user's input as an xml file on our Google Drive
    var fileName = 'Form ' + eventData.namedValues['Timestamp'];
    var xmlFile = DriveApp.createFile(fileName, formXmlText, MimeType.XML);
    }

    表格和电子表格
    namedValues在触发函数处理的 eventData 对象中,来自 Form Responses 表,它直接来自于 Form 问题。 (这是保持问题简短的一个很好的理由,并依靠帮助文本来详细说明!)

    Spreadsheet screenshot

    关于google-apps-script - 将 Google 表单响应映射或导出到 PDF 表单字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17795433/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com