问题描述
API 已启用并遵循原始帖子的说明:ERROR Get pdf-attachments from Gmail as text 但它在我的情况下不起作用。
出现错误:
var blob = attachments[0].getAs(MimeType.PDF);
Converting from application/octet-stream to application/pdf is not supported. (line 16,file "bla bla")
因此,我将附件的 contentType 设置为“appl ication/pdf”。
var attachments = message.getAttachments();
attachments[0].setContentType("application/pdf");
Exception: Converting from application/pdf to application/pdf is not supported.(line 17,file "bla bla")
原始代码未更改:
/**
* Get messages labeled 'templabel',and send myself the text contents of
* pdf attachments in new emails.
*/
function myFunction() {
var threads = GmailApp.search('label:invoices-parsed');
var threadsMessages = GmailApp.getMessagesForThreads(threads);
for (var thread = 0; thread < threadsMessages.length; ++thread) {
var message = threadsMessages[thread][0];
var messageBody = message.getBody();
var messageSubject = message.getSubject();
var attachments = message.getAttachments();
attachments[0].setContentType("application/pdf");
var blob = attachments[0].getAs(MimeType.PDF);
var filetext = pdfToText( blob,{keepTextfile: false} );
GmailApp.sendEmail(Session.getActiveUser().getEmail(),messageSubject,filetext);
}
}
/**
* See gist: https://gist.github.com/mogsdad/e6795e438615d252584f
*
* Convert pdf file (blob) to a text file on Drive,using built-in OCR.
* By default,the text file will be placed in the root folder,with the same
* name as source pdf (but extension 'txt'). Options:
* keepPdf (boolean,default false) Keep a copy of the original PDF file.
* keepGdoc (boolean,default false) Keep a copy of the OCR Google Doc file.
* keepTextfile (boolean,default true) Keep a copy of the text file.
* path (string,default blank) Folder path to store file(s) in.
* ocrLanguage (ISO 639-1 code) Default 'en'.
* textResult (boolean,default false) If true and keepTextfile true,return
* string of text content. If keepTextfile
* is false,text content is returned without
* regard to this option. Otherwise,return
* id of textfile.
*
* @param {blob} pdfFile Blob containing pdf file
* @param {object} options (Optional) Object specifying handling details
*
* @returns {string} id of text file (default) or text content
*/
function pdfToText ( pdfFile,options ) {
// Ensure Advanced Drive Service is enabled
try {
Drive.Files.list();
}
catch (e) {
throw new Error( "To use pdfToText(),first enable 'Drive API' in Resources > Advanced Google Services." );
}
// Set default options
options = options || {};
options.keepTextfile = options.hasOwnProperty("keepTextfile") ? options.keepTextfile : true;
// Prepare resource object for file creation
var parents = [];
if (options.path) {
parents.push( getDriveFolderFromPath (options.path) );
}
var pdfName = pdfFile.getName();
var resource = {
title: pdfName,mimeType: pdfFile.getContentType(),parents: parents
};
// Save PDF to Drive,if requested
if (options.keepPdf) {
var file = Drive.Files.insert(resource,pdfFile);
}
// Save PDF as GDOC
resource.title = pdfName.replace(/pdf$/,'gdoc');
var insertOpts = {
ocr: true,ocrLanguage: options.ocrLanguage || 'en'
}
var gdocFile = Drive.Files.insert(resource,pdfFile,insertOpts);
// Get text from GDOC
var gdocDoc = DocumentApp.openById(gdocFile.id);
var text = gdocDoc.getBody().getText();
// We're done using the Gdoc. Unless requested to keepGdoc,delete it.
if (!options.keepGdoc) {
Drive.Files.remove(gdocFile.id);
}
// Save text file,if requested
if (options.keepTextfile) {
resource.title = pdfName.replace(/pdf$/,'txt');
resource.mimeType = MimeType.PLAIN_TEXT;
var textBlob = Utilities.newBlob(text,MimeType.PLAIN_TEXT,resource.title);
var textFile = Drive.Files.insert(resource,textBlob);
}
// Return result of conversion
if (!options.keepTextfile || options.textResult) {
return text;
}
else {
return textFile.id
}
}
// From: http://ramblings.mcpher.com/Home/excelquirks/gooscript/driveapppathfolder
function getDriveFolderFromPath (path) {
return (path || "/").split("/").reduce ( function(prev,current) {
if (prev && current) {
var fldrs = prev.getFoldersByName(current);
return fldrs.hasNext() ? fldrs.next() : null;
}
else {
return current ? null : prev;
}
},DriveApp.getRootFolder());
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)