2013-09-23 78 views
2

所以我有一個HTML文件,我用它來發送電子郵件,但在某些情況下,我只是想用它來創建一個相同模板的PDF文件。使用HTML文件輸出PDF

我得到它的大部分功能 - 它創建文件,運行評估並獲取內容,但它實際上不會呈現html。它只是留下所有的html符號。

例如,它輸出的PDF,但有這麼一句話:中

Dear Martin, <br /> 

代替:

親愛的馬丁

如何確保它呈現HTML,這樣PDF是否正確佈局,並且沒有文本中提到的html代碼?

下面的代碼:

var docName = "test"; 
var htmlBody = HtmlService.createHtmlOutput(template.evaluate().getContent()).getContent() 
var doc = DocumentApp.create(docName); 
    doc.appendParagraph(htmlBody); 
doc.saveAndClose(); 
DocsList.createFile(doc.getAs('application/pdf')).rename(docName); 

回答

1

最好的選擇,當你想創建一個PDF從模板是直接使用谷歌文檔,以便沒有格式會丟失,也避免你所面對的問題。

爲什麼不直接在Google文檔中創建模板?有一些佔位符,如{name}而不是實際的名稱。而不是使用template.evaluate(),您可以在文檔中查找並替換。

+0

模板也被用來生成HTML格式的電子郵件。這實際上是該方法正常工作的主要目的。將使用Google Doc方法來創建我的電子郵件正文嗎?謝謝! – MartinK

+0

那麼,您發送的電子郵件和PDF格式與電子郵件的內容相同嗎? HTML文件適用於電子郵件,Google Doc更適合創建PDF文件。所以,如果我的問題的答案是肯定的,那麼你最好在兩個地方擁有相同的內容。不理想,但它也許是最好的選擇 – Srik

+0

對不起,不打算接受這個答案。我不是同時發送給同一個客戶端。我運行的函數會查看是否有電子郵件地址,如果不是,則使用該模板生成PDF,因此我可以打印併發送一份硬拷貝。我不會在兩個地方更新兩個模板。 – MartinK

5

您可以使用現有的HTML作爲一個blob,並將其轉換爲PDF格式是這樣的:

var htmlBody = HtmlService.createHtmlOutputFromFile('my_file_within_script_project.html').getContent(); 
var blob = Utilities.newBlob(htmlBody, 'text/html').getAs('application/pdf').setName('my_output_in_drive.pdf'); 
DriveApp.createFile(blob);