2010-11-25 4 views
1

У меня есть сервлет, который возвращает PDF. Я пытаюсь загрузить PDF в Ext.Window. Ниже приведен пример источникаЗагрузка PDF в Ext.Window

  Ext.getCmp('hisAmpPhyWin').load(
        { 
         url:'servlet/Servlet/', 
         params: {xhtml:xhtmlData}, 
         text: 'Loading PDF...', 
         scripts: false 
        }); 

Где 'hisAmpPhyWin' является экземпляром Ext.Window.

Дело в том, что он показывает содержимое PDF (я имею в виду символы ascii), а не фактический PDF-файл в браузере.

Пожалуйста, помогите устранить эту проблему.

ответ

5

Я думаю, что вы могли бы быть лучше использовать IFRAME тег для этого.

var win = new Ext.Window({ 
    title: 'PDF Content', 
    width: 420, 
    height: 320, 
    plain:true, 
    html: String.format(
     '<iframe src="servlet/Servlet?p1={0}&p2={1}" width="400" height="300" />', 
     xhtmlData.p1, xhtmlData.p2) 
}) 
win.show(); 

Примечание: Браузер только открывает свои данные в формате PDF, если он знает, тип контента является application/pdf, здесь вы используете .load() метод AJAX, который игнорирует тип контента, возвращаясь из сервлет, однако, если вы обратитесь к нему напрямую, используя IFRAME, браузер применит правильный MIME format.

Не забудьте, чтобы убедиться, что каждый экземпляр окна уничтожается (closeAction = 'close', который устанавливается по умолчанию), в противном случае он будет держать открытие вверх и тот же PDF документ снова и снова.

0
Ext.onReady(function() { 
    Ext.create({ 
     title: 'My PDF', 
     xtype: 'panel', 
     width: 600, 
     height: 400, 
     items: { 
      xtype: 'box', 
      autoEl: { 
       tag: 'iframe', 
       style: 'height: 100%; width: 100%', 
       src: '/files/pdf-sample.pdf' 
      } 
     }, 
     renderTo: 'output' 
    }); 
});