极客社区 门户 查看主题

在WPF中使用PDF文件

发布者: winform | 发布时间: 2016-12-26 01:19| 查看数: 557| 评论数: 0|帖子模式

  需要打开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:
  1. <Window x:Class="WPFPdfViewer.MainWindow"
  2.         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3.         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4.         xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  5.         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  6.         xmlns:mpp="clr-namespace:MoonPdfLib;assembly=MoonPdfLib"
  7.         xmlns:local="clr-namespace:WPFPdfViewer"
  8.         mc:Ignorable="d"
  9.         Title="WPF Pdf Viewer" Height="350" Width="525">
  10.     <Grid>
  11.         <Grid.RowDefinitions>
  12.             <RowDefinition Height="Auto"/>
  13.             <RowDefinition Height="*"/>
  14.         </Grid.RowDefinitions>

  15.         <Border Background="#f0f0f0">
  16.             <StackPanel HorizontalAlignment="Left" Orientation="Horizontal">
  17.                 <Button Content="文件" Width="50" Click="FileButton_Click" Margin="5,5"/>

  18.                 <Button Content="放大" Width="50" Click="ZoomInButton_Click" Margin="0,5"/>

  19.                 <Button Content="缩小" Width="50" Click="ZoomOutButton_Click" Margin="5,5"/>

  20.                 <Button Content="100%" Width="50" Click="NormalButton_Click" Margin="0,5"/>

  21.                 <Button Content="整页" Width="50" Click="FitToHeightButton_Click" Margin="5,5"/>

  22.                 <Button Content="单页" Width="50" Click="SinglePageButton_Click" Margin="0,5"/>

  23.                 <Button Content="双页" Width="50" Click="FacingButton_Click" Margin="5,5"/>
  24.             </StackPanel>
  25.         </Border>

  26.         <Border Background="#d3d3d3" Grid.Row="1">
  27.             <mpp:MoonPdfPanel x:Name="moonPdfPanel" Background="LightGray" ViewType="SinglePage" PageRowDisplay="ContinuousPageRows" PageMargin="0,2,4,2" AllowDrop="True"/>
  28.         </Border>
  29.     </Grid>
  30. </Window>
复制代码


  C#:
  1. public partial class MainWindow : Window
  2.     {
  3.         private bool _isLoaded = false;
  4.         public MainWindow()
  5.         {
  6.             InitializeComponent();
  7.         }

  8.         private void FileButton_Click(object sender, RoutedEventArgs e)
  9.         {
  10.             var dialog = new OpenFileDialog();

  11.             if (dialog.ShowDialog().GetValueOrDefault())
  12.             {
  13.                 string filePath = dialog.FileName;

  14.                 try
  15.                 {
  16.                     moonPdfPanel.OpenFile(filePath);
  17.                     _isLoaded = true;
  18.                 }
  19.                 catch (Exception)
  20.                 {
  21.                     _isLoaded = false;
  22.                 }
  23.             }
  24.         }

  25.         private void ZoomInButton_Click(object sender, RoutedEventArgs e)
  26.         {
  27.             if(_isLoaded)
  28.             {
  29.                 moonPdfPanel.ZoomIn();
  30.             }
  31.         }

  32.         private void ZoomOutButton_Click(object sender, RoutedEventArgs e)
  33.         {
  34.             if(_isLoaded)
  35.             {
  36.                 moonPdfPanel.ZoomOut();
  37.             }
  38.         }

  39.         private void NormalButton_Click(object sender, RoutedEventArgs e)
  40.         {
  41.             if(_isLoaded)
  42.             {
  43.                 moonPdfPanel.Zoom(1.0);
  44.             }
  45.         }

  46.         private void FitToHeightButton_Click(object sender, RoutedEventArgs e)
  47.         {
  48.             moonPdfPanel.ZoomToHeight();
  49.         }

  50.         private void FacingButton_Click(object sender, RoutedEventArgs e)
  51.         {
  52.             moonPdfPanel.ViewType = MoonPdfLib.ViewType.Facing;
  53.         }

  54.         private void SinglePageButton_Click(object sender, RoutedEventArgs e)
  55.         {
  56.             moonPdfPanel.ViewType = MoonPdfLib.ViewType.SinglePage;
  57.         }
  58.     }
复制代码



  3. 运行程序,打开PDF文件:
   wpfpdf.gif



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

  希望这篇文章可以帮助到你。


最新评论

Archiver|手机版|小黑屋| 极客社区 ( 京ICP备14042200号-2 )

Powered by 张董丶 X3.2 © 2016-2026

返回顶部 返回列表