MartinK
MartinK

Reputation: 412

Using HTML file to output a PDF

So I've got a HTML file, that I am using to send emails, but in some instances I want it simply to use that file to create a PDF of the same template.

I've got it functioning for the most part - it creates the file, runs the evaluations and gets the content, but it doesn't actually render the html. It simply leaves all the html notation in place.

For example, it outputs a pdf but it reads:

Dear Martin, <br />

instead of:

Dear Martin

How do I make sure it renders the HTML so that the PDF is laid out correctly, and doesn't have the html code noted in the text?

Here's the code:

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);

Upvotes: 3

Views: 7776

Answers (2)

Steve Lieberman
Steve Lieberman

Reputation: 204

You can use your existing HTML as a blob, and convert it to PDF like this:

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);

Upvotes: 7

Srik
Srik

Reputation: 7947

The best option when you want to create a PDF from a template is to use Google Docs directly so that no formatting is lost and also avoid the problem you are facing.

Why don't you just create your template directly in Google Docs. Have some placeholders such as {name} instead of the actual name. Instead of using template.evaluate(), you can do a find and replace in the doc.

Upvotes: 2

Related Questions