我使用谷歌电子表格(由 2 张表格组成)来创建表单并导出 PDF 格式,效果非常好。我通常使用自定义 URL 来直接链接“https://docs.google.com/spreadsheets/d/[name ID]/export?format=pdf&portrait=false&size=A4”。但我在生成 PDF 时遇到问题,因为我的 URL 电子表格只能生成纵向或横向所有页面。我想生成工作表 1 纵向和工作表 2 横向的 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"));
}
我认为上面的脚本是有效的。但是,在这种情况下,当您直接将从
https://cdn.jsdelivr.net/npm/pdf-lib/dist/pdf-lib.min.js
检索到的 Javascript 复制并粘贴到您的 Google Apps 脚本项目中时,可以降低加载它的过程成本。