Я обычно использую этот подход, хотя может существовать лучшее решение:
- определить окно просмотра
- создать файл PDF на сервере
- скачать и просмотреть файл PDF
Часть ExtJS:
Ext.define('Test.ReportWindow', {
extend: 'Ext.window.Window',
xfilename: '',
xtitle: '',
layout : 'fit',
width: 1200,
height: 800,
maximizable: true,
initComponent: function() {
var me = this;
me.callParent(arguments);
me.title = me.xtitle;
me.add(
{
xtype: "box",
autoEl : {tag : "iframe", src : me.xfilename}
}
);
}
});
Ext.onReady(function(){
Ext.Ajax.request({
url: 'data/apppdf.php?class=Export&action=composerCSV',
method: 'POST',
timeout: 1200000,
params: {
id: id
},
success: function (response, opts) {
var r = Ext.JSON.decode(response.responseText);
if (r.success == true) {
var win = Ext.create('Test.ReportWindow', {
xfilename: r.filename,
xtitle: 'Show PDF file'
});
win.show();
} else {
Ext.Msg.alert('Attention', r.errmsg);
};
}
});
});
Часть PHP:
<?
// Create and save file to disk. Return filename to ExtJS.
// Uncomment next line and generate PDF as you want.
/*
require('fpdf.php');
$filename = 'test.pdf';
$pdf = new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'Hello World!');
$pdf->Output('F', $filename);
// Exception or other way of error check:
if ($something_is_wrong) {
echo "{
success: false,
errmsg: 'Something is wrong.'
}";
exit;
}
*/
echo "{
success: true,
filename: '".addslashes($filename)."'
}";
?>
Примечания: протестировано с ExtJS 4.2.