我一直在尝试学习谷歌应用程序脚本,以减少我对宏的依赖。我一直试图通过创造一些东西来学习它。我有一半使用电子表格创建了一个双重记账系统,因此我可以自动创建发票,记录费用并协调银行交易。
我陷入困境的一点是导入费用收据。我一直在手机上使用谷歌驱动器应用程序扫描收据,生成PDF格式并上传到谷歌驱动器。这是一个方便的应用程序,因为它很容易调整大小,重命名和上传。
我想要的是创建一个脚本,它将从文件夹中拾取文件(图像或pdf),并在屏幕的一侧显示文件,然后有日期,类别,数量等字段,我可以在一个屏幕上阅读它们并输入所有数据。图像很容易,但我无法弄清楚如何用PDF格式化。这是我试过的:
1)在UiApp中将pdf作为图像打开
function openPdfAsImage(pdfUrl) {
var app = UiApp.createApplication();
app.add(app.createImage(pdfUrl));
ss.show(app); // Display the app
}
这不够公平,不是图像。尝试将其转换为blob然后再转换为图像不起作用,因为我无法将pdf blob转换为图像blob。
PS作为附注,我发现(感谢stackoverflow)我需要使用驱动器地址,例如“https://drive.google.com/a/appsaccount.com/fileIdNumberOrWhatever”,但由于我是商业用户的应用程序,有什么方法可以获得这个通过脚本而不是硬编码来解决它? 答:如果有人读到这个,你可以从以下网址获取网址:
var downloadUrl = DriveApp.getFilesById('YourFileId').getDownloadUrl();
2)然后我尝试嵌入文档,因为查看器有一个选项可以获取iFrame的代码。我试过这个:
function openPdfAsImage(pdfUrl) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var app = UiApp.createApplication();
app.add(app.createHTML('<iframesrc="https://docs.google.com/a/appsaccount.com/file/d/0BxQjxnVa4KJffHaFBDsTzVUNCTDQ/preview" width="640" height="480"></iframe>'));
ss.show(app); // Display the app
}
但唉,这不起作用,因为它似乎不允许iframe
3)然后我尝试将pdf转换为google文档,然后打开文档并提取图像,显示它们。当您强制它将pdf作为文档打开时,它可以通过Web工作,它将pdf转换为google doc并在第一页上显示图像并尝试在第二页上重建文本。我试过了:
function getImagesFromPdf(pdfId) {
// Open the pdf as a document, I hoped this would convert the file and put an
// image into the google doc the same as if you open it via the web browser
var pdfAsDoc = DocumentApp.openById(pdfId); // Instead it causes an error
// Get the images out of the document
var docImages = pdfAsDoc.getBody().getImages();
return docImages;
}
但是即使这样也行不通,当你尝试打开pdf时它只会导致错误。即使它确实有效,我也必须将图像保存回谷歌驱动器,获取URL的谷歌驱动器版本,以便它可以在UiApp中显示。不知道为什么我不能将Image对象传递给UiApp。
我的选择似乎是:
我上面做错了吗?或者是否有一个我想念的更简单的解决方案?这是非常令人沮丧的,因为所有功能似乎都存在,而不是通过脚本。或者因为答案在这里似乎不存在,这是否意味着我试图以一种无意的方式使用它?
非常感谢任何帮助/指导/建议。