【发布时间】:2017-12-25 20:24:25
【问题描述】:
我正在使用我找到的应用脚本 here 从电子表格生成 PDF 文件。 这个用好旧的 方法 getAs('application/pdf') 效果很好。
问题在于以这种方式生成的 PDF 文档具有不需要的不对称边距(右侧较大,左侧较窄)。我只是想让页面居中。奇怪的是,当我从 Google 菜单文件 -> 打印(或 Ctrl + P)打印时,文档显示正确居中。
我的代码如下所示:
function CreaPDF() {
//The function prints an invoice to PDF. First it copies spreadsheet to a new document.
//Deletes all sheet except the one to print. Saves it to PDF.
//It overwrites any existing doc with same name.
var sourceSpreadsheet = SpreadsheetApp.getActive();
var sheetName = "Factura";
var folderID = getParentFolder(); // Folder id to save in a folder.
var sourceSheet = sourceSpreadsheet.getSheetByName(sheetName);
var folder = DriveApp.getFolderById(folderID);
var numf = sourceSpreadsheet.getRangeByName("NumeroFactura").getValue();
var anof = numf.split("/",2); // Seeks number and year -> filename
var pdfName = anof[1] +"_Factura_" + anof[0]+ "_Dra_Salazar"; // Nombre del documento;
//Copy whole spreadsheet 2 temporary sheet
var destSpreadsheet = SpreadsheetApp.open(DriveApp.getFileById(sourceSpreadsheet.getId()).makeCopy("tmp_convert_to_pdf", folder))
//delete redundant sheets
var sheets = destSpreadsheet.getSheets();
for (i = 0; i < sheets.length; i++) {
if (sheets[i].getSheetName() != sheetName){
destSpreadsheet.deleteSheet(sheets[i]);
}
}
//Deletes pdf if already exists
var files = DriveApp.getFilesByName(pdfName);
while (files.hasNext()) {
files.next().setTrashed(true);
}
var destSheet = destSpreadsheet.getSheets()[0];
//repace cell values with text (to avoid broken references)
var sourceRange = sourceSheet.getRange(1, 1,sourceSheet.getMaxRows(),sourceSheet.getMaxColumns());
var sourcevalues = sourceRange.getDisplayValues();
var destRange = destSheet.getRange(1, 1, destSheet.getMaxRows(), destSheet.getMaxColumns());
destRange.setValues(sourcevalues);
SpreadsheetApp.getActiveSpreadsheet().toast('Creando PDF');
//save to pdf
var theBlob = destSpreadsheet.getBlob().getAs('application/pdf').setName(pdfName);
var newFile = folder.createFile(theBlob);
//Delete the temporary sheet
DriveApp.getFileById(destSpreadsheet.getId()).setTrashed(true);
return true;
}
我打印时的设置是:
- 纸张尺寸:“A4”
- 比例:“正常”(我也试过:“适合宽度”和 “适合页面”)
- 方向:“纵向”
- 边距:“正常”
正如Google Help Forums 中所见,这似乎是谷歌打印方式的一个老问题。总之,似乎没有保存打印设置,也没有办法将任何参数传递给 getAs('application/pdf') 方法。所以我假设该方法(和菜单打印选项)使用无法修改的默认参数。有什么解决办法吗? “打印或更改页面设置”帮助页面没有太大帮助。
非常感谢
【问题讨论】:
-
这个答案有更多参数,例如如何设置边距:stackoverflow.com/questions/46088042/…
标签: pdf printing google-apps-script