【Win10 开发】读取PDF文档

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

原文:【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

 

目录
相关文章
|
2月前
|
应用服务中间件
使用 Adobe Livecycle Enterprise service 将 word 文档转换成 PDF 格式
使用 Adobe Livecycle Enterprise service 将 word 文档转换成 PDF 格式
28 0
|
3月前
|
Ubuntu Java Linux
在Spring Boot中使用iTextPDF创建动态PDF文档
iTextPDF 是一个用于创建和操作 PDF(Portable Document Format)文档的流行的 Java 库。它提供了一套全面的功能,用于处理 PDF 文件,包括创建新文档、修改现有文档以及提取信息。
84 1
|
1月前
|
数据采集 移动开发 前端开发
springboot使用html模版导出pdf文档
springboot使用html模版导出pdf文档
|
2月前
|
Java Linux 数据安全/隐私保护
Java【代码 16】将word、excel文件转换为pdf格式和将pdf文档转换为image格式工具类分享(Gitee源码)aspose转换中文乱码问题处理
【2月更文挑战第3天】Java 将word、excel文件转换为pdf格式和将pdf文档转换为image格式工具类分享(Gitee源码)aspose转换中文乱码问题处理
96 0
|
2月前
|
开发框架 前端开发 .NET
福利来袭,.NET Core开发5大案例,30w字PDF文档大放送!!!
为了便于大家查找,特将之前开发的.Net Core相关的五大案例整理成文,共计440页,32w字,免费提供给大家,文章底部有PDF下载链接。
32 1
福利来袭,.NET Core开发5大案例,30w字PDF文档大放送!!!
|
3月前
|
存储 Shell 数据安全/隐私保护
Python 自动化指南(繁琐工作自动化)第二版:十五、使用 PDF 和 WORD 文档
Python 自动化指南(繁琐工作自动化)第二版:十五、使用 PDF 和 WORD 文档
|
3月前
|
NoSQL 算法 Java
三面阿里云被虐,15天读完这份pdf文档,我拿下“美团通知单”
首先介绍一下我的个人背景,鄙人小康家庭,父母都是普通职业,供我读书长大不容易,好在我也算争气,高考发挥正常,考了个还算不错的大学,华南地区某211。今年的金三银四本是想好好拼一把,奈何受到疫情影响,只能将自己的计划缩减又缩减,所以第一家选择去面试的阿里,奈何三面被虐得“体无完肤”,好在自己并未气馁,复习15天后去面试了美团,最终4面拿下了offer。
|
3月前
|
安全 NoSQL Java
从安卓转到Java开发,我吃透了这份pdf,终于4面拿下美团offer
先说说个人情况吧,坐标广州,16年从一所普通二本大学毕业,毕业后在一家小公司干android开发,年薪在15w左右。转Java的契机是认识到了一个朋友,做Java后台的,经常跟他聊相关的内容,经过慎重考虑及个人的发展规划,所以就决定转型了。
|
4月前
|
XML Java Android开发
Android App开发手机阅读中PDF文件渲染器的讲解及使用(附源码 简单易懂)
Android App开发手机阅读中PDF文件渲染器的讲解及使用(附源码 简单易懂)
82 0
|
1月前
|
数据挖掘 数据安全/隐私保护 开发者
使用Spire.PDF for Python插件从PDF文件提取文字和图片信息
使用Spire.PDF for Python插件从PDF文件提取文字和图片信息
62 0