-
-
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> |
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.
The idea is that the data is passed to apex controller from the lightning component (js) and passed back as a pageReference thus redirecting to page formatted to display the data as a pdf. I understand what you're thinking, I think, as I am trying to make a lightning component that creates a pdf of itself and any data that is in scope. You have to use the pageReference as an object and initialize it in the controller and thus call a redirect (navService.navigate(pageReference);. I'm a little stuck myself getting an invalid url error so I haven't configured the pageReference correctly. Here is a link to documentation. https://developer.salesforce.com/docs/atlas.en-us.lightning.meta/lightning/components_navigation_page_definitions.htm
https://salesforce.stackexchange.com/questions/205065/how-to-generate-view-pdf-using-lightning-components/205227 At this point I'm trying to nest this in an iframe in my lightning component. Almost there... yep, it works, now to get images from the parentobject in there.
@eastwood84 This sounds verbatim like what I am trying to do - with no luck. Any chance you might be able to share your success, or some insights? TIA
Two options i can think of right now: