C# 如何附加内存流 专用内存流转换器WebChartChartToImage(WebChartControl图表) { 使用(var pcl=new PrintableComponentLink(new PrintingSystem()) { PageHeaderFooter=新的PageHeaderFooter(新的PageHeaderArea(新字符串[]{“A”,“Header”}, SystemFonts.DialogFont,BrickAlignment.Center), 新建PageFooterArea(新字符串[]{“B”}, SystemFonts.DialogFont,BrickAlignment.Center), 组件=((IChartContainer)图表)。图表, 横向=真实 }) { ((图表)pcl.Component)。选项Print.SizeMode=DevExpress.XtraCharts.Printing.PrintSizeMode.Stretch; TransDistributionWCh.Legend.AlignmentHorizontal=LegendAlignmentHorizontal.Right; pcl.CreateDocument(); var stream=newmemoryStream(); pcl.PrintingSystem.ExportToPdf(流); 回流; } } 私有void ConvertHTMLStringToPDF() { 使用(var stream=new MemoryStream()) { var listChartControl=新列表(新列表 { 成功分配, 每天的数量, TransPerDayWCh, 每日运输量, 活动终端PerdayWCH, 特兰斯诺奇, 横贯世界, 特朗斯诺瓦奇 }); foreach(listChartControl中的变量项) { var temp=图表图像(项目); stream.Write(temp.ToArray(),0,temp.ToArray().Length); } HttpContext.Current.Response.ContentType=“application/pdf”; HttpContext.Current.Response.AddHeader(“接受头”,stream.Length.ToString(CultureInfo.InvariantCulture)); HttpContext.Current.Response.AddHeader(“内容处置”(“附件”)+“文件名=chart.pdf”); HttpContext.Current.Response.AddHeader(“内容长度”,stream.Length.ToString(CultureInfo.InvariantCulture)); HttpContext.Current.Response.ContentEncoding=Encoding.Default; HttpContext.Current.Response.BinaryWrite(stream.ToArray()); } HttpContext.Current.Response.End();}
我正在使用web控件图表开发express 并且需要将web控制图转换为pdf 我的问题:如何向内存流添加数据? 此代码显示最后一个web图表 我建议零号错了 stream.Write(temp.ToArray(),0,temp.ToArray().Length);C# 如何附加内存流 专用内存流转换器WebChartChartToImage(WebChartControl图表) { 使用(var pcl=new PrintableComponentLink(new PrintingSystem()) { PageHeaderFooter=新的PageHeaderFooter(新的PageHeaderArea(新字符串[]{“A”,“Header”}, SystemFonts.DialogFont,BrickAlignment.Center), 新建PageFooterArea(新字符串[]{“B”}, SystemFonts.DialogFont,BrickAlignment.Center), 组件=((IChartContainer)图表)。图表, 横向=真实 }) { ((图表)pcl.Component)。选项Print.SizeMode=DevExpress.XtraCharts.Printing.PrintSizeMode.Stretch; TransDistributionWCh.Legend.AlignmentHorizontal=LegendAlignmentHorizontal.Right; pcl.CreateDocument(); var stream=newmemoryStream(); pcl.PrintingSystem.ExportToPdf(流); 回流; } } 私有void ConvertHTMLStringToPDF() { 使用(var stream=new MemoryStream()) { var listChartControl=新列表(新列表 { 成功分配, 每天的数量, TransPerDayWCh, 每日运输量, 活动终端PerdayWCH, 特兰斯诺奇, 横贯世界, 特朗斯诺瓦奇 }); foreach(listChartControl中的变量项) { var temp=图表图像(项目); stream.Write(temp.ToArray(),0,temp.ToArray().Length); } HttpContext.Current.Response.ContentType=“application/pdf”; HttpContext.Current.Response.AddHeader(“接受头”,stream.Length.ToString(CultureInfo.InvariantCulture)); HttpContext.Current.Response.AddHeader(“内容处置”(“附件”)+“文件名=chart.pdf”); HttpContext.Current.Response.AddHeader(“内容长度”,stream.Length.ToString(CultureInfo.InvariantCulture)); HttpContext.Current.Response.ContentEncoding=Encoding.Default; HttpContext.Current.Response.BinaryWrite(stream.ToArray()); } HttpContext.Current.Response.End();},c#,memorystream,C#,Memorystream,我正在使用web控件图表开发express 并且需要将web控制图转换为pdf 我的问题:如何向内存流添加数据? 此代码显示最后一个web图表 我建议零号错了 stream.Write(temp.ToArray(),0,temp.ToArray().Length); 搜索google和此站点,不幸的是问题没有得到解决我不知道ExportToPdf方法是如何工作的,但如果它是人工编写的,那么就足够使用单一流了: private MemoryStream ConvertWebChartChartT
搜索google和此站点,不幸的是问题没有得到解决我不知道ExportToPdf方法是如何工作的,但如果它是人工编写的,那么就足够使用单一流了:
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
});
foreach (var item in listChartControl)
{
var temp = ConvertWebChartChartToImage(item);
stream.Write(temp.ToArray(), 0, temp.ToArray().Length);
}
HttpContext.Current.Response.ContentType = "application/pdf";
HttpContext.Current.Response.AddHeader("Accept-Header", stream.Length.ToString(CultureInfo.InvariantCulture));
HttpContext.Current.Response.AddHeader("Content-Disposition", ("Attachment") + "; filename=chart.pdf");
HttpContext.Current.Response.AddHeader("Content-Length", stream.Length.ToString(CultureInfo.InvariantCulture));
HttpContext.Current.Response.ContentEncoding = Encoding.Default;
HttpContext.Current.Response.BinaryWrite(stream.ToArray());
}
HttpContext.Current.Response.End();}
请注意,原始代码会导致不必要的内存分配:
private void ConvertWebChartChartToImage(WebChartControl chart, Stream stream)
{
// ...
pcl.PrintingSystem.ExportToPdf(stream);
}
private void ConvertHTMLStringToPDF()
{
using (var stream = new MemoryStream())
{
// ...
foreach (var item in listChartControl)
{
ConvertWebChartChartToImage(item, stream);
}
// ...
}
}
并且不处理从ConvertWebChartChartToImage
方法返回的MemoryStream
实例
另外,如果要将一个流的内容复制到另一个流的内容,可以使用/methods
stream.Write(
temp.ToArray(), // allocate temporary array, copy stream content into array
0,
temp.ToArray().Length // allocate another array, copy stream content into array
);