基于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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
基于Silverlight打印的使用详解,是否为微软的Bug问题
本篇文章对Silverlight打印的使用进行了详细的分析介绍,需要的朋友参考下2013-05-05C#中StringBuilder用法以及和String的区别分析
当我们在初学使用C#时,常常会不知道该用StringBuilder合适还是用String高效,下面是我在学习当中对StringBuilder和String的区别总结,分享给大家。2013-03-03
最新评论