如何将多个 URL 转换为一系列单独的 PDF?

问题描述 投票:0回答:1

我有一个问题。 我有一个包含一长串 URL(其中数百个)的文件,我需要将它们转换为一系列单独的 docx 文件 PDF,以便能够在 NVIVO 中进一步使用它们。

谷歌搜索后,我发现这个讨论完全符合我的问题。我尝试按照说明进行操作 - 创建了一个 Google 表格,为我的案例采用了一个代码,但它没有用 - 相反我收到一条消息“在获取对象 DriveApp 上的方法或属性 getFileById 时出现意外错误”。调试时,我被告知 documentundefined。我是使用 Google App Script 的新手,所以我不知道我到底做错了什么。你能帮帮我吗?

这是我使用的代码:

function convertDocuments() {
  /* Select the Spreadsheet */
  const SS_ID = "1_4rjweZYHTTed6j740rVSZIFVPsrww6KvKwFikmlOzM"
  const SS = SpreadsheetApp.openById(SS_ID)
  const PDF_MIME = "application/pdf"
  const newFolder = DriveApp.createFolder('PDFs')
  /* Get the links */
  const getLinks = SS.getRange('A1:A51').getValues()
  getLinks.forEach((cells)=>{
    const link = cells[0]
    if(link==="") return
    /* Getting the ID from the URL */
    const parseID = link.toString().split("/")[7]
    /* CREATE THE PDF */
    const document = DriveApp.getFileById(parseID).getAs(PDF_MIME).copyBlob()
    /* Inserting the PDF into the file */
    newFolder.createFile(document)
  })
  Logger.log(newFolder.getUrl())
  /* downloadFolder(newFolder.getId()) */
}

这是我尝试测试的 Google 表格:https://docs.google.com/spreadsheets/d/1_4rjweZYHTTed6j740rVSZIFVPsrww6KvKwFikmlOzM/edit?usp=sharing

谢谢!

google-apps-script google-sheets pdf url
1个回答
0
投票

您想将外部 URL 列表保存为 PDF。基于转换 Doc URLS 列表的脚本被无意中用作脚本的基础。

下面的答案采用了您的脚本的实质内容,并采用了将网页另存为 Google Doc(或 PDF)到云端硬盘中描述的方法,以将每个 URL 保存为 PDF。

这个脚本可以更高效,但就目前而言,它在@100 秒内处理 50 个 URL。

注意有一个失败:

  • http://www.kremlin.ru/events/president/transcripts/articles/5413/photos/print
    返回 404 错误。

function saveURLAsPDF() {
  var ss = SpreadsheetApp.getActiveSpreadsheet()
  var sheetName = "Sheet1"
  var sheet = ss.getSheetByName(sheetName)
  var data = sheet.getDataRange().getValues()
  var links = data.map(function(e){return e[0]})
  //Logger.log(links) // DEBUG

  // Create a new folder
  var parentFolderId = "1wL9AyFsAgIjFruQSLfTmTX3uYEU7z9FV"
  var parentFolder = DriveApp.getFolderById(parentFolderId);
  var pdfFolder = parentFolder.createFolder("PDFS");

  // create array to track errors
  var errors = []

  for (var i=0;i<links.length;i++){
    //Logger.log("DEBUG: i"+i+", url:"+links[i])
    var url = links[i]
    var parseID = url.toString().split("/")[7]
    //Logger.log(parseID)
    var pdfName = parseID+".pdf"
    //Logger.log("DEBUG: i:"+i+", name: "+pdfName)
    try{
      var response = UrlFetchApp.fetch(url);
      var htmlBody = response.getContentText();
      var blob = Utilities.newBlob(htmlBody, 'text/html').getAs('application/pdf').setName(pdfName);
      pdfFolder.createFile(blob);
      errors.push(['OK'])
    }
    catch (error){
      errors.push(["failed"])
    }
  }
  sheet.getRange(1,2,links.length,1).setValues(errors)
}
© www.soinside.com 2019 - 2024. All rights reserved.