2013-07-16 1 views
1

첫 번째, 두 가지 자바 스크립트 바이트 배열에서 쇼 PDF : 내가 아는의 ExtJS - 모든

  • 이 비슷한 질문을 많이하지만, 그들 중 누구도 내 문제
  • 을위한 솔루션을 찾는 날이 도움이되지 내가 초보자 해요 - 프로그래밍의 모든 단일 측면에서 ...

문제 : 웹 서비스에서 바이트 배열을 받기 을, 나는 다음 코드는 법과이다 익스플로러 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에서도) 아무런 문제없이 작동하는지 이해할 수 없습니다.

data: 'content/files/Designer.pdf' 

참고 : 이 같은 autoEl의 데이터 매개 변수를 설정하여이 작업을 수행 IE9에서이 일을함으로써, 메시지 박스가 나타납니다 : "이 페이지에서 액티브 X 컨트롤이 다른 부분과 상호 작용하는 데 안전하지 않을 수 이 페이지의 ". 바로 그 순간에 나는 이것을 신경 쓰지 않는다.

나는 바이트 배열에서 PDF를 보여 주려고하는데 너무 잘못 되었나요? 나는 정말 이것에 붙어있어 어떤 도움을 주시면 감사하겠습니다!

미리 감사드립니다.

-edit-

binaryData 변수에 대한 잘못된 또는 자극 이름이 될 수 있습니다. 지금까지 내가 아는 한,이처럼 보이는 바이트 배열입니다 :

JVBERi0xLjQNCiXi48/TDQolDQold1BERjMgYnkgV1BDdWJlZCBHbWJIIFYzLjY1WzQwMjY1MzIxNl0gMzJiaXQgIHVuaWMgDQolDQolDQoxIDAgb2JqDTw8L1R5cGUvTWV0YWRhdGEvU3VidHlwZS9YTUwvTGVuZ3RoIDE0OTIgPj4NCnN0cmVhbQo8P3hwYWNrZXQgYmVnaW49Iu

... ... 은 ...

http://pastie.org/private/upqwjrkfwgmz1hxrx9vha

-edit2-

  • :

    GQ5N2VlYjczYmVkZjczZWM5Pl0NCi9JbmZvIDIgMCBSDQo + Pg0Kc3RhcnR4cmVmDQo1NTgyDQolJUVPRg0K

결국, 이것은 가변 source의 전체 값은 우리는 Adobe Reader 버전 11.0.3 (11.0.03.37)을 사용하고 있습니다.

  • 디인터레이스는/IE9에 AdobePDF-플러그인을 활성화하면 아무 영향을주지 않습니다 - 문제는 콜롬보와 같은
  • +1

    IE https://en.wikipedia.org/wiki/Data_URI_scheme – jorel

    +0

    의 데이터 URI 제한 사항을 살펴 보겠습니다. 어떻게 든 물었습니다 ("IE9에서 PDF 용 데이터 URI를 사용하려고 할 때 잘못 했습니까?").), IE9에서이 작업을 수행 할 가능성이없는 것처럼 보입니다. 대신 파일을 다운로드해야합니까? 이것이 가능한가? – nemesis

    +0

    pdf 데이터가 서버에서 오는 경우 다운로드 할 수 있습니다. 내 애플 리케이션 중 하나에서 나는 클라이언트에 생성 된 데이터를 서버에 보내야만했다가 다시 다운로드해야했다. – jorel

    답변

    0

    남아 날은 앞서 언급, IE의 데이터 URI 제한은 PDF를 사용하는 것을 허용하지 않습니다. 우리의 접근 방식은 솔루션과 비슷하다고 Colombo는 그의 두 번째 설명에서 설명했습니다.

    소스를 많이 읽고 상상할 수있는 모든 것을 시도한 후에 내 문제를 해결할 수있는 유일한 해결책은 전체 논리를 ASP.NET 컨트롤러 (내 동료에게 제공)에 넣는 것이 었습니다.

    이 코드는 작동하지만 "더미 상태"입니다! 바이트 어레이

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

    단지 호출은 iframe로 함수 (아직 더미 코드 -> 하드 GUID)를 그래서 PDF 문서를로드 "archiveDocument.Document.DocumentData"에 위치

    :

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

    나는이 해결책이 다른 사람들에게 도움이되기를 바랍니다.

    나를지지 해 주신 모든 분들께 감사드립니다.