• WPF中查看PDF文件之MoonPdfLib类库


           最近研究了两种PDF文件查看器,MoonPdfLib或者AdobeReader。

    今天先说第一种,在网上扒到的很好的WPF中用MoonPdf类库来展示PDF文件。

    Sourceforge上下载到MoonPdf编译好的Dll。

    https://github.com/reliak/moonpdf这是源码地址。

    使用非常简单,废话不多说,上码上步骤。

    1、程中添加对MoonPdfLib.dll的引用。注意:将libmupdf.dll放置于WPF工程Bin文件下

    2、XMAL源码:

    <Grid>
    <Border Background="#f0f0f0">
    <StackPanel HorizontalAlignment="Left" Orientation="Horizontal">
    <Button Content="上传" Width="95" Click="FileButton_Click" Margin="5,5,5,375"/>
    <Button Content="放大" Width="105" Click="ZoomInButton_Click" Margin="0,5,0,375"/>
    <Button Content="缩小" Width="95" Click="ZoomOutButton_Click" Margin="5,5,5,375"/>
    <Button Content="100%" Width="95" Click="NormalButton_Click" Margin="0,5,0,375"/>
    <Button Content="整页" Width="100" Click="FitToHeightButton_Click" Margin="5,5,5,375"/>
    <Button Content="单页" Width="90" Click="SinglePageButton_Click" Margin="0,5,0,375"/>
    <Button Content="双页" Width="90" Click="FacingButton_Click" Margin="5,5,5,375"/>
    </StackPanel>
    </Border>
    <Grid HorizontalAlignment="Left" Height="340" Margin="10,70,0,0" VerticalAlignment="Top" Width="155">
    <TreeView x:Name="treeView" SelectedItemChanged="treeView_SelectedItemChanged">
    <TreeView.ItemTemplate>
    <HierarchicalDataTemplate ItemsSource="{Binding Childern}">
    <TextBlock Name="text1">
    <TextBlock.Text>
    <MultiBinding StringFormat="{}{0}">
    <Binding x:Name="name1" Path="Name" />
    <Binding x:Name="name2" Path="FilePath" />
    </MultiBinding>
    </TextBlock.Text>
    </TextBlock>
    </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
    </TreeView>
    </Grid>
    <Border Background="#d3d3d3" Margin="170,70,0,0">
    <mpp:MoonPdfPanel x:Name="moonPdfPanel" Background="LightGray" ViewType="SinglePage" PageRowDisplay="ContinuousPageRows" PageMargin="0,2,4,2" AllowDrop="True"/>
    </Border>
    </Grid>
    View Code

    3、C#代码:

    private bool _isLoaded = false;
            public MainWindow()
            {
                InitializeComponent();
    
                //数据库要存放的路径
                string filePath = "\File\ExceptionHandlingVSTO.pdf";
                //获取文件名字
                string fileName = Path.GetFileName(filePath);
    
                TreeModel loc = new TreeModel()
                {
                    Name = "施工前",
                    Childern = new List<TreeModel>()
                    {
                        new TreeModel()
                        {
                            Name = fileName,
                            FilePath = filePath
                        },
                        new TreeModel()
                        {
                            Name ="测试节点可以无视",
                            FilePath = filePath
                        }
                    }
                };
                List<TreeModel> list = new List<TreeModel>() { loc };
                treeView.ItemsSource = list;
                
            }
            private void FileButton_Click(object sender, RoutedEventArgs e)
            {
                form.OpenFileDialog dialog = new form.OpenFileDialog();
                dialog.Multiselect = true;
                if (dialog.ShowDialog() == form.DialogResult.OK)
                {
                    string[] filesPath = dialog.FileNames;
    
                    if (filesPath != null && filesPath.Length > 0)
                    {
                        foreach (var filePath in filesPath)
                        {
                            Upload(filePath);
                        }
                    }
                }
            }
            /// <summary>
            /// 文件上传
            /// </summary>
            /// <param name="filePath">文件原来的路径</param>
            public void Upload(string filePath)
            {
                try
                {
                    FileInfo info = new FileInfo(filePath);
    
                    string directory = Directory.GetCurrentDirectory();
                    string uploadFile = $"{directory}\File";
                    //文件要上传的路径
                    string uploadPath = $"{uploadFile}\{info.Name}";
    
                    WebClient wc = new WebClient();
                    //wc.Credentials = new NetworkCredential("xuyue", "111111");
                    FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
                    BinaryReader br = new BinaryReader(fs);
                    byte[] result = br.ReadBytes(Convert.ToInt32(fs.Length));
                    Stream s = wc.OpenWrite(new Uri(uploadPath), "PUT");
    
                    if (s.CanWrite)
                    {
                        s.Write(result, 0, result.Length);
                    }
                    s.Flush();
                    s.Close();
                    fs.Close();
    
    
    
    
                }
                catch (Exception ex)
                {
                    throw ex;
                }
    
            }
    
            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;
            }
    
            private void treeView_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
            {
                //数据库要存放的路径
                string fileName = "\File\ExceptionHandlingVSTO.pdf";
                string filePath = $"{Directory.GetCurrentDirectory()}{fileName}";
    
                try
                {
                    moonPdfPanel.OpenFile(filePath);
                    _isLoaded = true;
                }
                catch (Exception ex)
                {
                    _isLoaded = false;
                }
            }
        }
    View Code
  • 相关阅读:
    [Flex] 组件Tree系列 —— 将数组作为dataProvider
    [Flex] 组件Tree系列 —— 运用openItems获取打开节点
    [Flex] 组件Tree系列 —— 支持CheckBox组件
    [Flex] 组件Tree系列 —— 阻止用户点击选中Tree中分支节点
    [Flex] 组件Tree系列 —— 阻止用户点击选中Tree中任何节点
    [Flex] 组件Tree系列 —— 实现右键拓展功能
    [Flex] 组件Tree系列 —— 打开和关闭节点
    [Flex] 组件Tree系列 —— 运用variableRowHeight和wordWrap设置可变行高
    [Flex] 组件Tree系列 —— 作为PopUpButton的弹出菜单
    [ActionScript3.0] 使用FileReferenceList处理多个文件上载
  • 原文地址:https://www.cnblogs.com/pukua/p/9988843.html
Copyright © 2020-2023  润新知