forestasphalt
چهارشنبه 08 آبان 1392, 17: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.
لطفا راهنمایی کنید با تشکر
{
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.
لطفا راهنمایی کنید با تشکر