首页 > 解决方案 > 如何在应用脚本中使用相同的渲染从 HTML 中保存 PDF

问题描述

我需要在我的 Google Drive 中将 HTML 网页另存为 pdf。我正在使用应用程序脚本。
但是,PDF 的呈现方式与 HTLM 页面不同。我需要 PDF 与 HTML 相同。

这是 HTML 的打印屏幕

在此处输入图像描述

这是我的代码:

function downloadFile() {

var fileURL = "http....." 
var folder = "primes"
var fileName = "";
var fileSize = "";

var response = UrlFetchApp.fetch(fileURL, {
    headers: { Authorization: 'Bearer ' + ScriptApp.getOAuthToken() },
})
var htmlBody = response.getContentText();
var rc = response.getResponseCode();

if (rc == 200) {

var blob = Utilities.newBlob(htmlBody, 
MimeType.HTML).getAs('application/pdf').setName('Nota.pdf');
var folder = DriveApp.getFolderById("1gBA8YCs3PH7v7CNl3nlsjNqYzhOxhjYa");
if(folder != null){
  var file = folder.createFile(blob);
  fileName = file.getName()
  fileSize = file.getSize()
 }
}
var fileInfo = {'rc':rc,"filename": fileName, "fileSize":fileSize}

Logger.log(fileInfo)

 }

!!!!更新!!!!!!

这是我得到的输出:

在此处输入图像描述

我知道可以正确保存此 PDF,因为如果使用名为 HTML TO PDF 的 chrome 扩展,它会正确转换,如下图所示

在此处输入图像描述

标签: javascripthtmlxmlgoogle-apps-script

解决方案


只需从命令行使用 chrome,无需 puppet 或任何其他应用程序。

在此处输入图像描述

--headless --disable-gpu --enable-logging --print-to-pdf="%UserProfile%\Documents\Demofile.pdf" --no-margins --disable-extensions --print-to-pdf-no-header --disable-popup-blocking  --run-all-compositor-stages-before-draw --disable-checker-imaging  https://bling.com.br/doc.view.php?id=2565744b051b9f1d3177c30ccf1e65b2

PROs 就像在浏览器中呈现 HTML

缺点 与 HTML 页面完全一样,将从浏览器保存为PORTRAIT PDF(命令行默认为 Landscape=false),因此要更改布局,您需要另一种方法。


推荐阅读