gpt4 book ai didi

pdf - Google 应用程序脚本 getAs ('application/pdf' ) 布局

转载 作者:行者123 更新时间:2023-12-01 00:25:36 24 4
gpt4 key购买 nike

我正在使用我找到的应用程序脚本从电子表格生成 PDF 文件 here .
这个用的好老
方法 getAs('application/pdf') 并且效果很好。

问题在于以这种方式生成的 PDF 文档具有不需要的不对称边距(右侧较大,左侧较窄)。我只是想让页面居中。奇怪的是,当我从 Google 菜单 File -> Print(或 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') 方法。所以我假设该方法(和菜单打印选项)使用无法修改的默认参数。有什么解决办法吗? “打印或更改页面设置”帮助页面没有太大帮助。

    非常感谢

    最佳答案

    尝试基于 https://ctrlq.org/code/19869-email-google-spreadsheets-pdf 的解决方案

    使用导出 url 参数,您可以为结果 pdf 设置所需的选项。您还可以设置要导出的工作表的特定 id,因此您不再需要复制整个电子表格。

    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;

    SpreadsheetApp.getActiveSpreadsheet().toast('Creando PDF');

    // export url
    var url = 'https://docs.google.com/spreadsheets/d/'+sourceSpreadsheet.getId()+'/export?exportFormat=pdf&format=pdf' // export as pdf / csv / xls / xlsx
    + '&size=A4' // paper size legal / letter / A4
    + '&portrait=true' // orientation, false for landscape
    + '&fitw=false' // fit to page width, false for actual size
    + '&sheetnames=false&printtitle=false' // hide optional headers and footers
    + '&pagenumbers=false&gridlines=false' // hide page numbers and gridlines
    + '&fzr=false' // do not repeat row headers (frozen rows) on each page
    + '&gid='+sourceSheet.getSheetId(); // the sheet's Id

    var token = ScriptApp.getOAuthToken();

    // request export url
    var response = UrlFetchApp.fetch(url, {
    headers: {
    'Authorization': 'Bearer ' + token
    }
    });

    var theBlob = response.getBlob().setName(pdfName+'.pdf');

    // delete pdf if already exists
    var files = folder.getFilesByName(pdfName);
    while (files.hasNext())
    {
    files.next().setTrashed(true);
    }

    // create pdf
    var newFile = folder.createFile(theBlob);

    return true;
    }

    关于pdf - Google 应用程序脚本 getAs ('application/pdf' ) 布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45209619/

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