在Ext.Window中加载PDF

时间:2010-11-25 00:47:34

标签: servlets extjs

我有一个返回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。

请帮助解决此问题。

3 个答案:

答案 0 :(得分: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();

注意:如果浏览器知道内容类型application/pdf,则浏览器 会以PDF格式打开您的数据,此处您正在使用AJAX {{1 忽略从servlet响应返回的内容类型的方法,但是如果您使用IFRAME直接引用它,则浏览器将应用正确的MIME format

别忘了确保窗口的每个实例都被销毁.load(),默认设置),否则它会一遍又一遍地打开相同的PDF文档试。

答案 1 :(得分:0)

我认为你不能本地做,但有一个非常好的用户体验应该做到。

http://www.sencha.com/forum/showthread.php?23983-ux.Media-.Flash-Flex-Components-2.1.2&highlight=ux.Media

答案 2 :(得分: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'
    });
});