18910140161

JavaScript-如何在应用程序脚本中以相同的呈现从HTML保存PDF-堆栈溢出

顺晟科技

2022-10-19 12:01:46

104

我需要将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到PDF的chrome扩展,它将正确转换,如下图所示


顺晟科技:

最好的方法是通过木偶师。Puppeteer是一个nodejs库,它可以启动一个无头的WebBrowser。

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)

 }

专业: 使用可选文本提供非常干净的输出 缺点: 您必须在nodejs服务器上运行此代码才能获得最佳结果

有关puppeteer视图的更多文档https://pptr.dev/#?product=puppeteer&version=v10.4.0&show=api-pagepdfoptions

只需从命令行使用chrome,不需要木偶或任何其他应用程序。

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)

 }

与浏览器中呈现的HTML完全相同

与HTML页面完全相同的是,浏览器将保存为portrain PDF(命令行默认值为slendape=false),因此要更改布局,需要另一种方法。

  • TAG:
相关文章
我们已经准备好了,你呢?
2024我们与您携手共赢,为您的企业形象保驾护航