惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

M
MIT News - Artificial intelligence
雷峰网
雷峰网
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Last Week in AI
Last Week in AI
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
阮一峰的网络日志
阮一峰的网络日志
月光博客
月光博客
博客园 - Franky
腾讯CDC
T
Tailwind CSS Blog
Recent Announcements
Recent Announcements
V
V2EX
N
Netflix TechBlog - Medium
量子位
Jina AI
Jina AI
Y
Y Combinator Blog
The GitHub Blog
The GitHub Blog
G
Google Developers Blog
爱范儿
爱范儿
博客园 - 叶小钗
D
Docker
MongoDB | Blog
MongoDB | Blog
D
DataBreaches.Net
T
The Blog of Author Tim Ferriss

博客园 - guozili

分享12306抢票心得-终极秒杀思路篇 分享12306抢票心得-最终篇 分享12306全自动验证码识别提交,春运抢票准备时 分享“12306 P2P平台”创业Idea 分享12306秒票杀手锏源码 分享12306秒票心得及杀手锏 分享基于EF+MVC+Bootstrap的通用后台管理系统及架构 分享基于EF+WCF的通用三层架构及解析 基于Silverlight的快速开发框架RapidSL新特性解析 分享基于silverlight的一个“树形结构图”控件 基于 Silverlight的快速开发框架RapidSL新版改进源码 基于 Silverlight的快速开发框架RapidSL之MVVM解析 基于Silverlight的快速开发框架RapidSL之开源 分享基于silverlight的一个大文件上传控件 抢火车票利器:分享一个抓取火车票转让信息的小程序 基于 Silverlight的精简框架之版本升级及使用 基于 Silverlight的精简框架之版本和控件更新 Silverlight project demos for MSRA in 2009,to look forward to silverlight's furture 异步编程练习
分享基于silverlight的仿“百度文库”的文档控件
guozili · 2012-07-16 · via 博客园 - guozili

通用的FlashPaper支持Word/Excel/PDF,到时对于Silverlight的XPS的文档支持问题比较多,本控件提供了一个可视化的XPS文档展示,提供放大缩小/打印/搜索/分页等功能,主要整合了开源的Document Toolkit。

1. 使用Document Toolkit,DocumentDataSource提供数据源,PageNvaigator提供分页 :


<doc:DocumentDataSource x:Name="dataSource"/>

        <doc:DocumentViewer Grid.Row="1" x:Name="viewer" DocumentDataSource="{Binding ElementName=dataSource}" ViewMode="{Binding SelectedViewMode, ElementName=viewModePicker}" BorderBrush="#9fa9a4" BorderThickness="1"/>

        <doc:PageNavigator x:Name="navigator" HorizontalAlignment="Center" 
                    PageCount
="{Binding PageCount, ElementName=viewer}"
                    PageIndex
="{Binding PageIndex, ElementName=viewer, Mode=TwoWay}"
                    
/>
                
        <doc:ViewModePicker Grid.Column="1" x:Name="viewModePicker" Visibility="Collapsed"/>

2. WebPackageReader读取本地xps或远程xps文件作为数据源

    DotNetZipPackageReader 根据分页延迟加载文档


// loads the sample XPS document from the web
            var url = string.Format("/DocumentService.ashx?id={0}", HtmlPage.Document.GetElementById("documentId").GetProperty("value"));
            webClient.OpenReadAsync(new Uri(HtmlPage.Document.DocumentUri, url));

            var reader = new WebPackageReader(new Uri(HtmlPage.Document.DocumentUri, url + "&part="));
            this.dataSource.PackageReader = reader;
            var xpsClient = new XpsClient();
            xpsClient.LoadXpsDocumentAsync(reader);

3. 服务端根据请求的文件ID和当前页码返回指定的文件流


private void Response(HttpContext context, string xpsFileName, string partName)
        {
            using (FileStream stream = File.OpenRead(xpsFileName))
            {
                ZipFile file = new ZipFile(stream);
                ZipEntry entry = file.GetEntry(partName);
                if (entry != null)
                {
                    using (Stream entryStream = file.GetInputStream(entry))
                    {
                        // TODO: set mime-type as defined in XPS package
                        context.Response.ContentType = "application/octet-stream";
                        byte[] buffer = new byte[2 << 14];    // write blocks of 32768 bytes
                        int read;
                        while ((read = entryStream.Read(buffer, 0, buffer.Length)) > 0)
                        {
                            context.Response.OutputStream.Write(buffer, 0, read);
                        }
                    }
                }
                else
                {
                    // return 404 Not Found
                    context.Response.StatusCode = (int)HttpStatusCode.NotFound;
                }
            }

        }

4. 源代码下载

 https://199.47.216.171/u/10032723/DocumentToolkit.rar

5. 在线预览

 6. 截图