silverlight页面保存为PDF

不知道什么原因 只能保存图片的一部分为PDF 纠结了很久 现在还是没弄出来

现在把silverlight页面保存为PDF的方法做个笔记

void CreateImgPdf(object sender, RoutedEventArgs e)
        {
            WriteableBitmap wb = new WriteableBitmap(LayoutRoot, null);//LayoutRoot为你想保存的控件名称 保存整个页面就是为最外层的Grid名称
            byte[] b = Convert.FromBase64String(GetBase64Image(wb));
            MemoryStream ms = new MemoryStream(b);
            XImage img = XImage.FromStream(ms);

            SaveFileDialog d = new SaveFileDialog();
            d.Filter = "PDF file format|*.pdf";

            // Save the document...
            if (d.ShowDialog() == true)
            {
                document = new PdfDocument();
                document.Info.Title = "图形方式生成PDF";
                document.Info.Author = "菩提树下的杨过";
                document.Info.Subject = "利用WriteableBitmap生成PDF图片";
                document.Info.Keywords = "Silverlight,PDF";
                XGraphics gfx = XGraphics.FromPdfPage(document.AddPage());
                gfx.DrawImage(img, new Point() { X = 0, Y = 0 });
                document.Save(d.OpenFile());
            }

            ms.Close();
            ms.Dispose();

        }

        /// <summary>
        /// 老外写的方法:将WriteableBitmap转化为base64位字符串
        /// </summary>
        /// <param name="bitmap"></param>
        /// <returns></returns>
        private string GetBase64Image(WriteableBitmap bitmap)
        {
            int width = bitmap.PixelWidth;
            int height = bitmap.PixelHeight;
            int bands = 3;
            byte[][,] raster = new byte[bands][,];

            for (int i = 0; i < bands; i++)
            {
                raster[i] = new byte[width, height];
            }

            for (int row = 0; row < height; row++)
            {
                for (int column = 0; column < width; column++)
                {
                    int pixel = bitmap.Pixels[width * row + column];
                    raster[0][column, row] = (byte)(pixel >> 16);
                    raster[1][column, row] = (byte)(pixel >> 8);
                    raster[2][column, row] = (byte)pixel;
                }
            }

            ColorModel model = new ColorModel { colorspace = ColorSpace.RGB };
            FluxJpeg.Core.Image img = new FluxJpeg.Core.Image(model, raster);
            MemoryStream stream = new MemoryStream();
            JpegEncoder encoder = new JpegEncoder(img, 100, stream);
            encoder.Encode();

            stream.Seek(0, SeekOrigin.Begin);
            byte[] binaryData = new Byte[stream.Length];
            long bytesRead = stream.Read(binaryData, 0, (int)stream.Length);

            string base64String =
                    System.Convert.ToBase64String(binaryData,
                                                  0,
                                                  binaryData.Length);

            return base64String;
        }

silverlight页面代码 :<Button Content="保存PDF" Height="23" Width="75" Name="btnSilverlightToPDF" Click="CreateImgPdf" />

不好意思  原作者的链接暂时忘记了。。以后补上

dll下载:
FJ.Core.dll
silverPDF.dll

内容简介 《Silverlight揭秘》涵盖了Silverlight XAML 的方方面面,深入探讨了Silverlight 的特性,如图形、文字、音频、视频、动画和事件等,也讲述了如何使用构建块创建可重用的控件,执行普通的任务(如拖放),并解释了如何下载资源以增强用户体验,说明了如何创建混合使用Silverlight 和HTML/Flash 内容的应用程序。 编辑推荐 《Silverlight揭秘》适合所有Web 开发人员阅读。Silverlight是微软公司开发的全新RIA(富因特网应用)解决方案,它依托NET平台,集微软众多技术精华于一身,提供跨浏览器、跨平台支持,一经问世,就吸引了全世界开发者和设计师的目光。 《Silverlight揭秘》出自微软核心开发人员和广受赞誉的优秀技术作家Adam Naillan之手,许多内容来自微软公司内部的第一手资料。是公认的权威之作。书中沿袭了《WPF揭秘》一书的创新性写作风格,通过极具参考价值的代码和许多专家提示。通俗明快而又深入实用地讲述了Silve rligt的各项关键技术。全书采用全彩印刷,代码示例和程序效果都原样重现,为我们展示了Silverlight的无穷魅力。 【版本说明】由于Silverligl-11新版本是在1.0基础上进行扩展,而且向后兼容。所以《Silverlight揭秘》对于后续版本仍然适用、、Adam Nathan微软开发部门软件开发高级工程师。1999年加入微软CLR开发团队,一直效力于.NET核心技术开发部门,是.NET技术元老之一。他开发和创建了许多流行工具和.NET开发网站,包括PINVOKE.NET、CLR SPY以及XAML.share.com,最近作为核心架构师使用Silverligtlt开发了微软创新网站Popfly。他是久负盛名的技术作家。作品.NET and COM一书曾是微软内部最受欢迎的技术图书,近著《WPF揭秘》(人民邮电出版社出版)也是Amazon的超级畅销书。 作者简介 作者:(美国)内森 (Adam Nathan) 译者:瞿杰
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值