Salesforce: getContent()和getContentAsPDF()的使用

需求中,需要将VF页面的内容转换成Blob格式使用,即会用到getContent()或者getContentAsPDF()方法

首先要将VF页面进行实例化:

PageReference invoicePage = new PageReference('/apex/KayakInvoicePDF');
 
还可以给VF页面传递参数:
invoicePage.getParameters().put('id', invoice.Id);
 
然后即可使用getContent()或者getContentAsPDF()将页面转换为blob格式:
Blob pageData = invoicePage.getContent();
Blob pageData = invoicePage.getContentAsPDF();
 
getContent(): 返回的Blob的内容取决于页面的呈现方式。如果页面以PDF文件呈现,它将返回PDF文档。如果页面未呈现为PDF,它将返回HTML。要以string形式访问返回的HTML的内容,可以使用toString()方法。
getContentAsPDF(): 返回的Blob内容始终以PDF格式呈现。
 
要注意的是getContent()和getContentAsPDF()都不能在这三种情况下使用:
Triggers
Test methods
Apex email services
 
转化为Blob之后,即可将它应用到实际情况中。
 
附参考代码:
PageReference invoicePage = new PageReference('/apex/KayakInvoicePDF');
invoicePage.getParameters().put('id', recordId);
invoicePage.setRedirect(false);
Blob pageData;
if (!Test.isRunningTest()) {
  pageData = invoicePage.getContent();
  //pageData = invoicePage.getContentAsPDF();
} else {
  pageData = Blob.valueOf('this is a test');
}
 
//create attachment
Attachment att = new Attachment(ParentId = recordId, Body = pageData, Name='Test.pdf');
insert att;
 
//create and send email
Messaging.EmailFileAttachment attachment = new Messaging.EmailFileAttachment();
attachment.setBody(pageData);
attachment.setContentType('application/pdf');
attachment.setFileName('attachment.pdf');
Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
mail.setSubject('Test Email');
mail.setToAddresses(new String[]{ 'test@test.com' });
mail.setHtmlBody('test');
mail.setFileAttachments(new Messaging.EmailFileAttachment[]{ attachment });
Messaging.sendEmail(new Messaging.Email[]{ mail }, false);
 
原文地址:https://www.cnblogs.com/clsriz/p/13558375.html