WPF开发随笔收录-查看PDF文件
一、前言
在项目的开发过程中,涉及到查看服务器生成的pdf报告文件的查看,起初的方案是通过spire.pdf这个库来将pdf文件转换成图片,然后在进行查看。但是经常被吐槽预览不清晰,后面上网发现了一个专门的pdf预览库,能够清晰的查看pdf文件,同时也支持放大缩小等功能;
二、正文
1、查看pdf文件所用到的库是MoonPdf类库,源码地址:https://github.com/reliak/moonpdf
2、使用方法也很简单,项目中添加对MoonPdfLib.dll的引用,然后记得把libmupdf.dll拷贝到项目的bin目录的debug或者release目录下
3、这里直接贴出网上找的例子的代码,实测可用
<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:local="clr-namespace:WPFPdfViewer"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:mpp="clr-namespace:MoonPdfLib;assembly=MoonPdfLib"
Title="WPF Pdf Viewer"
Width="525"
Height="350"
mc:Ignorable="d">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions> <Border Background="#f0f0f0">
<StackPanel HorizontalAlignment="Left" Orientation="Horizontal">
<Button
Width="50"
Margin="5,5"
Click="FileButton_Click"
Content="文件" /> <Button
Width="50"
Margin="0,5"
Click="ZoomInButton_Click"
Content="放大" /> <Button
Width="50"
Margin="5,5"
Click="ZoomOutButton_Click"
Content="缩小" /> <Button
Width="50"
Margin="0,5"
Click="NormalButton_Click"
Content="100%" /> <Button
Width="50"
Margin="5,5"
Click="FitToHeightButton_Click"
Content="整页" /> <Button
Width="50"
Margin="0,5"
Click="SinglePageButton_Click"
Content="单页" /> <Button
Width="50"
Margin="5,5"
Click="FacingButton_Click"
Content="双页" />
</StackPanel>
</Border> <Border Grid.Row="1" Background="#d3d3d3">
<mpp:MoonPdfPanel
x:Name="moonPdfPanel"
AllowDrop="True"
Background="LightGray"
PageMargin="0,2,4,2"
PageRowDisplay="ContinuousPageRows"
ViewType="SinglePage" />
</Border>
</Grid>
</Window>
using Microsoft.Win32;
using System;
using System.Windows;
using MoonPdfLib.MuPdf; namespace WPFPdfViewer
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
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;
}
}
}
WPF开发随笔收录-查看PDF文件的更多相关文章
- WPF开发随笔收录-仿安卓Toast
一.前言 在项目中,经常需要用到消息提醒功能,在以前接触安卓开发那会使用过Toast,于是打算在WPF上也来模仿一个,话不多说,撸起袖子干起来! 二.正文 1.首先新建一个工程,工程的目录如下 2.编 ...
- WPF开发随笔收录-本地日志LogUtil类
一.前言 生活中的日志是记录你生活的点点滴滴,让它把你内心的世界表露出来,更好的诠释自己的内心世界.而在开发者眼中的日志是我们排除问题的第一手资料,项目中的程序上线之后,一旦发生异常,第一件事就是先去 ...
- WPF开发随笔收录-唯一标识符GUID
一.前言 该系列博客用于记录本人在WPF开发过程中遇到的各种知识点 二.正文 1.在工作的项目中,软件需要用到在线升级功能,由于第一次弄,在下载服务端的文件到本地时,文件的名称我选择直接生成为固定的格 ...
- WPF开发随笔收录-获取软件当前目录的坑
一.唠唠叨叨 软件开发过程中,经常需要使用到获取exe当前目录这个功能,前同事在实现这个需求时使用的是Directory.GetCurrentDirectory()这个方法,但再最近的测试中,突然发现 ...
- WPF开发随笔收录-ScrollViewer滑块太小解决方案
一.前言 在WPF开发过程中,ScrollViewer是一个很常使用到的控件,在自己工作的项目中,收到一个反馈就是当ScrollViewer里面的内容太长时,滚动条的滑块就会变得很小,然后导致点击起来 ...
- WPF开发随笔收录-DrawingVisual绘制高性能曲线图
一.前言 项目中涉及到了心率监测,而且数据量达到了百万级别,通过WPF实现大数据曲线图时,尝试过最基础的Canvas来实现,但是性能堪忧,而且全部画出来也不实际.同时也尝试过找第三方的开源库,但是因为 ...
- WPF开发随笔收录-带递增递减按钮TextBox
一.前言 今天分享一下如何实现带递增递减按钮的TextBox控件 二.正文 1.之前的博客分享了一篇自定义XamlIcon控件的文章,这次就直接在那个项目的基础上实现今天这个自定义控件 2.首先添加两 ...
- WPF开发随笔收录-自定义图标控件
一.前言 1.在以前自学的过程中,软件需要使用到图标的时候,总是第一个想法是下载一个图片来充当图标使用,但实际得出来的效果会出现模糊的现象.后来网上学习了字体图标库的用法,可以在阿里云矢量图网站那里将 ...
- WPF开发随笔收录-心电图曲线绘制
一.前言 项目中之前涉及到胎儿心率图曲线的绘制,最近项目中还需要添加心电曲线和血样曲线的绘制功能.今天就来分享一下心电曲线的绘制方式: 二.正文 1.胎儿心率曲线的绘制是通过DrawingVisual ...
- WPF开发随笔收录-DataAnnotations实现数据校验(MVVM架构下)
一.前言 在自己的项目中挺多地方需要涉及到数据验证的,初期的实现方式都是通过点击确定后再逐个验证数据是否符合要求,但这种方式会让后台代码变得很多很乱.于是就开始在网上需求好的解决方式,刚好看到了一个大 ...
随机推荐
- Tiktok api接口 获取视频列表、用户详情,视频无水印数据采集
iDataRiver平台 https://www.idatariver.com/zh-cn/ 提供开箱即用的Tiktok数据采集API,供用户按需调用. 接口使用详情请参考Tiktok接口文档 接口列 ...
- 离线部署-docker
离线部署---docker 关键词:docker离线部署,images离线安装,docker compose,shell,minio docker离线安装 docker install offline ...
- config.baseUrl.dev 变量 转移到 .env.local 中
config.baseUrl.dev 变量 转移到 .env.local 中 上下文 vue前端开发 问题 多人写代码的时候,会提交config.js里面的配置文件 解决方案 在根目录创建 .env. ...
- 【数据结构】哈夫曼树与哈夫曼编码(Huffman Encoding)
一.背景 编码是信息处理的基础(重新表示信息). 普通的编码是等长编码,例如7位的ASCIL编码,对出现频率不同的字符都使用相同的编码长度.但其在传输和存储等情况下编码效率不高. 可使用不等长编码,来 ...
- TLV320ADC3101这颗立体声 ADC芯片分析体验及总结
一 需求分析 音频ADC采集,顾名思义,就是采集语音信号的ADC.随着基于音视频穿戴式设备的广泛应用,音频ADC使用十分广泛.TI的这颗ADC芯片凭借着先发优势,在很多领域已经有广泛的应用了. 作为一 ...
- 【VR虚拟现实】-医疗行业的具体应用
虚拟现实 (VR) 虽然经常与游戏联系在一起,但不可否认,未来科技少不了虚拟现实,其应用可以彻底改变许多行业.在医疗领域,无数人正在探索 VR 可以帮助患者和医疗从业者实现更好的治疗结果治疗方式,比如 ...
- 崩溃bug日志总结3
目录介绍 1.1 OnErrorNotImplementedException[ Can't create handler inside thread that has not called Loop ...
- JavaScript利用反射实现方法注入
1. 引言 反射是一种能够在程序运行时动态访问.修改某个类(对象)中属性和方法的机制 JavaScript在ES6中提供了Reflect 这一个内置的对象,它提供拦截 JavaScript 操作的方法 ...
- 快速上手系列:传智播客Java基础学习笔记
配置环境,把JDK的bin所在路径复制到Path,末尾加; 基本语法 一 常见的DOS命令 盘符的切换 d:回车 目录的进入 cd javase c ...
- ZYNQ7000系列学习之TF卡读写实验
TF卡读写实验 1.实验原理 开发板上自动带有TF卡外接接口,这里只需调用封装好的IP核即可实现该功能.当然,你还需要一个TF卡(感觉SD卡也可以,反正这两种卡差不多).实验就是调用一个IP核,不涉及 ...