【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-10-04 21:50:02

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

使用iTextSharp读取PDF文档

网上有很多获取pdf页数方法有读流判断type/page的但是经过实际测试文件太大的时候往往不是很准确,既然这样我们就不用费心去自己写了可以用itextsharp. 这里是下载地址:http://sourceforge.net/projects/itextsharp/files/ (1)创建一个Windows控制台应用程序,命名为ReadPdfDemo.(2)添加对iTextSharp的引用.(3)在“Program.cs”文件中添加如下引用.using System;using System.

C# 创建、读取PDF文档

生成PDF文档我们通常可以通过文档转换的形式来得到想要的PDF,但我们也可以通过最直接的方式来创建PDF文档,由此本篇文章将介绍C#如何来创建带图.文元素的PDF文档.同理,对于需要读取PDF文档的情况,我们也可以分情况来读取想要的文档元素(文本.图片).在下面的示例中将做详细介绍. 示例要点梳理: 一.创建PDF文档(可支持中文)1.写入文本(包括页边距.字体.字号等设置)2.绘入图片二.读取PDF文档1.读取文本1.1读取全部文本1.2读取指定区域文本2.读取图片使用工具:Free Spir

Python读取PDF文档

1 from pdfminer.converter import PDFPageAggregator 2 from pdfminer.layout import LAParams 3 from pdfminer.pdfparser import PDFParser 4 from pdfminer.pdfparser import PDFDocument 5 from pdfminer.pdfinterp import PDFResourceManager 6 from pdfminer.pdfi

java读取pdf文档

import java.io.*;import org.pdfbox.pdmodel.PDDocument;import org.pdfbox.pdfparser.PDFParser;import org.pdfbox.util.PDFTextStripper; public class PDFReader {  public static String file_path = "F:/pdf/网易技术部的MySQL中文资料.pdf"; // 获取PDF内纯文本信息 public St

C#读取PDF文档内容

一.下载PDFBox 访问网址http://sourceforge.net/projects/pdfbox/ (这个绝对是个好网站) 二.引用动态链接库 解压缩下载的PDFBox,找到其中的Bin目录,需要在项目中添加引用的dll文件有:    IKVM.GNU.Classpath.dll    PDFBox-0.7.3.dll    FontBox-0.1.0-dev.dll    IKVM.Runtime.dll 将以上4个文件引用到项目中,在文件中需要引入以下2个命名空间:    usin

java操作office和pdf文件java读取word,excel和pdf文档内容

在平常应用程序中,对office和pdf文档进行读取数据是比较常见的功能,尤其在很多web应用程序中.所以今天我们就简单来看一下Java对word.excel.pdf文件的读取.本篇博客只是讲解简单应用.如果想深入了解原理.请读者自行研究一些相关源码. 首先我们来认识一下读取相关文档的jar包: 1. 引用POI包读取word文档内容 poi.jar 下载地址 http://apache.freelamp.com/poi/release/bin/poi-bin-3.6-20091214.zip 

常用PDF文档开发库

C++库: 1,PDF类库 PoDoFo   http://podofo.sourceforge.net/  PoDoFo 是一个用来操作 PDF 文件格式的 C++ 类库.它还包含一些小工具用来解析.修改和创建 PDF 文 2,Xpdf http://www.foolabs.com/xpdf/download.html   Xpdf是一个开放源代码的PDF档案浏览器,Xpdf 可解码LZW压缩格式并阅读加密的PDF文件 3,PDF生成工具 Poppler http://poppler.free

PDF文档:Itext 的基础知识

一.Itext简介 1.API地址:javadoc/index.html 如 D:/MyJAR/原JAR包/PDF/itext-5.5.3/itextpdf-5.5.3-javadoc/index.html 2.功能:a Free Java-PDF 3.中文支持:iTextAsian.jar,现在高版本Itext不支持语言包. 4.使用的版本:iTextpdf-5.0.0.jar, iTextAsian-2.0.jar 二.Itext API (一)PDF文档生成的5步 /** * 5步生成一个

python解析PDF文档

1.安装 pip install pdfminer3k 2.  python读取PDF文档代码分析 PDF格式不是规范格式. 尽管它被叫做"PDF文档", 但并不像word或者html文档.PDF的表现更像一张图片.PDF更像是在一张纸的各个准确的位置上把内容都摆放出来.大部分情况下,没有逻辑结构,比如句子或段落,并且不能自适应页面大小的调整.PDFMiner尝试通过猜测它们的布局来重建它们的结构,但是不保证一定能工作.我知道这样很难看,但是,PDF确实不够规范. 下面这个图片是使用流