1

まず、次の 2 点です。

  • 同様の質問がたくさんありますが、どれも私の問題の解決策を見つけるのに役立ちませんでした
  • 私は初心者です - プログラミングのあらゆる面で...

問題: Web サービスからバイト配列を受け取ったので、Internet Explorer 9 で PDF を表示する必要があります。次のコードは Chrome で動作していますが、IE9 では、PDF が表示されるダーク グレーのパネルしか表示されません。

Ext.define('Ext.ux.form.DocumentFrame', {
extend: 'Ext.container.Container',
alias: 'widget.documentframe',
layout: 'hbox',
initComponent: function () {
    var me = this;
    var binaryData = me.value.DocumentData;
    var source = 'data:application/pdf;base64,' + (binaryData);

    Ext.applyIf(me, {
        items: [
                {
                xtype: 'box',
                itemId: 'panel-document-frame',
                width: 600,
                height: 600,
                autoEl: {
                    tag: 'object',
                    width: '100%',
                    height: '100%',
                    type: 'application/pdf',
                    data: source
                }
            }
        ]
    });
    me.callParent(arguments);
}
});
  • MIME タイプに問題がありますか?
  • バイト配列をエンコードまたはデコードする必要がありますか?
  • IE9 で PDF のデータ URIを使用しようとして間違っていますか?

これが他のブラウザでは機能する理由がわかりませんが、IE9では機能しません。特に、保存されたPDFファイルへのパスを指定しても問題なく機能します(IE9でも)。これを行うには、次のように autoEl のデータ パラメータを設定します。

data: 'content/files/Designer.pdf'

注: IE9 でこれを行うと、「このページの Active X コントロールは、このページの他の部分と対話するには安全でない可能性があります」というメッセージ ボックスが表示されます。現時点では、私はこれを気にしません。

バイト配列からPDFを表示しようとするのは間違っていますか? 私は本当にこれにこだわっています。どんな助けでも大歓迎です!

前もって感謝します!

-編集-

binaryData は、変数の間違った名前または刺激的な名前である可能性があります。私の知る限り、これは次のようなバイト配列です。

JVBERi0xLjQNCiXi48/TDQolDQold1BERjMgYnkgV1BDdWJlZCBHbWJIIFYzLjY1WzQwMjY1MzIxNl0gMzJiaXQgIHVuaWMgDQolDQolDQoxIDAgb2JqDTw8L1R5cGUvTWV0YWRhdGEvU3VidHlwZS9YTUwvTGVuZ3RoIDE0OTIgPj4NCnN0cmVhbQo8P3hwYWNrZXQgYmVnaW49Iu

... ... ...

GQ5N2VlYjczYmVkZjczZWM5Pl0NCi9JbmZvIDIgMCBSDQo+Pg0Kc3RhcnR4cmVmDQo1NTgyDQolJUVPRg0K

結局、これは変数の完全な値ですsource:

http://pastie.org/private/upqwjrkfwgmz1hxrx9vha

-編集2-

  • Adobe Reader バージョン 11.0.3 (11.0.03.37) を使用しています。
  • IE9 で Adob​​ePDF プラグインを無効化/有効化しても効果はありません - 問題は同じままです
4

1 に答える 1

0

Colombo と私が前に述べたように、IE のデータ URI の制限により、PDF を使用することはできません。私たちのアプローチは、Colombo が 2 番目のコメントで説明したソリューションに似ていると思います。

高低を検索し、多くのソースを読み、想像できることは何でも試した後、私の問題を解決する唯一の解決策は、ロジック全体を ASP.NET コントローラーに入れることでした (同僚の功績によるものです)。

このコードは機能していますが、「ダミー状態」です!

バイト配列は「archiveDocument.Document.DocumentData」にあります

public class PdfController : Controller
{
    [HttpGet]
    public ActionResult View(Guid id)
    {
        if (id == Guid.Empty || id == null)
            throw new ArgumentException("id null or emtpy", "id");

        using (var serviceClient = ServiceClient.GetAuthClient<ArchiveDocumentServiceClient, IArchiveDocumentService>())
        {
            var archiveDocument = serviceClient.GetById(id);
            if (archiveDocument == null)
                throw new ApplicationException("ArchiveDocument not found.");

            Response.Headers.Remove("Content-Disposition");
            Response.Headers.Add("Content-Disposition", "inline; filename=" + archiveDocument.Document.Name);

            return File(archiveDocument.Document.DocumentData, "application/pdf");
        }
    }
}

pdf-Document を iframe にロードするには、関数を呼び出すだけです (まだダミーコード -> ハードコードされた GUID):

xtype: 'box',
width: 600,
height: 900,
autoEl: {
    tag: 'iframe',
    scrolling: 'no',
    seamless: 'seamless',
    frameborder: 0,
    src: 'Pdf/View/031d2151-5315-4574-aeb5-8154693a928d'
}

この解決策が他の人に役立つことを願っています。

私をサポートしてくれたみんなに感謝します!

于 2013-08-06T07:37:21.440 に答える