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>

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;
            }
        }
    }
相关推荐
2501_907136821 天前
PDF Splitter Pro - PDF页面分割器
pdf·软件需求
2023框框2 天前
给PDF书籍添加书签
pdf
月屯2 天前
Pandoc 之--pdf-engine
java·开发语言·pdf
开开心心_Every2 天前
Word转PDF工具,免费生成图片型文档
网络·笔记·pdf·word·powerpoint·excel·azure
一个无名的炼丹师2 天前
[硬核实战] 解锁多模态RAG:构建能“看懂”PDF复杂图表的智能问答系统
人工智能·python·pdf·多模态·rag
非凡ghost3 天前
Xournal++(PDF文档注释工具) 中文绿色版
学习·pdf·生活·软件需求
MonkeyKing_sunyuhua3 天前
使用ARQ做PDF OCR和 图片OCR的任务的方案
pdf·ocr
2501_930707783 天前
如何使用C#代码在 PDF 中添加或删除附件
pdf
m5655bj3 天前
如何使用 Python 调整 PDF 页面顺序?
python·pdf
YuanYWRS3 天前
办公基础:实现PDF中表单不改变格式的情况下转成excel
pdf·excel