- Вы хотите извлечь текст из файлов PDF, используя
doc.getBody().getText()
. - MimeType для файла PDF:
application/pdf
. - Вы хотите добиться этого с помощью Google AppsСценарий.
Если мое понимание верно, как насчет этой модификации? Пожалуйста, подумайте об этом как об одном из нескольких ответов.
Точки изменения:
- К сожалению, на данном этапе файл PDF не может быть открыт напрямую с помощью
DocumentApp.openByUrl()
и DocumentApp.openById()
. В этом случае сначала файл PDF необходимо преобразовать в документ Google. Таким образом, его можно открыть с помощью DocumentApp.openByUrl()
и DocumentApp.openById()
.
Модифицированный скрипт:
В этом модифицированном скрипте используется метод Files: копия Drive API. ,Поэтому, прежде чем использовать этот сценарий, , пожалуйста, включите Drive API в расширенных службах Google.
//Folder ID
var myFolderID = "XXXXXXXXXXXXXXXXXXXXXXXXX";
/**
Get PDF files from the folder and return them in an array
*/
function GetPdfFiles(){
var pdfFiles = [];
var files = DriveApp.getFolderById(myFolderID).getFiles();
while(files.hasNext())
{
var file = files.next();
//retrieve only pdf files (non-pdf files need to be ignored)
if (file.getMimeType() == MimeType.PDF) { // Check the mimeType.
// Convert PDF file to Google Document
var id = Drive.Files.copy({mimeType: MimeType.GOOGLE_DOCS}, file.getId()).id;
//Add to the array the file data
pdfFiles.push(id);
}
}
return pdfFiles;
}
/**
Do some operations to each PDF file
*/
function DoSomeOperations(pdfFiles){
for(var i = 0; i < pdfFiles.length; i++)
{
//The below line of code doesn't work
// var doc = DocumentApp.openByUrl(pdfFiles[i].getUrl()); // This is not used.
//I also tried the below code instead of the above line of code
var doc = DocumentApp.openById(pdfFiles[i]);
/*Ideally, do some operation to each PDF file here */
/*I was hoping to use something like this: */
var textFromPdfFile = doc.getBody().getText();
/*But I cannot get this "doc" in the first place.*/
// Drive.Files.remove(pdfFiles[i]); // If you want to delete the converted file, please use this line.
}
}
function Main(){
var pdfFiles = GetPdfFiles();
DoSomeOperations(pdfFiles);
}
Ссылки:
Если я неправильно понял ваш вопрос и это не то направление, в котором вы хотите, я приношу свои извинения.
Редактировать:
- Вы хотите преобразовать файл PDF в Google Document, если имя файла преобразованного документа Google не существует.
Если мое понимание верно, как насчет этой модификации? Пожалуйста, измените приведенный выше сценарий следующим образом.
Шаблон 1:
Использовали ли вы эту строку Drive.Files.remove(pdfFiles[i]);
в моем приведенном выше сценарии? При использовании этой строки преобразованный документ Google всегда удаляется. В этом случае файлы Документов Google с тем же именем файла не создаются. Как насчет этого?
Шаблон 2:
Если вы не хотите использовать Drive.Files.remove(pdfFiles[i]);
, как насчет следующей модификации? Пожалуйста, измените функцию GetPdfFiles()
следующим образом. Благодаря этой модификации, когда существует то же имя файла документа Google, файл PDF не преобразуется.
С:
// Convert PDF file to Google Document
var id = Drive.Files.copy({mimeType: MimeType.GOOGLE_DOCS}, file.getId()).id;
//Add to the array the file data
pdfFiles.push(id);
До:
var existingFile = DriveApp.getFilesByName(file.getName().split(".")[0]);
if (!(existingFile.hasNext() && existingFile.next().getMimeType() == MimeType.GOOGLE_DOCS)) {
// Convert PDF file to Google Document
var id = Drive.Files.copy({mimeType: MimeType.GOOGLE_DOCS}, file.getId()).id;
//Add to the array the file data
pdfFiles.push(id);
}