WPF 浏览PDF 文件
添加成功后会在工具箱里看到下图所示的控件。打开VS2010,新建项目(WpfPDFReader),右键项目添加User Control(用户控件)。因为Adobe PDF Reader COM 组件是不支持WPF的,为此我们需要将它放到WinForm 控件中。所以,在列表中需要选择User Control,而不是User Control(WPF)。这里我将控件命名为:AdobeReaderControl.cs。完成添加双击控件进入设计模式。

在工具箱里选择添加组件,在COM 组件列表中点选“Adobe PDF Reader”。

AcroPDFLib 和AxAcroPDFLib 库会自动添加到项目中。

添加成功后会在工具箱里看到下图所示的控件。

将该COM 控件拖入User Control 。

控件默认名称为:axAcroPDF1,可按需要自行更改。

Dock属性设置为“Fill”,这样可以使控件自动适应窗口尺寸。

打开控件程序,修改构造函数。将PDF 文件传入控件并进行加载。
using System.Windows.Forms; namespace WpfPDFReader
{
public partial class AdobeReaderControl : UserControl
{
public AdobeReaderControl(string fileName)
{
InitializeComponent(); this.axAcroPDF1.LoadFile(fileName);
}
}
}
到此用户控件就基本完成了,下面开始WPF 部分的开发。
由于要将上面的WinForm 控件加载到WPF 程序中,所以先要为WPF 添加WindowsFormsIntegration。

打开XAML 在<Grid> 中添加Button 和WindowsFormsHost 控件,其中Button 用来启动文件目录窗口,从中选择要浏览的PDF文件;WindowsFormsHost 则用于嵌入WinForm 控件。
<Window x:Class="WpfPDFReader.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="WPF PDF Reader" Height="" Width="">
<Grid>
<Button Content="Open File" Click="Button_Click" Width="" Height=""
VerticalContentAlignment="Center" VerticalAlignment="Top"
Margin="0,10,0,0"/>
<WindowsFormsHost x:Name="winFormHost" Margin="0,46,0,0" />
</Grid>
</Window>
下面来完成Button 点击事件,将通过OpenFileDialog 选择的PDF 文件路径及名称传入AdobeReaderControl 用户控件中,并将该控件添加到WindowsFormsHost。
private string openFileName;
private OpenFileDialog openFileDialog; private void Button_Click(object sender, RoutedEventArgs e)
{
openFileDialog = new OpenFileDialog();
openFileDialog.DefaultExt = "pdf";
openFileDialog.Filter = "pdf files (*.pdf)|*.pdf"; DialogResult result = openFileDialog.ShowDialog(); if (result == System.Windows.Forms.DialogResult.OK)
{
openFileName = openFileDialog.FileName; AdobeReaderControl pdfCtl = new AdobeReaderControl(openFileName);
winFormHost.Child = pdfCtl;
}
else
{
return;
}
}
F5看下效果,点击“Open File” 选择一个PDF ,这样一个简单的WPF PDF Reader 就完成了。

