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.
놈을! : 오히려 더 많은 시간을 절약 할 수 있습니다. 답변 주셔서 감사합니다 –
아마도 < object/> 요소를 사용하고 Acrobat에 일부 < param/> 요소의 데이터를 제공 할 수는 있지만 이는 단지 추측에 불과합니다. – Boldewyn