The way i handled this was by using the same javascript used in the standard create pdf button.
Note you would need to change the summlid( which is the quotes templateId) This is hardcoded for now. Not sure if we can get the id of this dynamically
if("{!Quote.Needs_Approval__c}" == true)
{
alert('Pls submit this Quote for approval');
}
else
{
var pdfOverlay = QuotePDFPreview.quotePDFObjs['quotePDFOverlay'];pdfOverlay.dialog.buttonContents = '<input value=\"Save to Quote" class=\"btn\" name=\"save\" onclick=\"QuotePDFPreview.getQuotePDFObject(\'quotePDFOverlay\').savePDF(\'0\',\'0\');\" title=\"Save to Quote\" type=\"button\" /><input value=\"Save and Email Quote\" class=\"btn\" name=\"saveAndEmail\" onclick=\"QuotePDFPreview.getQuotePDFObject(\'quotePDFOverlay\').savePDF(\'1\');\" title=\"Save and Email Quote\" type=\"button\" /><input value=\"Cancel\" class=\"btn\" name=\"cancel\" onclick=\"QuotePDFPreview.getQuotePDFObject(\'quotePDFOverlay\').close();\" title=\"Cancel\" type=\"button\" />';
pdfOverlay.summlid = '0EH900000009lyR'; // This is the template id for quotes, we would need to change this value according to the environment we are adding this button into
pdfOverlay.setSavable(true);
pdfOverlay.setContents('/quote/quoteTemplateDataViewer.apexp?id=' +"{!Quote.Id}",'/quote/quoteTemplateHeaderData.apexp?id='+"{!Quote.Id}");
pdfOverlay.display();
}
NOTE
I cant say this is a best way of doing it... I have tested this only in dev env and it works.. Maybe the community could judge if this is one of the right way of doing it