WPF 浏览PDF 文件的更多相关文章
- asp.net网页中上传并且浏览pdf文件的实现
本文主要讲解在asp.net中的gridview中浏览pdf文件.下面来看一下具体的实现: 第一步,使用sqlserver 创建一个数据库表. 第二步,新建一个webform,命名为uploadpdf ...
- https://github.com/Lushenggang/show-pdf在线浏览pdf文件在线浏览pdf文件
在线浏览pdf文件 https://github.com/Lushenggang/show-pdf https://github.com/Lushenggang/show-pdf
- web中浏览PDF文件
1.在web中浏览pdf文件. 2.支持大多数主流浏览器,包括IE8 3.参考网址: https://pdfobject.com/ http://mozilla.github.io/pdf.js/ & ...
- 在线打开,浏览PDF文件的各种方式及各种pdf插件------(MS OneDrive/google drive & google doc/ github ?raw=true)
在线打开,浏览PDF文件的各种方式: 1 Google drive&doc (国内不好使,you know GFW=Great Firewall) 1. google drive: 直接分 ...
- 在线浏览pdf文件,pdfobject的简单使用
该js插件,官网有详细的使用教程(网址:http://www.pdfobject.com/examples/).打开里面的例子后,查看新打开页面,打开并查看该页面的源代码. 需要的材料: 1.PDFo ...
- 怎么用ABBYY在线浏览PDF文件
ABBYY FineReader 让您可以从在线存储服务中打开图像或 PDF 文件,并将已识别文本保存至在线存储服务中,如 Dropbox.SkyDrive 或 Google Drive 等.通过在 ...
- 实战动态PDF在线预览及带签名的PDF文件转换
开篇语: 最近工作需要做一个借款合同,公司以前的合同都是通过app端下载,然后通过本地打开pdf文件,而喜欢创新的我,心想着为什么不能在线H5预览,正是这个想法,说干就干,实践过程总是艰难的,折腾了3 ...
- 用火狐打开PDF文件
可以直接使用官方的Adobe Reader插件来实现在火狐中浏览PDF文件的功能.在你浏览一个PDF文件的时候,火狐将会尝试下载安装这个插件. 如果这个插件出现问题,那么就无计可施啦. 检查火狐的设置 ...
- WPF中查看PDF文件
需要打开PDF文件时,我们第一印象就是使用Adobe Reader.在开发中,经常会遇到需要展示PDF文件的需求.我们会借助于Adobe Reader的Active控件来实现.不过这需要客户的机器上安 ...
随机推荐
- linux初学者-普通磁盘分区篇
linux初学者-普通磁盘分区篇 磁盘是计算机的重要组成部分,是记录数据的场所.在使用磁盘时,经常需要对其进行分区来实现不同的用途.下文将介绍在linux系统中普通磁盘分区的方法. "fdi ...
- java用最少循环求两个数组的交集、差集、并集
import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List ...
- Pinyin4j简单使用教程
Pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换,拼音输出格式可以定制,在项目中经常会遇到需求用户输入汉字后转换为拼音的场景,这时候Pinyin4j就可以派上用场 有自己私服的可以 ...
- java并发笔记之java线程模型
警告⚠️:本文耗时很长,先做好心理准备 java当中的线程和操作系统的线程是什么关系? 猜想: java thread —-对应-—> OS thread Linux关于操作系统的线程控制源码: ...
- SpringBoot Kafka 整合使用
前提 假设你了解过 SpringBoot 和 Kafka. 1.SpringBoot 如果对 SpringBoot 不了解的话,建议去看看 DD 大佬 和 纯洁的微笑 的系列博客. 2.Kafka K ...
- 【WPF】 InkCanvas 书写毛笔效果
首先贴出本文参考学习的文章吧. https://www.cnblogs.com/LCHL/p/9055642.html#4206298 感谢这位懒羊羊的代码和讲解(下简称羊博主),我在此基础上稍微加了 ...
- C#中属性的解析
一.域的概念 C#中域是指成员变量和方法,在OOP编程中(面向对象编程)我们要求用户只知道类是干什么的,而不许知道如何完成的,或者说不允许访问类的内部,对于有必要在类外可见的域,我们用属性来表达,所以 ...
- Linux基础进程管理
一.进程 了解如进程的: • PID,PPID • 当前的进程状态 • 内存的分配情况 • CPU和已花费的实际时间 • 用户UID,他决定进程的特权 (一).静态查看进程 # ps axu | le ...
- UR机器人的位姿
一.Ur 移动命令 UR机器人移动,一共有三种移动指令,movej,movel,movep,分别是关节运动,线性运动,圆周运动. movej:6个关节的弧度 movel/movep:分别是x,y,z, ...
- Spring IoC源码解析之invokeBeanFactoryPostProcessors
一.Bean工厂的后置处理器 Bean工厂的后置处理器:BeanFactoryPostProcessor(触发时机:bean定义注册之后bean实例化之前)和BeanDefinitionRegistr ...