谷歌应用程序脚本OCR PDF到文本页码限制

谷歌应用程序脚本OCR PDF到文本页码限制,pdf,google-sheets,ocr,Pdf,Google Sheets,Ocr,我对谷歌脚本非常陌生。我在谷歌硬盘的文件夹里有一些pdf文件,我正在尝试将pdf转换为谷歌文档并提取特定文本。PDF有200多页,但即使是google.doc文件也仅限于80页。您可以运行OCR的页面数量是否有限制?或者我错过了什么 我的代码如下: //#####全球的##### SHEET=“提取”//图纸选项卡名称 /*######################################################## 主运行文件:从PDF及其文件中提取学生ID 来自多个文档的

我对谷歌脚本非常陌生。我在谷歌硬盘的文件夹里有一些pdf文件,我正在尝试将pdf转换为谷歌文档并提取特定文本。PDF有200多页,但即使是google.doc文件也仅限于80页。您可以运行OCR的页面数量是否有限制?或者我错过了什么

我的代码如下:

//#####全球的#####

SHEET=“提取”//图纸选项卡名称

/*########################################################

  • 主运行文件:从PDF及其文件中提取学生ID
  • 来自多个文档的PDF名称的节
  • 在Google工作表中显示学生和部分的列表
*/

函数extractInfo(){
const ss=SpreadsheetApp.getActiveSpreadsheet()
//获取所有PDF文件:
const folder=DriveApp.getFolderById(文件夹ID);
//const files=folder.getFiles();
const files=folder.getFilesByType(“application/pdf”);
让allInfo=[]
//遍历每个folderr
while(files.hasNext()){
Logger.log(“第一次调用”);
让file=files.next();
让fileID=file.getId();
const doc=getTextFromPDF(fileID);
const invDate=提取invDate(doc.text);
allInfo=allInfo.concat(invDate);
Logger.log(“allInfo数组的长度:”)
Logger.log(allInfo.length);
}
importToSpreadsheet(allInfo);//这是80页,尽管pdf有200多页
//每页所需文本(发票日期)
};
/*########################################################
*从PDF中提取文本并将其存储在内存中。
*还提取文件名。
*
*param{string}:fileID:将从中提取文本的PDF的文件ID。
*
*返回{array}:包含文件名和PDF文本。
*
*/
函数getTextFromPDF(fileID){
var blob=DriveApp.getFileById(fileID).getBlob()
变量资源={
标题:blob.getName(),
mimeType:blob.getContentType()
};
变量选项={
是的,
语言:“en”
};
//使用ocr将pdf转换为Google文档。
var file=Drive.Files.insert(资源、blob、选项);
//从新创建的文本中获取文本。
var doc=DocumentApp.openById(file.id);
var text=doc.getBody().getText();
var title=doc.getName();
//存储文本后,删除文档。
Drive.Files.remove(doc.getId());
返回{
姓名:职务,,
文本:文本
};
}
函数提取日期(文本){
const regexp=/Invoice Date:/g;//注释掉\d{2}\/\d{2}\/\d{4}/gi;
试一试{
让数组=[…text.match(regexp)];
返回数组;
}捕获(e){
}
};
功能导入电子表格(数据){
const sheet=SpreadsheetApp.openById(SS).getSheetByName(sheet);
常量范围=sheet.getRange(3,1,数据长度,1);
var j=0;
对于(j=0;j
Hi您是否比较了pdf文件和转换后的文档中缺少的内容?我没有200页的pdf示例,但我在一个30页的文件上尝试了它,它被转换为26页的文档,删除了一些格式和空格。如果可能的话,你能和我分享一个pdf文件样本,让我也可以试试吗?如果您决定共享示例文件hi,@RonM,请注意删除pdf文件中的敏感信息。谢谢你愿意帮忙。我将转换后的文档与我的pdf进行了比较。它显然遗漏了第80页之后的内容。您可以在下面找到我的谷歌硬盘上的示例文件链接。它包含100页(每页下面插入页码)。在注释掉Drive.Files.remove(doc.getId())行之后,我在这个示例文件上运行代码;文档文件的100页中有80页。显然,这段代码中涉及的内容有80页的限制,但我无助地无法理解。再次感谢。对不起,你能分享到你的示例文件的链接吗?对不起,忘了:)另外,我刚刚发现OCR只扫描pdf的前80页。此信息的链接是:(阅读蓝星注释)如果你找到工作,请告诉我。再次感谢。
const FOLDER_ID = "1rlAL4WrnxQ6pEY2uOmzWA_csUIDdBjVK"; //Folder ID of all PDFs
const SS = "1XS_YUUdu9FK_bBumK3lFu9fU_M9w7NGydZqOzu9vTyE";//The spreadsheet ID
cons
function extractInfo(){
  const ss = SpreadsheetApp.getActiveSpreadsheet()
  //Get all PDF files:
  const folder = DriveApp.getFolderById(FOLDER_ID);
  //const files = folder.getFiles();
  const files = folder.getFilesByType("application/pdf");
  
  let allInfo = []
  //Iterate through each folderr
  while(files.hasNext()){
    Logger.log('first call');
    let file = files.next();
    let fileID = file.getId();
   
    const doc = getTextFromPDF(fileID);
    const invDate = extractInvDate(doc.text);
    
        
    allInfo = allInfo.concat(invDate);

Logger.log("Length of allInfo array: ")
Logger.log(allInfo.length);
    
  }
    importToSpreadsheet(allInfo);       //this is 80, even though pdf has more than 200 pages with
                                        //required text (invoice date) on each page
};


/*########################################################
 * Extracts the text from a PDF and stores it in memory.
 * Also extracts the file name.
 *
 * param {string} : fileID : file ID of the PDF that the text will be extracted from.
 *
 * returns {array} : Contains the file name  and PDF text.
 *
 */
function getTextFromPDF(fileID) {
  var blob = DriveApp.getFileById(fileID).getBlob()
  var resource = {
    title: blob.getName(),
    mimeType: blob.getContentType()
  };
  var options = {
    ocr: true, 
    ocrLanguage: "en"
  };
  // Convert the pdf to a Google Doc with ocr.
  var file = Drive.Files.insert(resource, blob, options);

  // Get the texts from the newly created text.
  var doc = DocumentApp.openById(file.id);
  var text = doc.getBody().getText();
  var title = doc.getName();
  
  // Deleted the document once the text has been stored.
  Drive.Files.remove(doc.getId());
  
  return {
    name:title,
    text:text
  };
}


function extractInvDate(text){
  const regexp = /Invoice Date:/g;//commented out \d{2}\/\d{2}\/\d{4}/gi;
  try{
    let array = [...text.match (regexp)];
    return array;
  }catch(e){
    
  }
};


function importToSpreadsheet(data){
  const sheet = SpreadsheetApp.openById(SS).getSheetByName(SHEET);
  
  const range = sheet.getRange(3,1,data.length,1);
  
  var j = 0;
  for (j = 0; j < data.length; j++){
    Logger.log(j);
  range.getCell(j+1,1).setValue(data[j]);
  }
  //range.sort([2,1]);
}