Hello
I have a little program that produces invoices from a database. It creates the invoices from a wordtemplate and then it adds and replaces som information on it. It creates all the invoices in a loop and then stores each document in an array.
foreach( Invoice invoice in invoices){
Document doc = new Document(System.Web.HttpContext.Current.Server.MapPath("templates/invoicetemplate.doc"));
Aspose.Words.DocumentBuilder builder = new DocumentBuilder(doc);
//Does some replacement and stuff
SendToDiskAsPdf(doc, System.Web.HttpContext.Current.Server.MapPath("../invoices/" + f.Fakturanr + ".pdf"));
//Add the stream to a collection so that we can send a concatenate document to the browser
streamColl.Add(GetPDFStream(doc));
}
MemoryStream outStream = new MemoryStream();
PdfFileEditor pdfEditor = new PdfFileEditor();
pdfEditor.Concatenate(streamColl.ToArray(), outStream);
//now what to do how do I stream it to the browser???
private static MemoryStream GetPDFStream(Document doc)
{
MemoryStream stream = new MemoryStream();
doc.Save(stream, SaveFormat.AsposePdf);
stream.Seek(0, SeekOrigin.Begin);
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(stream);
Aspose.Pdf.Pdf pdf = new Aspose.Pdf.Pdf();
pdf.IsImagesInXmlDeleteNeeded = true;
pdf.BindXML(xmlDoc, null);
pdf.IsTruetypeFontMapCached = false;
MemoryStream stream2 = new MemoryStream();
pdf.Save(stream2);
return stream2;
}
private static void SendToDiskAsPdf(Document doc, string filename){
GenericCollection<MemoryStream> streamColl = new GenericCollection<MemoryStream>();
MemoryStream stream = new MemoryStream();
doc.Save(stream, SaveFormat.AsposePdf);
stream.Seek(0, SeekOrigin.Begin);
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(stream);
Aspose.Pdf.Pdf pdf = new Aspose.Pdf.Pdf();
pdf.IsImagesInXmlDeleteNeeded = true;
pdf.BindXML(xmlDoc, null);
pdf.IsTruetypeFontMapCached = false;MemoryStream stream2 = new MemoryStream();
pdf.Save(stream2);
streamColl.Add(stream2);
FileStream outStream = new FileStream(filename, FileMode.Create);
PdfFileEditor pdfEditor = new PdfFileEditor();
pdfEditor.Concatenate(streamColl.ToArray(), outStream);
outStream.Close();
outStream.Dispose();
stream2.Close();
stream2.Dispose();
stream.Close();
stream.Dispose();
}
I think this could be done with much more simpler code and a litle fewer objects. And how do a send the concatenate document to the browser?
pdfEditor.Concatenate(streamColl.ToArray(), outStream);