在 Google Sheets 中,当我们使用 Apps Script 内置方法中的 UrlFetchApp 将范围打印为 PDF 时,古吉拉特语 (Shruti) 字体比工作表占用更多空间;当我们使用“打印”按钮或“Ctr + P”打印相同的范围时,它会打印具有正确空格的字体。
我观察到这两种方法都完美地呈现了英文字体。但是,当通过 UrlFetchApp 打印 PDF 时,古吉拉特字体的行间距更大,占用的尺寸也更大。
是否有任何选项或任何其他方法,我可以通过 Apps 脚本使用他们的“Ctr + P”功能?
有没有其他方法可以像“Ctr + P”那样以占用更少空间的方式渲染古吉拉特字体?
步骤:
建议:
我无法想出一种方法将文本换行应用于生成的 PDF 文件,但我注意到将文件复制到 Google 文档并生成下载 URL 可以保留表格格式,即使使用古吉拉特语 (Shruti) 字体也是如此。这是我煮的。
function onOpen() {
SpreadsheetApp.getUi()
.createAddonMenu()
// .addItem('Export all sheets', 'exportAsPDF')
// .addItem('Export all sheets as separate files', 'exportAllSheetsAsSeparatePDFs')
// .addItem('Export current sheet', 'exportCurrentSheetAsPDF')
// .addItem('Export selected area', 'exportPartAsPDF')
// .addItem('Export predefined area', 'exportNamedRangesAsPDF')
.addItem('Download range A1:A13', 'downloadSpecificRangeAsPDF')
.addToUi()
}
function downloadSpecificRangeAsPDF() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Print this using url and using default function");
var specificRangeA1 = 'A2:A13';
var range = sheet.getRange(specificRangeA1);
var backgrounds = range.getBackgrounds();
var fontfamily = range.getFontFamilies().flat();
var fontstyles = range.getFontStyles();
var fontweight = range.getFontWeights();
var fontsize = range.getFontSizes().flat();
var fontcolor = range.getFontColorObjects().flat();
var values = range.getValues();
var sheetName = ss.getName();
var docId = DocumentApp.create(sheetName).getId();
var doc = DocumentApp.openById(docId);
var docUrl = doc.getUrl();
console.log(docUrl);
var fileName = doc.setName(sheetName);
var body = doc.getBody();
var table = body.appendTable(values);
console.log(fontstyles);
for(let i = 0; i < table.getNumRows(); i++){
var style = {};
style[DocumentApp.Attribute.FONT_FAMILY] = fontfamily[i];
style[DocumentApp.Attribute.FONT_SIZE] = fontsize[i];
style[DocumentApp.Attribute.FOREGROUND_COLOR] = fontcolor[i].asRgbColor().asHexString();
style[DocumentApp.Attribute.BOLD] = fontweight[i] == 'bold' ? true: false;
console.log(style)
table.getCell(i,0).setBackgroundColor(backgrounds[i]);
if(style.FOREGROUND_COLOR != '#ff000000'){
table.getRow(i).setAttributes(style);
}
}
doc.saveAndClose();
const url = "https://docs.google.com/document/d/" + docId + "/export" +
"?format=pdf"
downloadPDF(fileName, url, header = "Downloading: " + fileName)
}
function downloadPDF(fileName, url, header){
fileName += '.pdf';
var res = UrlFetchApp.fetch(url, {
headers: { Authorization: 'Bearer ' + ScriptApp.getOAuthToken() },
muteHttpExceptions: true,
});
SpreadsheetApp.getUi().showModelessDialog(
HtmlService.createHtmlOutput(
'<a target ="_blank" download="' +
fileName +
'" href = "data:application/pdf;base64,' +
Utilities.base64Encode(res.getContent()) +
'">Click here</a> to download, if download did not start automatically' +
' \
var a = document.querySelector("a"); \
a.addEventListener("click",()=>{setTimeout(google.script.host.close,300)}); \
a.click(); \
'
).setHeight(50),
header? header : 'Downloading PDF..'
);
}
它的作用是创建一个 Google 文档,然后我更改 URL 以使用创建的 Google 文档将其下载为 PDF。
截图: