Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dhaniksahni/fd9b6114f50efd9dfa682f2540eab97e to your computer and use it in GitHub Desktop.
Save dhaniksahni/fd9b6114f50efd9dfa682f2540eab97e to your computer and use it in GitHub Desktop.
Sample Code to Generate PDF from Lightning components with in-memory data
public class DataDisplayController {
public String PDFData {get; set;}
public DataDisplayController(){
PDFData = '';
}
public PageReference downloadPDF(){
System.PageReference pageRef = new System.PageReference('/apex/PDFGenerator');
//ensure pdf downloads and is assigned with defined name
pageRef.getHeaders().put('content-disposition', 'attachment; filename=TestPDF.pdf');
return pageRef;
}
}
<aura:component >
<!-- attribute to accept Visualforce page's javascript method -->
<aura:attribute name="sendData" type="object"/>
<!-- Button component to invoke PDF download -->
<lightning:button label="Download Document" onclick="{!c.downloadDocument}" />
</aura:component>
({
downloadDocument : function(component, event, helper){
var sendDataProc = component.get("v.sendData");
var dataToSend = {
"label" : "This is test"
}; //this is data you want to send for PDF generation
//invoke vf page js method
sendDataProc(dataToSend, function(){
//handle callback
});
}
})
<apex:page controller="DataDisplayController" showHeader="false">
<apex:includeLightning />
<!-- Page code -->
<apex:form>
<apex:inputhidden id="hidData" value="{!PDFData}"/>
<apex:actionfunction name="jsGeneratePDF" action="{!downloadPDF}" />
<div id="lightning" />
<script>
function saveData(data, callback){
var hidData = document.getElementById('{!$Component.hidData}');
hidData.value = JSON.stringify(data);
//invoke PDF Generation
jsGeneratePDF();
//invoke callback;
if(typeof callback == 'function') callback();
}
function loadComponents(){
console.log("Loading lightning component: DataProcessor");
$Lightning.use("c:LightningPDFGeneratorDemoApp", function() {
$Lightning.createComponent("c:DataProcessor",
{
sendData : saveData
},
"lightning",
function(cmp) {
// do some stuff
});
});
}
loadComponents();
</script>
</apex:form>
</apex:page>
<aura:application extends="ltng:outApp">
<c:DataProcessor />
</aura:application>
<apex:page controller="DataDisplayController" renderAs="pdf">
{!PDFData}
</apex:page>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment