Загрузить PDF из памяти ASP.Net

Я использую ITextSharp для создания PDF-файла на лету, а затем сохраняю его на диск и отображаю с помощью Frame.

У фрейма есть атрибут с именем src, куда я передаю сгенерированное имя файла.

Все это работает нормально, чего я хочу добиться, - это передать сгенерированный файл PDF в Frame без сохранения его на диск.

HtmlToPdfBuilder builder = new HtmlToPdfBuilder(PageSize.LETTER);
HtmlPdfPage first = builder.AddPage();

//import an entire sheet
builder.ImportStylesheet(Request.PhysicalApplicationPath + "CSS\\Stylesheet.css");
string coupon = CreateCoupon();
first.AppendHtml(coupon);

byte[] file = builder.RenderPdf();
File.WriteAllBytes(Request.PhysicalApplicationPath+"final.pdf", file);
printable.Attributes["src"] = "final.pdf";

person Sandhurst    schedule 18.03.2010    source источник


Ответы (1)


Я сделал именно то, что вы пытаетесь сделать. Вы захотите создать обработчик (.ashx). После того, как вы создали свой PDF-файл, загрузите его в свой обработчик, используя приведенный ниже код:

[WebService(Namespace = "http://tempuri.org/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
public class MapHandler : IHttpHandler, IReadOnlySessionState 
{ 

    public void ProcessRequest(HttpContext context) { 
        CreateImage(context); 
    } 

    private void CreateImage(HttpContext context) { 

        string documentFullname = // Get full name of the PDF you want to display... 

        if (File.Exists(documentFullname)) { 

            byte[] buffer; 

            using (FileStream fileStream = new FileStream(documentFullname, FileMode.Open, FileAccess.Read, FileShare.Read)) 
            using (BinaryReader reader = new BinaryReader(fileStream)) { 
                buffer = reader.ReadBytes((int)reader.BaseStream.Length); 
            } 

            context.Response.ContentType = "application/pdf"; 
            context.Response.AddHeader("Content-Length", buffer.Length.ToString()); 
            context.Response.BinaryWrite(buffer); 
            context.Response.End(); 

        } else { 
            context.Response.Write("Unable to find the document you requested."); 
        } 
    } 

    public bool IsReusable { 
        get { 
            return false; 
        } 
    } 
person Jay Riggs    schedule 18.03.2010
comment
Я думаю, вы неправильно поняли - он хочет записать сгенерированный PDF-файл, даже не записывая его на диск. Если бы вы могли включить его код генерации pdf в свою функцию CreateImage, чтобы pdf создавался в памяти и записывался в ответ за один раз, то это был бы хороший ответ. - person patmortech; 18.03.2010