I hope you will find this blog post helpful.
If you need any support with Salesforce, please do not hesitate to Contact Me.
I hope you will find this blog post helpful.
If you need any support with Salesforce, please do not hesitate to Contact Me.
In every business generating PDF files from invoices, bills, articles, reports, etc. is necessary. As a PDF (portable document file), we can keep it offline for later consumption instead of viewing the same detail using the network.
In this post, we will explain how to Generate PDF in Salesforce with a button click. In this implementation, we will show Generate PDF button in Salesforce on the Account details page. After clicking a button, a PDF will be generated.
Salesforce has in-build PDF generation tool, that can generate PDF document dynamically without using any third party app. Later generated PDF can be saved as File on Salesforce Record or can be sent via Email.
Table of Contents
To create a static resource:
Do you need help with any document automation within Salesforce?
Hire Me NowTo create Visualforce pages :
<apex:page id="MyFirstPDF" standardController="Account" renderAs="pdf">
<body>
<div class="" style="min-height: 2in;">
<!-- SECTION: header w/ company address and logo -->
<table class="header-table">
<tr>
<td style="width: 75%">
<apex:image width="2.75in" url="{!$Resource.companyLogo}"/>
</td>
<td style="">
<table style="width: 2.8in;border: solid 1px black; border-collapse: separate; ">
<tr>
<td style="text-align: center; font-size: 16pt; font-weight: bold; border-bottom: solid 1px black"
colspan="2">Invoice Summary
</td>
</tr>
<tr>
<td> Date:</td>
<td style="text-align:right;">
{!DAY(TODAY())}-{!MONTH(TODAY())}-{!YEAR(TODAY())}
</td>
</tr>
<tr>
<td> Account:</td>
<td style="text-align:right;">Jack-Rich </td>
</tr>
</table>
</td>
</tr>
</table>
</div>
<table >
<tr>
<td >Address:</td>
<table Style="padding-left: 90px;">
<tr>
<td>
Jack-Rich
</td>
</tr>
<tr>
<td>
1704 Weeksville Road
</td>
</tr>
<tr>
<td>
Elizabeth City, 27909
</td>
</tr>
</table>
</tr>
</table>
<br/>
<br/>
<br/>
<div style="min-height: 5.7in;">
<table style="width: 100%;">
<tr>
<th>Date</th>
<th>Billing</th>
<th>Email</th>
<th style="text-align:right;">Paid Amount</th>
<th style="text-align:right;">Due Amount</th>
<th style="text-align:right;">Total Amount</th>
</tr>
<tr>
<td>01-01-2022</td>
<td>000001</td>
<td>example@gmail.com</td>
<td style="text-align: right;">$1000</td>
<td style="text-align: right;">$9000</td>
<td style="text-align: right;">$10000</td>
</tr>
<tr>
<td>04-01-2022</td>
<td>000002</td>
<td>example1@gmail.com</td>
<td style="text-align: right;">$2500</td>
<td style="text-align: right;">$8500</td>
<td style="text-align: right;">$11000</td>
</tr>
<tr>
<td>11-02-2020</td>
<td>000003</td>
<td>example2@gmail.com</td>
<td style="text-align: right;">$4000</td>
<td style="text-align: right;">$8000</td>
<td style="text-align: right;">$12000</td>
</tr>
<tr>
<td>17-03-2020</td>
<td>000004</td>
<td>example3@gmail.com</td>
<td style="text-align: right;">$4400</td>
<td style="text-align: right;">$6000</td>
<td style="text-align: right;">$10400</td>
</tr>
<tr>
<td>09-04-2020</td>
<td>000005</td>
<td>example4@gmail.com</td>
<td style="text-align: right;">$7000</td>
<td style="text-align: right;">$2000</td>
<td style="text-align: right;">$9000</td>
</tr>
<tr>
<td><b>Total</b></td>
<td></td>
<td></td>
<td style="text-align: right;"><b>$19300</b></td>
<td style="text-align: right;"><b>$33500</b></td>
<td style="text-align: right;"><b>$51400</b></td>
</tr>
</table>
</div>
<div class="footer" style="">
<hr/>
<table align="center" style="width: 100%;">
<tr>
<td colspan="2" style="font-size: 10pt; color: green;">
<table style="width: 100%; border-collapse: collapse; border: 1px solid black; ">
<tr>
<td style="text-align: left;">Arrify</td>
<td style="text-align: right;">www.arrify.com</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
</body>
</apex:page>
To Create a Button on Account
"Generate PDF"
.Generate PDF
" into the Custom Buttons area on the page layout.Salesforce provides a way to generate PDF documents using Apex, which is a programming language that enables developers to create custom functionality for their Salesforce org. This can be useful for creating documents such as invoices, contracts, and reports.
To generate a PDF with Apex, you can use the PageReference.getContentAsPDF() method. This method allows you to create a new page reference and set the content type to PDF.
Here's an example of how you might use it:
// Create a new page reference
PageReference MyFirstPDF = new PageReference('/apex/MyFirstPDF');
// Set the account id as a parameter
MyFirstPDF.getParameters().put('accountId', someAccountId);
// Create a new PDF document and add the contents of the page reference to it
ContentVersion cont = new ContentVersion();
cont.Title = 'MyFirstPDF';
cont.PathOnClient = 'MyFirstPDF.pdf';
cont.VersionData = MyFirstPDF.getContentAsPDF();
cont.Origin = 'H';
insert cont;
In this example, MyFirstPDF
is a Visualforce page that renders the content of your PDF. You can use the <apex:page>
tag and its various attributes and child tags to control the layout and appearance of your PDF. You can also use Apex code in your Visualforce page to retrieve data from your Salesforce org and populate the PDF with dynamic content.
Once you have generated your PDF document, you have a few options:
In your LWC, add a button that, when clicked, triggers an Apex method to generate the PDF from the Visualforce page.
<!-- LWC button -->
<template>
<lightning-button label="Generate PDF" onclick={generatePDF}></lightning-button>
</template>
//Controller
generatePDF() {
generatePDFMethod({ recordId: this.recordId })
.then(result => {
// handle success
})
.catch(error => {
// handle error
});
}
Apex Code to Generate the PDF: Use PageReference.getContentAsPDF()
to fetch the content of the Visualforce page as PDF.
@AuraEnabled
public static void generatePDFMethod(String recordId) {
PageReference pdfPage = new PageReference('/apex/YourVisualforcePageName?id=' + recordId);
Blob pdfBlob;
pdfBlob = pdfPage.getContentAsPDF();
// Save, email or handle the PDF as needed
}
Once you've generated the PDF blob, you can save it to Salesforce Files.
ContentVersion cont = new ContentVersion();
cont.Title = 'GeneratedPDF';
cont.PathOnClient = 'GeneratedPDF.pdf';
cont.VersionData = pdfBlob;
cont.Origin = 'H';
insert cont;
The PDF blob can also be emailed as an attachment:
Send the PDF via email using the Messaging.SingleEmailMessage
class.
//Send the email
Messaging.sendEmail(new Messaging.SingleEmailMessage[] {mail});
Messaging.EmailFileAttachment attach = new Messaging.EmailFileAttachment();
attach.setFileName('GeneratedPDF.pdf');
attach.setBody(pdfBlob);
Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
mail.setToAddresses(new String[] {'recipient@example.com'});
mail.setSubject('Generated PDF from Salesforce LWC and Apex');
mail.setHtmlBody('Please find attached the generated PDF.');
mail.setFileAttachments(new Messaging.EmailFileAttachment[] {attach});
Messaging.sendEmail(new Messaging.SingleEmailMessage[] {mail});
For businesses with external cloud storage requirements, the generated PDF can be stored in services like AWS S3. Salesforce offers integration capabilities with AWS, allowing developers to push the generated PDF blob to an S3 bucket.
Learn more about Salesforce to AWS3 Integration
This Apex code can be used in a variety of contexts, including triggers, Apex Batch, or any other place where Apex is supported.
Visualforce PDF rendering supports a limited set of fonts. To ensure that PDF output renders as you expect, use the supported font names. For each typeface, the first font-family name listed is recommended.
Typeface | font-family Values |
---|---|
Arial Unicode MS | Arial Unicode MS |
Helvetica | sans-serif, SansSerif, Dialog |
Times | serif Times |
Courier | monospace Courier Monospaced DialogInput |
Parameter | Custom Code | S-Docs | PDF Butler |
---|---|---|---|
Setup Cost | $250 - $400 (Based on document) | $200 | $160 |
Subscription Cost (For 10 Users) |
$0 | $125/Month* (*Anual Contract) |
$140/Month |
Speed | Fastest | Moderate | Slow |
Security | Most Secure (No external service) |
Moderate | Depends on Their Server |
Updates | Not Needed | Need to install update in every release |
Multiple apps can generate PDFs in Salesforce. Most of them are paid and pull data from Salesforce to their server and output will be pushed back to Salesforce. This method took some extra time compared to native Salesforce PDF generation. Also, there are some data security issues.
Top apps on app exchange for salesforce pdf generation:
PDF Butler: PDF Butler is a tool for generating PDF documents from Salesforce data using custom templates. It offers a range of features, including the ability to create PDFs from records, related records, and custom objects, as well as support for formula fields and dynamic content. PDF Butler offers a paid version, with prices starting at $14 per user per month.
Easy PDF: Easy PDF is a tool for generating PDF documents from Salesforce data using custom templates. It offers a range of features, including the ability to create PDFs from records, related records, and custom objects, as well as support for formula fields and dynamic content.
Conga Composer: Conga Composer is a tool for generating PDF documents, as well as other types of documents and reports, from Salesforce data using custom templates. It offers a range of features, including the ability to create PDFs from records, related records, and custom objects, as well as support for formula fields and dynamic content.
Conga Composer prices start from $200/month ($20/user/month with 10 minimum users required).
S-Docs: SDocs is a tool for generating PDF documents from Salesforce data using custom templates. It offers a range of features, including the ability to create PDFs from records, related records, and custom objects, as well as support for formula fields and dynamic content.
SDocs pricing starts at $1500 per year for 1-10 users. This means that if you have 1-10 users who will be using the app, you will pay $1500 per year for the app.
PDF in salesforce can be generated easily without using any other app. That can work in Salesforce Lightning as well as Salesforce Classic.
Cost depends on how you generate PDF. By using a third-party app there will be a monthly cost (per user based) along with the initial setup cost. Using visualforce, it's completely free from monthly cost, it requires initial setup only.
Generating a PDF within Salesforce can be done with VisualForce and Apex. It is very easy (even for those with very little VisualForce and Apex experience). You are able to generate any Salesforce page as a PDF by adding the renderAs attribute to the component, and specifying âpdfâ as the rendering service.
We first need to create a Visualforce page that will have the PDF Content. Below is the simple Visualforce page that will display Account details with the help of the Account Standard Controller.
Official document about visualforce
Learn more How to generate PDF for Salesforce Quote (No code)
Need Salesforce Assistant
I provide salesforce assistance in North that can help you take your business to the next level. Our team of salesforce experts can help you implement and optimize your salesforce system, so you can get the most out of it.
Hire Me Starting from $35/h (No strings attached)