2009-06-24 24 views
1

IFrameのsrc属性をdata:application/pdf; base64に設定すると、私にとって問題はありません。ここでIFrameのsrc属性をdataに設定します。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のシンプルな1ページのWebサイトに上記のコードとマークアップを貼り、c:\ temp \に古いpdfを貼り付けるだけで、TestDoc.pdfと呼び、コンパイルして実行する必要があります。

基本的には、iframeには何も表示されません。

IE7を使用しているため、問題が発生する可能性があります。 データの使用に関する貴重な情報はほとんどないのでわかりません:application/pdf; base64 [base64 data] syntax around。

答えて

-1

私が知る限り、IEはdata:URLスキームを一切扱っていないので、PDFビューアに渡す内容はわかりません。 WPを参照してください。

乾杯、あなたがデータの使用を許可されているfilestypesれているいくつかの制限があるかもしれないこと

+0

くそっ! : –

+0

おそらく< object/>要素を使用して、一部の< param/>要素のデータをAcrobatに渡すことができますが、これは単なる推測です。 – Boldewyn

1

ウィキペディアを参照するために粘着性かもしれないが、Wikipdia says:ファイルタイプ;上base64で構文を。すなわち、今のところ写真のみです。この記事では、IE9の仕様ではより広範な使用が可能だと述べていますが、正確に何が必要なのかは分かりません。その間、.pdfファイルを使用するだけで、基本64文字列データではなく、使用する必要があります。

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); 
関連する問題