문제

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>

그리고 다음은 다음에 다음과 같습니다.

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();

    }

}

이 예에서와 달리 실제 앱에서 PDF 데이터는 서버 사이드가 생성됩니다. 내가 PDF 데이터를로드하려는 이유는 PDF 바이트 데이터 클라이언트 사이드를 어쨌든 다른 작업을 수행해야 하며이 데이터의 인스턴스를 생성하고 주위에 줄이려고 노력하고 있기 때문입니다.

위의 코드와 마크 업을 VS2005의 간단한 원 페이지 웹 사이트에 넣고 C : temp 에 오래된 PDF를 고착시키고 TestDoc.pdf를 호출하고 컴파일하고 실행해야합니다.

기본적으로 내가 얻는 행동은 Iframe에서 전혀 아무것도 아닙니다.

IE7을 사용하고있어 문제가 될 수 있습니다. 사용에 대한 소중한 정보가 거의 없기 때문에 모르겠습니다. 데이터 : 응용 프로그램/PDF; Base64Base64 Data] 구문 주변.

도움이 되었습니까?

해결책

내가 아는 한, IE는 데이터를 처리하지 않습니다 : URL 체계는 전혀 처리하지 않으므로 PDF 뷰어에게 무엇을 전달 해야하는지 모르겠습니다. 보다 wp.

건배,

다른 팁

Wikipedia를 참조하는 것은 끈적 거리지 않을 수 있지만 Wikipdia는 말합니다 Filestype이 데이터를 사용할 수있는 제한 사항이있을 수 있습니다 : Filetype; Base64 구문 ON. 즉, 지금은 사진 만 있습니다. 이 기사에 따르면 IE9 사양은 더 넓은 사용을 허용하지만 정확히 무엇을 수반하는지 잘 모르겠습니다. 그 동안 .pdf 파일을 사용하면 기본 64 문자열 데이터뿐만 아니라 .pdf 파일을 사용하면됩니다.

이 방법은 나를 위해 일했습니다.

var oldsrc = $('.content-control-iframe').attr('src');
var newsrc = $('.content-control-iframe').attr('src').slice(8);
$('.content-control-iframe[src="'+oldsrc+'"]').attr('src', newsrc);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top