需要打开PDF文件时,我们第一印象就是使用Adobe Reader。在开发中,经常会遇到需要展示PDF文件的需求。我们会借助于Adobe Reader的Active控件来实现。不过这需要客户的机器上安装有Adobe Reader,并且使用Adobe Reader的Active控件会在顶部有一个隐藏不了的工具栏。这样显然不合理。

在Github上看到一个非常好的WPF中承载PDF文件的类库。

https://github.com/reliak/moonpdf

使用非常简单,本篇博客将介绍使用MoonPdf类库来展示PDF文件。在Sourceforge上下载到MoonPdf编译好的Dll。下面通过一个WPF程序来演示,

1. 工程中添加对MoonPdfLib.dll的引用,另外记得将libmupdf.dll放置于WPF工程Bin文件下。

2. 代码:

XAML:

<Window x:Class="WPFPdfViewer.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:mpp="clr-namespace:MoonPdfLib;assembly=MoonPdfLib"xmlns:local="clr-namespace:WPFPdfViewer"mc:Ignorable="d"Title="WPF Pdf Viewer" Height="350" Width="525"><Grid><Grid.RowDefinitions><RowDefinition Height="Auto"/><RowDefinition Height="*"/></Grid.RowDefinitions><Border Background="#f0f0f0"><StackPanel HorizontalAlignment="Left" Orientation="Horizontal"><Button Content="文件" Width="50" Click="FileButton_Click" Margin="5,5"/><Button Content="放大" Width="50" Click="ZoomInButton_Click" Margin="0,5"/><Button Content="缩小" Width="50" Click="ZoomOutButton_Click" Margin="5,5"/><Button Content="100%" Width="50" Click="NormalButton_Click" Margin="0,5"/><Button Content="整页" Width="50" Click="FitToHeightButton_Click" Margin="5,5"/><Button Content="单页" Width="50" Click="SinglePageButton_Click" Margin="0,5"/><Button Content="双页" Width="50" Click="FacingButton_Click" Margin="5,5"/></StackPanel></Border><Border Background="#d3d3d3" Grid.Row="1"><mpp:MoonPdfPanel x:Name="moonPdfPanel" Background="LightGray" ViewType="SinglePage" PageRowDisplay="ContinuousPageRows" PageMargin="0,2,4,2" AllowDrop="True"/></Border></Grid>
</Window>

前台代码:

public partial class MainWindow : Window{private bool _isLoaded = false;public MainWindow(){InitializeComponent();}private void FileButton_Click(object sender, RoutedEventArgs e){var dialog = new OpenFileDialog();if (dialog.ShowDialog().GetValueOrDefault()){string filePath = dialog.FileName;try{moonPdfPanel.OpenFile(filePath);_isLoaded = true;}catch (Exception){_isLoaded = false;}}}private void ZoomInButton_Click(object sender, RoutedEventArgs e){if(_isLoaded){moonPdfPanel.ZoomIn();}}private void ZoomOutButton_Click(object sender, RoutedEventArgs e){if(_isLoaded){moonPdfPanel.ZoomOut();}}private void NormalButton_Click(object sender, RoutedEventArgs e){if(_isLoaded){moonPdfPanel.Zoom(1.0);}}private void FitToHeightButton_Click(object sender, RoutedEventArgs e){moonPdfPanel.ZoomToHeight();}private void FacingButton_Click(object sender, RoutedEventArgs e){moonPdfPanel.ViewType = MoonPdfLib.ViewType.Facing;}private void SinglePageButton_Click(object sender, RoutedEventArgs e){moonPdfPanel.ViewType = MoonPdfLib.ViewType.SinglePage;}}

MoonPdf的原理是将Pdf文件转成了图片文件,然后再显示出来的。MoonPdf的开发者在CodePlex上的这篇文章介绍了MoonPdf了,非常不错。

在这里,感谢Yang-Fei的博客。

