WPF:WPF顯示PDF文件
阿新 • • 發佈:2018-11-29
簡述
軟體的幫助文件可藉助第三方軟體如PDF Reader、Adobe PDF等顯示,但客戶機上需安裝此類軟體。WPF開發的軟體可藉助第三方庫 MoonPdf 將PDF文件載入顯示到軟體視窗中(Dll下載地址,GitHub原始碼地址)。
MoonPdf庫使用方式:
- 將MoonPdfLib.dll、libmupdf.dll、MouseKeyboardActivityMonitor.dll放置於WPF工程Bin檔案下;
- 在專案工程中“引用”右鍵新增新引用:MoonPdfLib.dll;
- 在.xmal及.cs檔案中新增相關引用,詳見程式碼。
程式碼
PDFViewer.xaml
<UserControl x:Class="NovelRPS.PdfViewer" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mpp="clr-namespace:MoonPdfLib;assembly=MoonPdfLib" mc:Ignorable="d" > <Grid> <!-- ContextMenu --> <Grid.ContextMenu> <ContextMenu> <MenuItem x:Name="ZoomToOrigin" Header="100%" Click="ZoomToOrigin_Click"></MenuItem> <MenuItem x:Name="SinglePage" Header="單頁" Click="SinglePage_Click"></MenuItem> <MenuItem x:Name="DoublePage" Header="雙頁" Click="DoublePage_Click"></MenuItem> </ContextMenu> </Grid.ContextMenu> <Border> <!-- 參考:https://www.cnblogs.com/yang-fei/p/4885570.html --> <mpp:MoonPdfPanel x:Name="pdfViewer" MaxZoomFactor="2.5" ViewType="SinglePage" PageRowDisplay="ContinuousPageRows" PageMargin="0,2,4,2" AllowDrop="True"></mpp:MoonPdfPanel> </Border> </Grid> </UserControl>
PDFViewer.cs
using MoonPdfLib; //記得引用此名稱空間 public partial class PdfViewer : UserControl { private bool m_bLoaded = false; public PdfViewer() { InitializeComponent(); } public bool LoadPdfDoc( string strPdfPath ) { try { this.pdfViewer.OpenFile( strPdfPath ); this.pdfViewer.Zoom( 1.0 ); m_bLoaded = true; } catch { m_bLoaded = false; } return m_bLoaded; } private void ZoomToOrigin_Click( object sender, RoutedEventArgs e ) { if ( !m_bLoaded ) return; this.pdfViewer.Zoom( 1.0 ); } private void SinglePage_Click( object sender, RoutedEventArgs e ) { if ( !m_bLoaded ) return; this.pdfViewer.ViewType = ViewType.SinglePage; } private void DoublePage_Click( object sender, RoutedEventArgs e ) { if ( !m_bLoaded ) return; this.pdfViewer.ViewType = ViewType.Facing; } }
呼叫PdfViewer,及HelpWin視窗類:HelpWin.xaml
<Window x:Class="NovelRPS.HelpWin"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:NovelRPS"
Title="HelpWin" Background="#FF212121" WindowState="Maximized" Topmost="True" WindowStyle="None" ResizeMode="NoResize">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="66"></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<!-- Title -->
<Label x:Name="Title" Grid.Row="0" Background="#FF414141" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" Padding="0">
<DockPanel>
<Image DockPanel.Dock="Left" Source="Images/SubPageLogo.png"></Image>
<Image x:Name="ImgClose" DockPanel.Dock="Right" Source="Images/Close.png" MouseDown="ImgClose_MouseDown"></Image>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
<Image Source="Images/Setting/Help.png" Width="30"></Image>
<Label Content="幫助" FontSize="26" FontWeight="Bold"></Label>
</StackPanel>
</DockPanel>
</Label>
<!-- Content -->
<Label Grid.Row="1" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch">
<local:PdfViewer x:Name="PDFView" Loaded="PDFView_Loaded"/>
</Label>
</Grid>
</Window>
HelpWin.cs
public partial class HelpWin : Window
{
private string m_strPdfPath = AppDomain.CurrentDomain.BaseDirectory + "help.pdf";
public HelpWin()
{
InitializeComponent();
}
private void ImgClose_MouseDown( object sender, MouseButtonEventArgs e )
{
this.Close();
}
private void PDFView_Loaded( object sender, RoutedEventArgs e )
{
if ( !this.PDFView.LoadPdfDoc( m_strPdfPath ) )
{
MessageBox.Show( "開啟幫助文件失敗,請重試!" );
}
}
}