Servlets 在Ext.窗口中加载PDF

Servlets 在Ext.窗口中加载PDF,servlets,extjs,Servlets,Extjs,我有一个返回PDF的servlet。我尝试的是将PDF加载到Ext.Window。下面是示例源 Ext.getCmp('hisAmpPhyWin').load( { url:'servlet/Servlet/', params: {xhtml:xhtmlData}, text: 'Loadi

我有一个返回PDF的servlet。我尝试的是将PDF加载到Ext.Window。下面是示例源

            Ext.getCmp('hisAmpPhyWin').load(
                    {
                        url:'servlet/Servlet/',
                        params: {xhtml:xhtmlData},
                        text: 'Loading PDF...',
                        scripts: false
                    });
其中“hisAmpPhyWin”是一个Ext.Window实例

问题是它在浏览器中显示的是PDF内容(我是指ascii字符),而不是实际的PDF


请帮助解决此问题。

我不认为您可以在本机上解决此问题,但有一个非常好的用户体验可以解决此问题


我不认为你可以在本地完成,但是有一个非常好的用户体验可以做到这一点


我认为您最好使用
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();
var-win=新的外部窗口({
标题:“PDF内容”,
宽度:420,
身高:320,
朴素:没错,
html:String.format(
'',
xhtmlData.p1、xhtmlData.p2)
})
win.show();
注意:如果浏览器知道内容类型
应用程序/PDF
,那么它只会将您的数据作为PDF打开,在这里,您使用的是AJAX
.load()
方法,它会忽略从servlet响应返回的内容类型,但是,如果使用IFRAME直接引用它,浏览器将应用正确的


别忘了确保窗口的每个实例都被销毁
closeAction='close'
,默认设置),否则它会一次又一次地打开同一个PDF文档。

我想你最好使用
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();
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'
    });
});
var-win=新的外部窗口({
标题:“PDF内容”,
宽度:420,
身高:320,
朴素:没错,
html:String.format(
'',
xhtmlData.p1、xhtmlData.p2)
})
win.show();
注意:如果浏览器知道内容类型
应用程序/PDF
,那么它只会将您的数据作为PDF打开,在这里,您使用的是AJAX
.load()
方法,它会忽略从servlet响应返回的内容类型,但是,如果使用IFRAME直接引用它,浏览器将应用正确的

别忘了确保窗口的每个实例都被销毁
closeAction='close'
,默认设置),否则它会一次又一次地打开同一个PDF文档

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'
    });
});