如何使用 Google Apps 脚本 export/convert Google PDF 文档?
How to export/convert Google Doc in PDF with Google Apps Script?
我正在尝试使用 Google Apps 脚本从 Google Drive 执行 2 个操作:
- 正在从 Google 文档模板创建文件并在该文件中插入数据
- 正在将此 Google Doc 文件导出到 Google 驱动器中的 PDF 文件(同时)
第 1 步有效:已正确创建 Google 文档文件,并在其中更新了值。
第 2 步:我有 2 个 questions/problems:
- 我发现生成 PDF 的代码已将所有 Google 文档文件转换为 PDF 文件,但在我这边,我只需要 export/convert 已创建的文件(并非所有文件都已位于该文件夹中)。
- 尽管第 1 点,脚本正在运行并生成了 PDF,但是当我打开 PDF 文件时,其中添加的值已经丢失,我只有模板中存在的标签。
你有什么想法吗?
这是代码:
function replaceTags () {
// Global vars
var ui = DocumentApp.getUi ();
var date = Utilities.formatDate(new Date(), "GMT", "dd-MM-yyyy");
var folderOutId = 'xxxxxxxxxxxxxxxxxxxx';
var tplMaintenanceId = 'xxxxxxxxxxxxxxxxxxxx';
var fileOutName = 'my file name';
var clientCompany = ui.prompt ('Company Name :');
// Do a copy from template file to a new file inside a specific folder
targetFolder = DriveApp.getFolderById (folderOutId);
var documentId = DriveApp.getFileById (tplMaintenanceId). makeCopy (targetFolder). getId ();
// Rename filed copied
DriveApp.getFileById (documentId) .setName (fileOutName + ' - ' + clientCompany.getResponseText ());
// Add document body inside variable
var body = DocumentApp.openById (documentId) .getBody ();
// Insert data inside Google Doc document
body.replaceText ('##DATE##', date);
body.replaceText ('##CLIENT_COMPANY##', clientCompany.getResponseText ());
gdocToPDF(documentId);
}
function gdocToPDF(fileID) {
var documentRootfolder = DriveApp.getFolderById("xxxxxxxxxxxxxxxxxxxx") // replace this with the ID of the folder that contains the documents you want to convert
var pdfFolder = DriveApp.getFolderById("xxxxxxxxxxxxxxxxxxxx"); // replace this with the ID of the folder that the PDFs should be put in.
var docFile = DriveApp.getFileById(fileID)
createPDF(docFile.getId(), pdfFolder.getId(), function (fileID, folderID) {
if (fileID) createPDFfile(fileID, folderID);
}
)
}
function createPDF(fileID, folderID, callback) {
var templateFile = DriveApp.getFileById(fileID);
var templateName = templateFile.getName();
var existingPDFs = DriveApp.getFolderById(folderID).getFiles();
//in case no files exist
if (!existingPDFs.hasNext()) {
return callback(fileID, folderID);
}
for (; existingPDFs.hasNext();) {
var existingPDFfile = existingPDFs.next();
var existingPDFfileName = existingPDFfile.getName();
if (existingPDFfileName == templateName + ".pdf") {
Logger.log("PDF exists already. No PDF created")
return callback();
}
if (!existingPDFs.hasNext()) {
Logger.log("PDF is created")
return callback(fileID, folderID)
}
}
}
function createPDFfile(fileID, folderID) {
var templateFile = DriveApp.getFileById(fileID);
var folder = DriveApp.getFolderById(folderID);
var theBlob = templateFile.getBlob().getAs('application/pdf');
var newPDFFile = folder.createFile(theBlob);
var fileName = templateFile.getName().replace(".", ""); //otherwise filename will be shortened after full stop
newPDFFile.setName(fileName + ".pdf");
}
我尝试重新创建您的代码并成功将文档转换为 pdf。
您可以做的是编辑您的 gdocToPDF() 函数以仅接受您想要转换为 PDF 的文档。请看下面的示例代码(可能不是您想要的):
将 replaceTags() 函数中使用的文档 ID 传递给 gdocToPDF()
function replaceTags () {
....
....
DocumentApp.openById(documentId).saveAndClose()
gdocToPDF(documentId);
}
不是获取驱动器文件夹中的所有文件,而是使用此代码来仅使用带有替换标签的文件
function gdocToPDF(fileID) {
var documentRootfolder = DriveApp.getFolderById(folder-id) // replace this with the ID of the folder that contains the documents you want to convert
var pdfFolder = DriveApp.getFolderById(folder-id); // replace this with the ID of the folder that the PDFs should be put in.
var docFile = DriveApp.getFileById(fileID)
createPDF(docFile.getId(), pdfFolder.getId(), function (fileID, folderID) {
if (fileID) createPDFfile(fileID, folderID);
}
)
}
这会将 doc 转换为 pdf 到您想要转换的唯一文档。
祝你有美好的一天!
我正在尝试使用 Google Apps 脚本从 Google Drive 执行 2 个操作:
- 正在从 Google 文档模板创建文件并在该文件中插入数据
- 正在将此 Google Doc 文件导出到 Google 驱动器中的 PDF 文件(同时)
第 1 步有效:已正确创建 Google 文档文件,并在其中更新了值。
第 2 步:我有 2 个 questions/problems:
- 我发现生成 PDF 的代码已将所有 Google 文档文件转换为 PDF 文件,但在我这边,我只需要 export/convert 已创建的文件(并非所有文件都已位于该文件夹中)。
- 尽管第 1 点,脚本正在运行并生成了 PDF,但是当我打开 PDF 文件时,其中添加的值已经丢失,我只有模板中存在的标签。
你有什么想法吗?
这是代码:
function replaceTags () {
// Global vars
var ui = DocumentApp.getUi ();
var date = Utilities.formatDate(new Date(), "GMT", "dd-MM-yyyy");
var folderOutId = 'xxxxxxxxxxxxxxxxxxxx';
var tplMaintenanceId = 'xxxxxxxxxxxxxxxxxxxx';
var fileOutName = 'my file name';
var clientCompany = ui.prompt ('Company Name :');
// Do a copy from template file to a new file inside a specific folder
targetFolder = DriveApp.getFolderById (folderOutId);
var documentId = DriveApp.getFileById (tplMaintenanceId). makeCopy (targetFolder). getId ();
// Rename filed copied
DriveApp.getFileById (documentId) .setName (fileOutName + ' - ' + clientCompany.getResponseText ());
// Add document body inside variable
var body = DocumentApp.openById (documentId) .getBody ();
// Insert data inside Google Doc document
body.replaceText ('##DATE##', date);
body.replaceText ('##CLIENT_COMPANY##', clientCompany.getResponseText ());
gdocToPDF(documentId);
}
function gdocToPDF(fileID) {
var documentRootfolder = DriveApp.getFolderById("xxxxxxxxxxxxxxxxxxxx") // replace this with the ID of the folder that contains the documents you want to convert
var pdfFolder = DriveApp.getFolderById("xxxxxxxxxxxxxxxxxxxx"); // replace this with the ID of the folder that the PDFs should be put in.
var docFile = DriveApp.getFileById(fileID)
createPDF(docFile.getId(), pdfFolder.getId(), function (fileID, folderID) {
if (fileID) createPDFfile(fileID, folderID);
}
)
}
function createPDF(fileID, folderID, callback) {
var templateFile = DriveApp.getFileById(fileID);
var templateName = templateFile.getName();
var existingPDFs = DriveApp.getFolderById(folderID).getFiles();
//in case no files exist
if (!existingPDFs.hasNext()) {
return callback(fileID, folderID);
}
for (; existingPDFs.hasNext();) {
var existingPDFfile = existingPDFs.next();
var existingPDFfileName = existingPDFfile.getName();
if (existingPDFfileName == templateName + ".pdf") {
Logger.log("PDF exists already. No PDF created")
return callback();
}
if (!existingPDFs.hasNext()) {
Logger.log("PDF is created")
return callback(fileID, folderID)
}
}
}
function createPDFfile(fileID, folderID) {
var templateFile = DriveApp.getFileById(fileID);
var folder = DriveApp.getFolderById(folderID);
var theBlob = templateFile.getBlob().getAs('application/pdf');
var newPDFFile = folder.createFile(theBlob);
var fileName = templateFile.getName().replace(".", ""); //otherwise filename will be shortened after full stop
newPDFFile.setName(fileName + ".pdf");
}
我尝试重新创建您的代码并成功将文档转换为 pdf。
您可以做的是编辑您的 gdocToPDF() 函数以仅接受您想要转换为 PDF 的文档。请看下面的示例代码(可能不是您想要的):
将 replaceTags() 函数中使用的文档 ID 传递给 gdocToPDF()
function replaceTags () {
....
....
DocumentApp.openById(documentId).saveAndClose()
gdocToPDF(documentId);
}
不是获取驱动器文件夹中的所有文件,而是使用此代码来仅使用带有替换标签的文件
function gdocToPDF(fileID) {
var documentRootfolder = DriveApp.getFolderById(folder-id) // replace this with the ID of the folder that contains the documents you want to convert
var pdfFolder = DriveApp.getFolderById(folder-id); // replace this with the ID of the folder that the PDFs should be put in.
var docFile = DriveApp.getFileById(fileID)
createPDF(docFile.getId(), pdfFolder.getId(), function (fileID, folderID) {
if (fileID) createPDFfile(fileID, folderID);
}
)
}
这会将 doc 转换为 pdf 到您想要转换的唯一文档。
祝你有美好的一天!