基于WPF实现PDF的显示与转换

 更新时间:2023年12月15日 10:22:43   作者:qq1326702940  
这篇文章为大家详细主要介绍了如何基于WPF实现PDF的显示并转换成图片,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

1.NuGet安装

O2S.Components.PDFView4NET.WPF

2.添加组件

工具箱中,空白处 右键,选择项

WPF组件 界面,选择NuGet安装库对面路径下的  O2S.Components.PDFView4NET.WPF.dll

3.引入组件命名空间并使用

<Window
        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:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:PDFView"
        xmlns:PageViewWPF="clr-namespace:O2S.Components.PDFView4NET.WPF;assembly=O2S.Components.PDFView4NET.WPF"
        x:Class="PDFView.MainWindow"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800" Loaded="Window_Loaded">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
 
        <PageViewWPF:PDFPageView x:Name="PdfControl" HorizontalAlignment="Left" Height="auto" VerticalAlignment="Top" Width="auto" PageDisplayLayout="Custom"  WorkMode="PanAndScan" HighlightFormFields="True"/>
 
    </Grid>
</Window>
using O2S.Components.PDFView4NET;
using System.Windows;
 
namespace PDFView
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
 
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            PdfControl.Document = new PDFDocument() { FilePath = ".\\4.pdf" };
        }
    }
}

4.PDF转换成图片

听说有破解版(无水印),找到了两个版本两个不同O2S.Components.PDFRender4NET破解版

版本2.0.1.0 对于测试PDF,使用正常

版本4.5.1.2 对于测试PDF,使用异常

PdfToImage(".\\4.pdf", Environment.CurrentDirectory, "4", ImageFormat.Png, Definition.Eight);
/// <summary>
        /// PDF文档所有页全部转换为图片
        /// </summary>
        /// <param name="pdfInputPath">PDF文件流</param>
        /// <param name="imageOutputPath">图片输出路径</param>
        /// <param name="imageName">生成图片的名字</param>
        /// <param name="imageFormat">设置所需图片格式</param>
        /// <param name="definition">设置图片的清晰度,数字越大越清晰</param>
        public static void PdfToImage(string pdfStream, string imageOutputPath, string imageName, ImageFormat imageFormat, Definition definition)
        {
            PDFFile pdfFile = PDFFile.Open(pdfStream);
            int startPageNum = 1;
            int endPageNum = pdfFile.PageCount;
            for (int i = startPageNum; i <= endPageNum; i++)
            {
                try
                {
                    Bitmap pageImage = pdfFile.GetPageImage(i - 1, 56 * (int)definition);
 
                    int canKao = pageImage.Width > pageImage.Height ? pageImage.Height : pageImage.Width;
                    int newHeight = canKao > 1080 ? pageImage.Height / 2 : pageImage.Height;
                    int newWidth = canKao > 1080 ? pageImage.Width / 2 : pageImage.Width;
                    Bitmap newPageImage = new Bitmap(newWidth, newHeight);
 
                    Graphics g = Graphics.FromImage(newPageImage);
                    g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
 
                    g.DrawImage(pageImage, new Rectangle(0, 0, newWidth, newHeight),
                    new Rectangle(0, 0, pageImage.Width, pageImage.Height), GraphicsUnit.Pixel);
                    newPageImage.Save(imageOutputPath + imageName + (endPageNum >= 2 ? ("-" + i) : "") + "." + imageFormat);//+ i.ToString() imageFormat
                    g.Dispose();
                    newPageImage.Dispose();
                    pageImage.Dispose();
                }
                catch (Exception ex)
                {
                    string ss = ex.ToString();
                }
            }
 
            pdfFile.Dispose();
        }
 
        /// <summary>
        /// 转换的图片清晰度,1最不清醒,10最清晰
        /// </summary>
        public enum Definition
        {
            One = 1, Two = 2, Three = 3, Four = 4, Five = 5, Six = 6, Seven = 7, Eight = 8, Nine = 9, Ten = 10
        }

5.官方代码库链接

PDFView4NET https://github.com/o2solutions/pdfview4net/tree/main

到此这篇关于基于WPF实现PDF的显示与转换的文章就介绍到这了,更多相关WPF PDF内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C#实现五子棋游戏

    C#实现五子棋游戏

    这篇文章主要为大家详细介绍了C#实现五子棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • 基于Silverlight打印的使用详解,是否为微软的Bug问题

    基于Silverlight打印的使用详解,是否为微软的Bug问题

    本篇文章对Silverlight打印的使用进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C#实现学生模块的增删改查

    C#实现学生模块的增删改查

    这篇文章主要为大家详细介绍了C#实现学生模块的增删改查,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • C#使用Fody实现监控方法执行时间

    C#使用Fody实现监控方法执行时间

    这篇文章主要为大家详细介绍了C#如何使用Fody实现监控方法执行时间,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以了解下
    2023-11-11
  • C#使用泛型方法设计实现单向链表详解

    C#使用泛型方法设计实现单向链表详解

    这篇文章主要为大家详细介绍了C#如何使用泛型方法设计实现一个单向链表,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-02-02
  • C#使用NPOI将excel导入到list的方法

    C#使用NPOI将excel导入到list的方法

    这篇文章主要为大家详细介绍了C#使用NPOI将excel导入到list的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • 使用Nopcommerce为商城添加满XX减XX优惠券功能

    使用Nopcommerce为商城添加满XX减XX优惠券功能

    中秋国庆节眼看到跟前了,很多商城都借此机会搞促销活动,什么满200减80送优惠券等活动,基于后台程序是怎么实现的呢?下面脚本之家小编带领大家一起学习吧
    2015-09-09
  • C#实现洗牌游戏实例

    C#实现洗牌游戏实例

    这篇文章主要介绍了C#实现洗牌游戏实例,对于数据结构与算法的学习有不错的借鉴参考作用,需要的朋友可以参考下
    2014-08-08
  • user32.dll 函数说明小结

    user32.dll 函数说明小结

    这篇文章主要介绍了user32.dll 函数说明,需要的朋友可以参考下
    2018-06-06
  • C#中StringBuilder用法以及和String的区别分析

    C#中StringBuilder用法以及和String的区别分析

    当我们在初学使用C#时,常常会不知道该用StringBuilder合适还是用String高效,下面是我在学习当中对StringBuilder和String的区别总结,分享给大家。
    2013-03-03

最新评论