Question

I am using abcPDF to dynamically create PDFs.

I want to save these PDFs for clients to retrieve any time they want. The easiest way (and the way I do now on my current server) is to simply save the finished PDF to the file system.

Seems I am stuck with using blobs. Luckily abcPDF can save to a stream as well as a file. Now, how to I wire up a stream to a blob? I have found code that shows the blob taking a stream like:

blob.UploadFromStream(theStream, options);

The abcPDF function looks like this:

theDoc.Save(theStream)

I do not know how to bridge this gap.

Thanks! Brad

Was it helpful?

Solution

Given the situation and not knowing the full list of overloads of Save() method of abcPdf, it seems that you need a MemoryStream. Something like:

using(MemoryStream ms = new MemoryStream())
{
    theDoc.Save(ms);
    ms.Seek(0, SeekOrigin.Begin);
    blob.UploadFromStream(ms, options);
}

This shall do the job. But if you are dealing with big files, and you are expecting a lot of traffic (lots of simultaneous PDF creations), you might just go for a temp file. Write the PDF to a temp file, then immediatelly upload the temp file for the blob.

OTHER TIPS

As an alternative that doesn't require holding the entire file in memory, you might try this:

using (var stream = blob.OpenWrite())
{
    theDoc.Save(stream);
}

EDIT

Adding a caveat here: if the save method requires a seekable stream, I don't think this will work.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top