【Win10 开发】读取PDF文档

原文:【Win10 开发】读取PDF文档

关于用来读取PDF文档的内容的API,其实在Win8.1的时候就有,不过没关系,既咱们讨论的是10的UAP,连同8.1的内容也包括进去,所以老周无数次强调:把以前的内容学好了,就可以在不学习任何新知识的前提直接进入10的开发,至于你信不信,反正我信了。

 

好,P话不扯了,今天刚升级了Build 10061,VS创建UAP并运行是没什么问题的,不过XAML设计器貌似不太听话,比较淘气;还有个别API有问题,虽然异常报的是CLR损坏,但我们知道RT其实是基于COM的形式注册的,实际上是Win32的数据封送过程出现错误造成的,更精细一点说,就是指针读了不该读的内存地址造成的。这种事件在COM中也常见,毕竟现在是预览阶段,任何灵异事件都是正常的,我已经向官方团队Feed back了。

 

今天老周给大家说说如何读取PDF文档内容吧,有些时候,这些API是用得上的,尽管不是开发专业的阅读器,开发专业阅读器就没那么轻松。本文只讲述如何读。

支持读取PDF文档的类型都扔在Windows.Data.Pdf命名空间下,你就在这里面拼命找就行了。

加载PDF文档操作起来也不算复杂。

1、PdfDocument类表示一个PDF文档对象,可以调用静态的LoadFromFileAsync方法从文件中加载,也可以调用静态的LoadFromStreamAsync方法从流加载。从PDF文件加载的情况比较多。

2、得到PdfDocument实例后,你可以查阅一下PageCount属性,看看这个文档有多少页。如果页数不多,可以考虑一次性加载,如果文档有30万页的话,建议换一台世界上最贵的电脑来加载。

3、通过GetPage方法获取一个页面的内容,方法参数当然是页码了,这个页码从0开始,最后一页就是count - 1。

4、得到PdfPage实例后,因为页面内容刚被取出,有些紧张,全身发抖,所以先调用一下PreparePageAsync方法,让页面做一下深呼吸,调整一下心态。但经测试,不调用这个方法也没有发生异常,页面也能正确加载。

5、深呼吸做完后,就要开始表演了。调用RenderToStreamAsync方法让页面表演节目,并且全程录像,最后以图片格式保存到流中。这个流可以是内存流,也可以是文件流。如果是文件流的话,相当于把PDF的每一页都导出为一张图片。

6、可以用Image类在界面上显示PDF页面了。

 

理论永远都是无聊的,咱们还是实干吧。为了解除大家的工作疲劳状态,我这个示例用来演示的PDF是关于美女的,我知道大家看到美女就会兴奋的。

看看代码:

            StorageFile pdfFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///0.pdf"));
            PdfDocument pdf = await PdfDocument.LoadFromFileAsync(pdfFile);

            // 获取PDF文档的总页数
            uint pageCount = pdf.PageCount;

            List<BitmapImage> pageimages = new List<BitmapImage>();
            // 获取页面列表
            for(uint p = 0; p < pageCount; p++)
            {
                PdfPage page = pdf.GetPage(p);
                await page.PreparePageAsync();
                // 将页面内容保存为图像
                InMemoryRandomAccessStream ms = new InMemoryRandomAccessStream();
                await page.RenderToStreamAsync(ms);
                BitmapImage bmp = new BitmapImage();
                // 设置图像宽度
                bmp.DecodePixelWidth = 2000;
                bmp.SetSource(ms);
                // 释放资源
                ms.Dispose();
                page.Dispose();
                pageimages.Add(bmp);
            }
            flpv.ItemsSource = pageimages;

我这个PDF文件直接放到项目目录中,为了方便。StorageFile.GetFileFromApplicationUriAsync调用后,就可以得到该PDF文件的引用,然后就用PdfDocument类来加载。

加载后得到文档的总页数,然后一个循环把所有页面都读出来,并生成图像。因为这个PDF页数不多,反正在小霸王学习机上面运行是没问题的。

 

用来显示页面列表的是一个FlipView控件,界面XAML代码参考如下:

        <Grid Margin="20">
            <Grid.RowDefinitions>
                <RowDefinition Height="auto"/>
                <RowDefinition />
            </Grid.RowDefinitions>
            <Button Content="加载PDF" Margin="15,8" Click="OnClick"/>

            <FlipView Grid.Row="1" Name="flpv">
                <FlipView.ItemTemplate>
                    <DataTemplate>
                        <ScrollViewer ZoomMode="Enabled" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
                            <Image Source="{Binding}"/>
                        </ScrollViewer>
                    </DataTemplate>
                </FlipView.ItemTemplate>
            </FlipView>
        </Grid>

<ScrollViewer ZoomMode="Enabled"……是为了让ScrollViewer支持缩放。用鼠标的话就是按住Ctrl键,然后滚动滑轮;用触控的话就不用我介绍了。

 

好,运行一下,看看结果。

 

就这样吧,要开饭了。

