Réglage de l'attribut src de l'IFrame de données:application/pdf;base64?
Paramètre de l'attribut src de l'IFrame de données:application/pdf;base64, n'est-ce pas de travail pour moi, des idées pourquoi?
Voici la .aspx balisage
<%@ 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>
et voici le code behind:
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();
}
}
Je dois dire que contrairement à cet exemple, dans la vraie application, les données pdf est généré serverside. La raison pour laquelle je suis en train de charger le pdf de données côté client est que je dois avoir le pdf de l'octet de données côté client de toute façon faire autre chose, et je suis en train de réduire les cas de ces données générées et chucked autour de.
Il suffit de coller le code ci-dessus et de balisage en une simple page web dans VS2005 et le bâton n'importe quel vieux pdf c:\temp\, de l'appeler TestDoc.pdf et il doit compiler et l'exécuter.
Fondamentalement le comportement que j'obtiens est rien dans l'iframe à tous.
J'utilise IE7 donc cela pourrait être un problème. Je ne sais pas car il n'y a que peu d'informations sur l'utilisation de la de données:application/pdf;base64[base64 de données] syntaxe autour de.
Vous devez vous connecter pour publier un commentaire.
Pour autant que je sais, c'est à dire ne pas traiter les données: schéma d'URL à tous, alors, je suppose, il ne sait pas ce qu'à passer à la visionneuse de PDF. Voir WP.
Acclamations,
Il peut être collante pour faire référence à wikipédia, mais Wikipdia dit qu'il peut y avoir certaines restrictions sur qui filestypes vous êtes autorisé à utiliser les données:filetype;base64 de la syntaxe. À savoir, seules les photos pour l'instant. IE9 spec, le dit l'article, permet une utilisation plus large, mais je ne suis pas sûr de ce que exactement ce que cela implique. En attendant, vous aurez juste à utiliser le .fichier pdf et non seulement c'est la base de 64 données de chaîne.
de cette façon fonctionné pour moi :