using System.IO;
using System.Threading.Tasks;
using MigraDoc.DocumentObjectModel;
using MigraDoc.Rendering;
using PdfSharp.Pdf;
namespace MyApp.Providers
{
public class ReportProvider
{
protected AzureProvider _azureProvider;
public ReportProvider()
{
_azureProvider = new AzureProvider();
}
public async Task<string> CreateReport()
{
var document = CreateDocument();
var containerName = "democontainer";
var fileName = "demodocument.pdf";
var stream = ConvertMemDocToMemoryStream(document);
return await _azureProvider.UploadStreamToAzure(containerName, fileName, stream);
}
private Document CreateDocument()
{
Document document = new Document();
var section = document.AddSection();
var paragraph = section.AddParagraph("Report Demo");
// Add other document elements here
return document;
}
protected static MemoryStream ConvertMemDocToMemoryStream(Document document)
{
PdfDocumentRenderer pdfRenderer = new PdfDocumentRenderer(false, PdfFontEmbedding.Always);
pdfRenderer.Document = document;
pdfRenderer.RenderDocument();
MemoryStream stream = new MemoryStream();
pdfRenderer.PdfDocument.Save(stream, false);
return stream;
}
}
}
using System;
using System.Configuration;
using System.IO;
using System.Threading.Tasks;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Blob;
namespace MyApp.Providers
{
public class AzureProvider
{
public async Task<string> UploadStreamToAzure(string containerName, string fileName, MemoryStream stream)
{
var blockBlob = ResolveCloudBlockBlob(containerName, fileName);
await blockBlob.UploadFromStreamAsync(stream);
return fileName;
}
public CloudBlockBlob ResolveCloudBlockBlob(string containerName, string fileName)
{
var container = ResolveCloudBlobContainer(containerName);
var blockBlob = container.GetBlockBlobReference(fileName);
return blockBlob;
}
public CloudBlobContainer ResolveCloudBlobContainer(string containerName)
{
var storageAccount = GetCloudStorageAccount();
var blobClient = storageAccount.CreateCloudBlobClient();
var container = blobClient.GetContainerReference(containerName);
return container;
}
private CloudStorageAccount GetCloudStorageAccount()
{
return CloudStorageAccount.Parse(ResolveAzureStorageConnectionString());
}
public string ResolveAzureStorageConnectionString()
{
var accountName = ConfigurationManager.AppSettings["Azure.Storage.AccountName"]; // Get account name from web.config
var accessKey = ConfigurationManager.AppSettings["Azure.Storage.PrimaryAccessKey"]; // Get primary access key from web.config
return String.Format("DefaultEndpointsProtocol=https;AccountName={0};AccountKey={1}", accountName, accessKey);
}
}
}