导出 pdf google spreadschet 多张纸

问题描述 投票:0回答:1

我使用谷歌电子表格(由 2 张表格组成)来创建表单并导出 PDF 格式,效果非常好。我通常使用自定义 URL 来直接链接“https://docs.google.com/spreadsheets/d/[name ID]/export?format=pdf&portrait=false&size=A4”。但我在生成 PDF 时遇到问题,因为我的 URL 电子表格只能生成纵向或横向所有页面。我想生成工作表 1 纵向和工作表 2 横向的 pdf。有人有同样的问题或有解决方案吗?

我尝试自定义页面方向但仍然失败。

google-sheets pdf download export spreadsheet
1个回答
0
投票

我相信您的目标如下。

  • 您想要将 Google 电子表格导出为 PDF 文件。
  • 导出 PDF 时,您需要设置每个页面的具体方向。
  • 您想使用 Google Apps 脚本来实现此目的。

既然如此,下面的流程怎么样?

  1. 通过将页面方向设置为 PDF 数据来导出每张纸。
  2. 将导出的 PDF 数据合并为 PDF 文件。

为了准备此示例脚本,我参考了以下线程。

示例脚本如下。

示例脚本:

请将以下脚本复制并粘贴到 Google Spreadsheet 的脚本编辑器中并设置

sheetNames
,然后保存脚本。请确认您的工作表名称和页面方向。

async function myFunction() {
  // This is from your question.
  const sheetNames = [
    { sheetName: "Sheet1", portrait: true },
    { sheetName: "Sheet2", portrait: false }
  ];

  // 1. Export each sheet by setting the orientation of the page as PDF data.
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const ssId = ss.getId();
  const token = ScriptApp.getOAuthToken();
  const data = sheetNames.map(o => {
    const sheet = ss.getSheetByName(o.sheetName);
    const url = `https://docs.google.com/spreadsheets/d/${ssId}/export?format=pdf&portrait=${o.portrait}&size=A4&gid=${sheet.getSheetId()}`;
    return new Uint8Array(UrlFetchApp.fetch(url, { headers: { authorization: "Bearer " + token } }).getContent());
  });

  // 2. Merge exported PDF data as a PDF file.
  // Load pdf-lib
  // ref: https://stackoverflow.com/a/76816478
  const cdnjs = "https://cdn.jsdelivr.net/npm/pdf-lib/dist/pdf-lib.min.js";
  eval(UrlFetchApp.fetch(cdnjs).getContentText().replace(/setTimeout\(.*?,.*?(\d*?)\)/g, "Utilities.sleep($1);return t();"));

  // ref: https://stackoverflow.com/a/75064473
  const pdfDoc = await PDFLib.PDFDocument.create();
  for (let i = 0; i < data.length; i++) {
    const pdfData = await PDFLib.PDFDocument.load(data[i]);
    const pages = await pdfDoc.copyPages(pdfData, [...Array(pdfData.getPageCount())].map((_, i) => i));
    pages.forEach(page => pdfDoc.addPage(page));
  }
  const bytes = await pdfDoc.save();
  DriveApp.createFile(Utilities.newBlob([...new Int8Array(bytes)], MimeType.PDF, "sample2.pdf"));
}
  • 运行此脚本时,会在根文件夹中创建一个 PDF 文件。并且,“Sheet1”和“Sheet2”分别设置为纵向或横向。

注:

我认为上面的脚本是有效的。但是,在这种情况下,当您直接将从

https://cdn.jsdelivr.net/npm/pdf-lib/dist/pdf-lib.min.js
检索到的 Javascript 复制并粘贴到您的 Google Apps 脚本项目中时,可以降低加载它的过程成本。

参考:

© www.soinside.com 2019 - 2024. All rights reserved.