源码下载:http://files.cnblogs.com/files/tcjiaan/ReadPDFApp.zip

 

时间: 2024-12-31 01:33:49

【Win10 开发】读取PDF文档的相关文章

java 读取pdf文档中的表格数据

问题描述 java 读取pdf文档中的表格数据 如题,如何使用Java读取PDF表格中的数据!跪求帮助,在线等回复,急!急!急! 解决方案 用Java读取pdf中的数据用Java读取pdf中的数据用Java读取pdf中的数据 解决方案二: 读出来就行,还是一行一条数据 解决方案三: http://bbs.csdn.net/topics/320171930 解决方案四: 要是实在不行先转换了啊

winform-有没有这样的组件,可以读取pdf文档,并且可以获取pdf文档当前页面的页码

问题描述 有没有这样的组件,可以读取pdf文档,并且可以获取pdf文档当前页面的页码 最近在做一个项目,要求在程序界面中显示pdf文档,并且自动获取该文档的当前页的页码, 我也用Adobe Acrobat PDF Reader 做了,但是没办法获得当前页的页码,在网上搜了好多,都没找到符合我的需求的组件,希望各位大侠指个思路 解决方案 用foxit sdk.http://www.foxitsoftware.cn/products/sdk/activex/ 解决方案二: 在线预览WORD文档,PD

C#中编程读取Word文档和Pdf的内容

最近项目需要实现一个功能:读取doc,docx,pdf文件内容.在网上搜罗许久,还是发现有些好东西可以直接拿来使用,要不然就得自己发明轮子了.接下来我就简单介绍了用了哪些组件来实现这个功能的. Doc文档:Microsoft Word 14.0 Object Library (GAC对象,调用前需要安装word.安装的word版本不同,COM的版本号也会不同) Docx文档:Microsoft Word 14.0 Object Library (GAC对象,调用前需要安装word.安装的word

谢谢大家-Android如何读取word和pdf文档

问题描述 Android如何读取word和pdf文档 大家好! 我是个Android新手,最近有个项目,其中有个需求就是在Android应用程序中查看word和pdf格式的文档(PS:不是用intent调用第三方软件打开文档哦~),可惜Android没有直接显示word和pdf文档的view.于是本菜鸟上网查了好久好久好久哇= =. 对于word,很多人说是用poi解析之后,再复写成html,最后用WebView显示. 那么,这个就是最普遍最简单的方法了么? 我感到很麻烦= = 还有别的方法么?

求高手解答:开发农行接口时遇到“无法读取证书文档”!!!在线等~~~~~~~~~~

问题描述 在开发农行的接口时调试Demo遇到的问题,"无法读取证书文档",商户证书文档已经导入了,环境变量也配置了,这是配置文件的三个证书的目录:#网上支付平台证书TrustPayCertFile=E:/Web/ABCbank/demo/newcert/TrustPay.cer#农行根证书文件TrustStoreFile=E:/Web/ABCbank/demo/newcert/abc.truststore#商户证书储存目录档名(当KeyStoreType=0时,必须设定)Merchan

基于PHP与XML的PDF文档生成技术

xml 摘要 本论文简要介绍了PHP.XML.PDF等技术的原理以及它们的应用情况.力图运用PHP面向对象的特性,构建出一套基于PHP和XML的在线PDF文档生成系统.文中详细探讨了整个系统的组成部分以及各自的实现过程.并在最后给出一个运用这套系统实现的动态创建报表的实例. AbstractThis article introduced the fundamentls of PHP,XML and PDF and their application situation at present,ex

基于PHP与XML的PDF文档生成技术_php基础

摘要<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> 本论文简要介绍了PHP.XML.PDF等技术的原理以及它们的应用情况.力图运用PHP面向对象的特性,构建出一套基于PHP和XML的在线PDF文档生成系统.文中详细探讨了整个系统的组成部分以及各自的实现过程.并在最后给出一个运用这套系统实现的动态创建报表的实例. Abstract This article introdu

Java实现web在线预览office文档与pdf文档实例

1.首先我们需要找到可以把office转换成pdf的方法,查找资料发现有openoffice这一软件可以把office转换成pdf,这一软件先下载下来,然后记住自己安装的在那个位置.然后在cmd环境下进入安装目录的program目录,输入打开openoffice的命令:soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard 输入完成之后在任务管理器可以看见soffice.b

用PHP编写PDF文档生成器

PHP一个最大的优点就是它对新技术的支持非常容易,这种语言的可扩展性使得开发人员能够很方便地添加新的模块,而且遍布世界的技术团体的支持和众多扩展模块的支持使得PHP已经成为功能最齐全的Web编程语言之 一.目前可得到的扩展模块已经能够使开发人员执行IMAP和POP3操作,可以动态产生图象和Shockwave Flash动画,进行信用卡验证,敏感数据的加密解密,还能够解析XML格式的数据.但这还不是全部,现在,又有一个新的模块可以与PHP进行绑定了,那就是PDFLib扩展模块,它能够让开发人员动态