[SalesForce] Attach a VisualForce Page, Rendered As PDF to a Record

I have a VF page and on that VF page I select a project and click generate invoice, on that click an new VF page is displayed as PDF. I want to attach that generated PDF VF page to the selected project after the invoice is generated. How can I achieve it please guide me to get this problem solve.

Best Answer

Assuming "Project" is a custom object.

Enable notes and attachment for the custom object.

When you click 'generate invoice', just before redirecting to VF page use getContent() method. E.g;

public PageReference generateInvoice()
{
     Attachment att = new Attachment(name ='Invoice_AnyUniqueName.pdf');
     PageReference invoicePage = Page.GeneratingInvoicePage;
     invoicePage .getParameters().put('id',projectRecordId);
     // return page content as blob type
     // Alt: att.body = invoicePage .getContentAsPDF();
     att.body = invoicePage .getContent();
     // Associate with project's record Id
     att.parentid = projectRecordId;
     insert att;
     return invoicePage ;
}