WPF 加载PDF文件相关推荐

  1. Android 加载pdf文件

    今天来总结一下加载pdf文件. 加载pdf有好多办法, 一:使用webview来加载. mWebView.loadUrl("http://docs.google.com/gviewembed ...

  2. iframe加载pdf支持android,如何检查iframe是否已完全加载PDF文件

    如何在iframe加载PDF文件时显示加载指示符?如何检查iframe是否已完全加载PDF文件 在我部分工作的解决方案中,我执行以下操作:当模式对话框(其中包含iframe)打开时,会显示一个加载指示 ...

  3. android 上传pdf文件,Android 加载PDF文件

    今天按项目要求找了一个android的PDF控件,各种操作效果都非常好,在这里和大家分享一下. 用法很简单: 1.在build.gradle里面添加依赖 compile 'com.github.bar ...

  4. android 使用pdf文件大小,Android 加载PDF文件的使用

    https://www.jianshu.com/p/608b270a1ab8 1.1 PDF View的使用 首先我们需要加载依赖库 compile 'com.joanzapata.pdfview:a ...

  5. Unity3D 加载PDF文件以及简单的切换页面

    优化:解决切换pdf操作多崩溃问题: 在 rawImage.GetComponent<RawImage>().texture赋值前先删除之前的texture if ( rawImage.G ...

  6. html 加载pdf文件内容不显示不出来,pdf.js首次加载pdf文件时找不到pdf文件,刷新后才能出现pdf文件...

    前台点击文件学码的定一近,更工广款近,更工广款近,更名后,后台通过openoffice将doc文件转为pdf格式文件,然后存放在服务器tomcat'中,pdf.js首次加载服务器中tomcat中的转化 ...

  7. 使用 pdf.js 在网页中加载 pdf 文件

    在网页中加载并显示PDF文件是最常见的业务需求.例如以下应用场景:(1)在电商网站上购物之后,下载电子发票之前先预览发票.(2)电子政务管理系统中查看发布的公文,公文文件一般是PDF格式的文件. 目前 ...

  8. Vue中怎么加载pdf文件

    Vue预览pdf文件,我觉得pdfh5方式比较简洁,还有vue-pdf也可以,但是如果文件内容较多的话,vue-pdf就需要做分页处理,就麻烦了:接下来,想分享下我使用pdfh5的代码逻辑.如下:(注 ...

  9. iframe 加载pdf文件

    使用iframe标签,给上高度.宽度,效果和用浏览器打开pdf文件一致.支持下载.打印等功能. <!DOCTYPE html> <html lang="en"&g ...

  10. .net使用pdfobject.js加载pdf文件

    1.下载pdfobject.js文件 2. 1 <script type="text/javascript" src="<%= Application[&qu ...

最新文章

  1. 倒计时 3 天!「2019 嵌入式智能国际大会」全日程大公开!
  2. Science:亚硝酸盐氧化细菌在黑暗海洋中的主要作用
  3. 【Android 安全】DEX 加密 ( Application 替换 | 分析 ContentProvider 组件中调用 getApplication() 获取的 Application 二 )
  4. mysql5.7 首次登陆_mysql5.7.20第一次登录失败的快速解决方法
  5. java convexhull_图像上划凸多边形(convexHull()函数)
  6. html div画三角,css画三角形
  7. 论文中引用的标注方法
  8. Spring 配置文件加载原理
  9. commons-logging中无法寻找log4j
  10. AES加密算法介绍与实现
  11. 期望之后的失望-小评侯捷的《Word排版艺术》
  12. 汇编语言指令大全(详细)
  13. 如何使用摸瓜快速查手机apk加壳
  14. ecshop常见漏洞
  15. 英尺 厘米_在35,000英尺处重建747
  16. 计算机连接公用网络受限,电脑连接无线网络受限怎么解决【解决方法】
  17. 【web全景】web全景实现方案(转载)
  18. leetcode: 每个元音包含偶数次的最长字符串(前缀和 + 状态压缩(位运算、hash优化))*
  19. linux造字程序,巧借“系统工具”,完成仓颉造字
  20. 怎样学好软件工程专业!!!

热门文章

  1. 装系统:主分区、扩展分区、逻辑分区,引导(启动)分区、系统分区、活动分区
  2. Windows Server 2016域控服务器如何取消密码复杂性规则
  3. 这次跟大家聊聊技术,也聊聊人生
  4. Golang interface接口深入理解
  5. JDK7官方下载地址
  6. 文件的文件名翻译重命名技巧操作
  7. 计算机关机键 自动重启,电脑关机后自动重启怎么办?原因及解决方详解
  8. and no properties discovered to create BeanSerializer 问题解决
  9. linux c第四天———gcc、gdb、指针、大小端存储
  10. Mac 电脑系统重装(详细流程,包含 Intel、Apple M系列)