2009-06-24 6 views
1

IFrame의 src 속성을 data : application/pdf; base64로 설정하면 나에게 도움이되지 않습니다. 그 이유는 무엇입니까?IFrame의 src 특성을 데이터로 설정 : application/pdf; base64?

는 여기에서 .aspx 마크 업을

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> 

<html xmlns="http://www.w3.org/1999/xhtml" > 
<head runat="server"> 
    <title>Untitled Page</title> 
    <script type="text/javascript"> 
     function loadIFrameFromHiddenField() 
     {   
      //get the node containing the base64 pdf data from the xml in the hidden field 
      var xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); 
      xmlDoc.loadXML(document.getElementById("pdfData").value);      
      xmlDoc.setProperty('SelectionLanguage', 'XPath'); 
      var pdfDataNode = xmlDoc.selectSingleNode("//PDF"); 

      //if we've got the node 
      if (pdfDataNode != null) 
      { 
       //get the data and append it to the src contents 
       var pdfIFrameSrc = "data:application/pdf;base64," + pdfDataNode.text; 
       //set the src attribute 
       document.getElementById("pdfIFrame").setAttribute("src", pdfIFrameSrc); 
      }    
     } 
    </script> 
</head> 
<body> 
    <form id="form1" runat="server" style="width:100%;height:100%;"> 
     <asp:HiddenField ID="pdfData" runat="server" /> 
     <div style="width:100%;height:80%;"> 
      <iframe id="pdfIFrame" runat="server" scrolling="auto" frameborder="0" marginheight="0" marginwidth="0" style="height:99.5%;width:99.5%" />    
     </div> 
    </form> 
</body> 
</html> 

을 그리고 여기에 뒤에 코드입니다 :이 예에서 실제 응용 프로그램에서 PDF 데이터가 생성되는 서버 측 달리 말을해야

using System; 
using System.Data; 
using System.Configuration; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Web.UI.HtmlControls; 
using System.IO; 
using System.Text; 
using System.Xml; 
public partial class _Default : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

     //get the bytes from our PDF 
     Byte[] pdfBytes = File.ReadAllBytes("c:\\temp\\Test.pdf"); 

     //build xml containiing our base64 encoded pdf data and put it in hidden field 
     pdfData.Value = buildDocumentXML(pdfBytes, "TestDoc"); 

     //call js function to add the src to the iframe 
     String scriptText = "<script type='text/javascript'>loadIFrameFromHiddenField()</script>"; 
     ClientScript.RegisterStartupScript(this.GetType(), "loadIFrameFromHiddenField", scriptText); 
    } 

    private string buildDocumentXML(Byte[] pdfBytes, string documentName) 
    { 

     StringBuilder documentsString = new StringBuilder(); 
     XmlWriterSettings documentsXmlSettings = new XmlWriterSettings(); 

     documentsXmlSettings.Indent = false;    
     documentsXmlSettings.OmitXmlDeclaration = true; 
     documentsXmlSettings.ConformanceLevel = ConformanceLevel.Fragment; 
     documentsXmlSettings.NewLineHandling = NewLineHandling.None; 

     using (XmlWriter documentsXmlWriter = XmlWriter.Create(documentsString, documentsXmlSettings)) 
     { 

      documentsXmlWriter.WriteStartElement("DOCUMENTS"); 

      documentsXmlWriter.WriteStartElement("FILENAME"); 
      documentsXmlWriter.WriteString(documentName); 
      documentsXmlWriter.WriteEndElement(); 

      documentsXmlWriter.WriteStartElement("PDF"); 


      documentsXmlWriter.WriteBase64(pdfBytes, 0, pdfBytes.Length); 


      documentsXmlWriter.WriteEndElement(); 



      documentsXmlWriter.WriteEndElement(); 
     } 



     return documentsString.ToString(); 

    } 

} 

은. 내가 client.pdf 데이터를로드하려고하는 이유는 어쨌든 다른 것을하기 위해 pdf 바이트 데이터 클라이언트를 가져야하고이 데이터의 인스턴스를 생성하고 줄이려고 노력하고 있습니다.

위의 코드와 마크 업을 VS2005의 간단한 한 페이지 웹 사이트에 붙여넣고 c : \ temp \에 이전 pdf를 붙여 넣기 만하면 TestDoc.pdf라고 부르며 컴파일하고 실행해야합니다.

기본적으로 내가 얻는 동작은 iframe에는 전혀 없습니다.

IE7을 사용하고있어 문제가 될 수 있습니다. 데이터를 사용하는 것에 대한 귀중한 정보가 거의 없으므로 잘 모르겠습니다. application/pdf; base64 [base64 data] syntax around.

답변

-1

내가 아는 한 IE는 데이터 : URL 체계를 전혀 처리하지 않으므로 PDF 뷰어로 전달할 내용을 알지 못합니다. WP을 참조하십시오.

건배, 당신은 데이터를 사용할 수 있습니다 filestypes있는 몇 가지 제한이있을 수 있음을

+0

놈을! : 오히려 더 많은 시간을 절약 할 수 있습니다. 답변 주셔서 감사합니다 –

+0

아마도 < object/> 요소를 사용하고 Acrobat에 일부 < param/> 요소의 데이터를 제공 할 수는 있지만 이는 단지 추측에 불과합니다. – Boldewyn

1

위키 피 디아를 참조 할 볼품이 될 수 있지만, Wikipdia says : 파일 형식;에 base64로 구문을. 즉, 현재 사진 만 있습니다. 이 기사에 따르면 IE9 스펙은 광범위하게 사용할 수 있지만 정확하게 무엇이 수반되는지는 잘 모르겠습니다. 그 동안 기본 64 개의 문자열 데이터가 아니라 .pdf 파일을 사용해야합니다.

0

이 방법은 나를 위해 일한 :

var oldsrc = $('.content-control-iframe').attr('src'); 
var newsrc = $('.content-control-iframe').attr('src').slice(8); 
$('.content-control-iframe[src="'+oldsrc+'"]').attr('src', newsrc); 
관련 문제