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# 如何附加内存流 专用内存流转换器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

我正在使用web控件图表开发express 并且需要将web控制图转换为pdf 我的问题:如何向内存流添加数据? 此代码显示最后一个web图表 我建议零号错了 stream.Write(temp.ToArray(),0,temp.ToArray().Length);
搜索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
    );