PDA

View Full Version : اضافه کردن به انتهای memory stream



forestasphalt
چهارشنبه 08 آبان 1392, 16:16 عصر
private MemoryStream ConvertWebChartChartToImage(WebChartControl chart)
{
using (var pcl = new PrintableComponentLink(new PrintingSystem())
{
PageHeaderFooter = new PageHeaderFooter(new PageHeaderArea(new string[] { "A", "Header" },
SystemFonts.DialogFont, BrickAlignment.Center),
new PageFooterArea(new string[] { "B" },
SystemFonts.DialogFont, BrickAlignment.Center)),
Component = ((IChartContainer)chart).Chart,
Landscape = true
})
{
((Chart)pcl.Component).OptionsPrint.SizeMode = DevExpress.XtraCharts.Printing.PrintSizeMode.Stret ch;

TransDistributionWCh.Legend.AlignmentHorizontal = LegendAlignmentHorizontal.Right;
pcl.CreateDocument();
var stream = new MemoryStream();
pcl.PrintingSystem.ExportToPdf(stream);
return stream;
}

}


private void ConvertHTMLStringToPDF()
{
using (var stream = new MemoryStream())
{
var listChartControl = new List<WebChartControl>(new List<WebChartControl>
{
SuccTransDistributionWCh,
AmountPerDayWCh,
TransPerDayWCh,
AmountPerTransPerDayWCh,
ActiveTerminalPerDayWCh,
TransNoWCh,
TransAmountWCh,
TransNoAmountWCh
});
int offset = 0;
foreach (var item in listChartControl)
{

var temp = ConvertWebChartChartToImage(item);
stream.Write(temp.ToArray(), 0, temp.ToArray().Length);

}
var merged = stream;
HttpContext.Current.Response.ContentType = "application/pdf";
HttpContext.Current.Response.AddHeader("Accept-Header", merged.Length.ToString(CultureInfo.InvariantCultur e));
HttpContext.Current.Response.AddHeader("Content-Disposition", ("Attachment") + "; filename=chart.pdf");
HttpContext.Current.Response.AddHeader("Content-Length", merged.Length.ToString(CultureInfo.InvariantCultur e));
HttpContext.Current.Response.ContentEncoding = Encoding.Default;
HttpContext.Current.Response.BinaryWrite(merged.To Array());
}
HttpContext.Current.Response.End();
}


من یه سری چارت مربوط به شرکت dev express رو دارم
که میخوام به صورت پی دی اف اون ها رو چاپ کنم
کد کار میکنه ولی متاسفانه هر کاری کردم که بتونم به انتهای memory stream اضافه کنم که مجموع اون عکس ها رو بتونم چاپ کنم و نشد و همیشه هم آخریشو چاپ میکنه طبیعی هم هست به خاطر اون عدد صفر در خط زیر هست
مثال های زیادی رو هم امتحان کردم بازم نشد
ظاهرا اصل مشکل اینجاست


stream.Write(temp.ToArray(), 0, temp.ToArray().Length);

به جای عدد صفر عدد مناسبی گذاشته بشه مشکل احتمالا حل خواهد شد
به جای اون عدد صفر هر چیزی گذاشتم باز هم خطای خارج شدن از بازه رو میده


Offset and length were out of bounds for the array or count is greater than the number of elements from index to the end of the source collection.

لطفا راهنمایی کنید با تشکر

rahnema1
چهارشنبه 08 آبان 1392, 20:44 عصر
پرانتز foreach را بیار پایین تر ببین درست میشه یا نه؟



foreach (var item in listChartControl)
{

var temp = ConvertWebChartChartToImage(item);
stream.Write(temp.ToArray(), 0, temp.ToArray().Length);



var merged = stream;
HttpContext.Current.Response.ContentType = "application/pdf";
HttpContext.Current.Response.AddHeader("Accept-Header", merged.Length.ToString(CultureInfo.InvariantCultur e));
HttpContext.Current.Response.AddHeader("Content-Disposition", ("Attachment") + "; filename=chart.pdf");
HttpContext.Current.Response.AddHeader("Content-Length", merged.Length.ToString(CultureInfo.InvariantCultur e));
HttpContext.Current.Response.ContentEncoding = Encoding.Default;
HttpContext.Current.Response.BinaryWrite(merged.To Array());
}

forestasphalt
پنج شنبه 09 آبان 1392, 13:01 عصر
با تشکر نه اینجوری حل نمیشه قبلا امتحان کرده بودم
ولی شخصی گفت در داخل تابع ConvertWebChartChartToImage نیازی نیست هر بار نمونه جدیدی از MemoryStream بسازم و با یک نمونه کار کنم شاید مشکل برطرف بشه
به کدها دسترسی ندارم تا این مورد رو تست کنم