-
-
Save toanshulverma/16244d19ac68364cb75443695d81403b to your computer and use it in GitHub Desktop.
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> |
Same as @AdrienRiou, sendDataProc in not a function
This page has an error. You might just need to refresh it.
Action failed: c:Expence$controller$downloadDocument [sendDataProc is not a function]
Failing descriptor: {c:Expence$controller$downloadDocument}
Thanks for the share.
How can I take control of var dataToSend and style it in PDFGenerator.vfp
Like:
` <apex:pageBlock title="My Content">
<apex:pageBlockTable value="{!PDFData}" var="item">
<apex:column value="{!item.aBCHoursRequired}"/>
</apex:pageBlockTable>
</apex:pageBlock>
`
Actually I want to use apex:pageBlockTable to create a table but I got an error because PDFData variable is a string.
Currently I am getting a JSON printed with no spaces or breaks which seems not read-friendly.
SHould I style the JSON in LightningPDFGeneratorDemoApp.app ? But how?
Thanks,
Can you please demonstrate what it would look like to display Account Name and ID in a pdf visualforce page. Not sure what goes in the callback on the js controller or how to structure "datatosend". Thanks
Hi,
Thanks for the explanation and code. i want to create a lightning component and show all accounts in a table and on a button click show that table in PDF. Any one can help me on this.
Thanks for the share.
How can I take control of var dataToSend and style it in PDFGenerator.vfp
Like:` <apex:pageBlock title="My Content">
<apex:pageBlockTable value="{!PDFData}" var="item"> <apex:column value="{!item.aBCHoursRequired}"/> </apex:pageBlockTable> </apex:pageBlock> `
Actually I want to use apex:pageBlockTable to create a table but I got an error because PDFData variable is a string.
Currently I am getting a JSON printed with no spaces or breaks which seems not read-friendly.
SHould I style the JSON in LightningPDFGeneratorDemoApp.app ? But how?
Thanks,
Two options i can think of right now:
- You can form the json; parse it within apex controller and set value to controller's list property; bind a datatable to this list property
- You can generate the html within your code and send serialized html code in PDFData attribute
Quando eu clico no botão Click Download recebendo um erro, por favor me ajude nisso.Conseguiu resolver ?
Will need more details. I just recreated whole solution afresh in a separate environment and it is working as expected. So, I assume, there must be something missing/wrong at your end. Do try to re-create this in a fresh developer org for clarity.
This example shows how we can pass required in-memory data from lightning component to visualforce, to be able to natively generate PDF documents. Essentially, a lightning component is combination of UI + FUNCTIONALITY + DATA, to generate a PDF, you primarily need DATA (you may choose to use same UI, but it's often not effective for rending PDF documents). So, using this example, as far as you can send DATA to your VF controller, you can design a VF page to generate PDF document in desired layout.
Also, this example is applicable primarily for Classic interface. Hope that answers your question.