首页 > 编程语言 >C# Pdf转图片通过(PdfiumViewer或O2S.Components.PDFRender4NET)实现

C# Pdf转图片通过(PdfiumViewer或O2S.Components.PDFRender4NET)实现

时间:2023-05-05 15:33:28浏览次数:45  
标签:endPageNum imagePath string C# PDFRender4NET PdfiumViewer int pdf startPageNum

1、通过PdfiumViewer实现,目前测试结果来看是不收费的,可直接通过Nuget添加引用

        /// <summary>
        /// pdf转图片
        /// </summary>
        /// <param name="pdfPath">pdf路径</param>
        /// <param name="imagePath">输出图片路径</param>
        /// <param name="imageName">输出图片名称</param>
        /// <param name="imagePathFormat">输出图片后缀</param>
        /// <param name="imageFormat">输出图片格式</param>
        /// <param name="startPageNum">开始页码</param>
        /// <param name="endPageNum">结束页码</param>
        public static void PdfToImage(string pdfPath,string imagePath, string imageName, string imagePathFormat, System.Drawing.Imaging.ImageFormat imageFormat,int startPageNum, int endPageNum)
        {
            #region 文件夹及路径处理
            if (!System.IO.Directory.Exists(imagePath))
            {
                System.IO.Directory.CreateDirectory(imagePath);
            }
            if (!imagePath.EndsWith("\\") && !imagePath.EndsWith("/"))
            {
                imagePath = imagePath + "\\";
            }
            if (!imagePathFormat.StartsWith("."))
            {
                imagePathFormat = "." + imagePathFormat;
            }
            #endregion
            var pdf = PdfiumViewer.PdfDocument.Load(pdfPath);//读取pdf
            var pdfPage = pdf.PageCount;//pdf页码
            var pdfSize = pdf.PageSizes;
            #region 开始结束页
            if (startPageNum <= 0) { startPageNum = 1; }
            if (endPageNum > pdf.PageCount) { endPageNum = pdf.PageCount; }
            if (startPageNum > endPageNum)//开始>结束
            {
                int tempPageNum = startPageNum;
                startPageNum = endPageNum;
                endPageNum = startPageNum;
            }
            #endregion

            for (int i = startPageNum; i <= endPageNum; i++)
            {
                System.Drawing.Size size = new System.Drawing.Size();
                //pdfSize为list类型,索引从0,而pdf页码从1开始,所以需要-1
                size.Width = (int)pdfSize[i - 1].Width;
                size.Height = (int)pdfSize[i - 1].Height;
                var stream = new System.IO.FileStream($"{imagePath}{imageName}-{i}{imagePathFormat}", System.IO.FileMode.Create);
                var image = pdf.Render(i - 1, size.Width, size.Height, 300, 300, PdfiumViewer.PdfRenderFlags.Annotations);
                image.Save(stream, imageFormat);
                stream.Close();
                image.Dispose();
                stream.Dispose();
                System.Diagnostics.Process.Start(imagePath);
            }
            pdf.Dispose();
        }

 效果如下:

 

2.通过O2S.Components.PDFRender4NET实现,目前测试结果直接通过Nuget添加引用的话是需要收费的,生成出来的图片左上角会带有PDFView4NET 11.1.0.0 evaluation version样式水印,可以通过O2S.Components.PDFRender4NET下载,提取码:1234,通过此链接下载dll然后添加引用,通过该dll实现的生成图片不会有水印文字

      /// <summary>
        /// 图片清晰度
        /// </summary>
        public enum Definition
        {
            One = 1, Two = 2, Three = 3, Four = 4, Five = 5, Six = 6, Seven = 7, Eight = 8, Nine = 9, Ten = 10
        }
        /// <summary>
        /// 将PDF转为图片
        /// </summary>
        /// <param name="pdfPath">PDF文件路径</param>
        /// <param name="imagePath">图片输出路径</param>
        /// <param name="imageName">图片名称</param>
        /// <param name="imagePathFormat">图片格式</param>
        /// <param name="imageFormat">图片输出格式</param>
        /// <param name="startPageNum">从PDF文档的第几页开始转换</param>
        /// <param name="endPageNum">从PDF文档的第几页开始停止转换</param>
        /// <param name="definition">图片清晰度,数字越大越清晰</param>
        public static void PdfToImage2(string pdfPath,string imagePath, string imageName, string imagePathFormat, System.Drawing.Imaging.ImageFormat imageFormat,int startPageNum, int endPageNum,Definition definition)
        {
            O2S.Components.PDFRender4NET.PDFFile pdfFile = O2S.Components.PDFRender4NET.PDFFile.Open(pdfPath);
            if (!System.IO.Directory.Exists(imagePath))
            {
                System.IO.Directory.CreateDirectory(imagePath);
            }
            if (startPageNum <= 0) { startPageNum = 1; }
            if (endPageNum > pdfFile.PageCount) { endPageNum = pdfFile.PageCount; }
            if (startPageNum > endPageNum)
            {
                int tempPageNum = startPageNum;
                startPageNum = endPageNum;
                endPageNum = startPageNum;
            }
            for (int i = startPageNum; i <= endPageNum; i++)
            {
                System.Drawing.Bitmap pageImage = pdfFile.GetPageImage(i - 1, 56 * (int)definition);
                pageImage.Save($"{imagePath}{imageName}-{i}{imagePathFormat}", imageFormat);
                pageImage.Dispose();
            }
            pdfFile.Dispose();
        }

效果如下所示:

 

标签:endPageNum,imagePath,string,C#,PDFRender4NET,PdfiumViewer,int,pdf,startPageNum
From: https://www.cnblogs.com/lwk9527/p/17374267.html

相关文章

  • C语言中的内存管理
    C语言中定义了四个内存区间:https://mp.weixin.qq.com/s/MtwQrp752qLMwDAFrBYm0w代码区;全局变量和静态变量区;局部变量区即栈区;动态存储区即堆区。1>栈区(stack)—由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2>堆区(heap) —一般由......
  • JavaScript 图片的上传前预览
    实例一: 实现要点● 对于 Chrome、Firefox、IE10 使用 FileReader 来实现。● 对于 IE6~9 使用滤镜 filter:progid:DXImageTransform.Microsoft.AlphaImageLoader 来实现。<!DOCTYPEhtml><html><head><metahttp-equiv="Content-Type"content="text/html;charset=......
  • yt-dlp 图形化客户端 Cube YouTube Downloader
    yt-dlp——Youtube视频命令行下载工具youtube-dl扩展版,添加了新的特性和补丁。https://bbs.zsxwz.com/thread-4855.htm虽然强大,命令行下载工具,可能很多小伙伴护台喜欢用,就可以使用图形化客户端CubeYouTubeDownloader。 1、下载CubeYouTubeDownloader并解压:https:/......
  • C# 图片添加水印
    具体实现///<summary>///图片添加水印///</summary>///<paramname="imgPath">需要添加水印的图片地址</param>///<paramname="outPath">添加水印后图片输出地址</param>///<param......
  • css中filter的部分特别用法
    1. drop-shadow函数如果给png的图片设置阴影通过box-shadow就会变成这样但可以通过fliter来重新实现 会变成这样.header{//box-shadow:10px10px10px#000;filter:drop-shadow(10px10px10pxrgba(0,0,0,.5));}  2.hue-roate函数.header{filter:......
  • 【SpringBoot】【二】 SpringApplicationRunListeners 监听器执行过程详解
    1 前言我们看到SpringBoot启动的时候,会在每个时机执行监听器,这节我们就来看看,加载监听器的过程我们就不说了哈,上节说过了哈,本节我们主要看:(1)SpringApplicationRunListeners的创建过程(2)监听器的执行时机有哪些(3)监听器的执行过程三个方面来看哈。2 使用在看之前,我们先......
  • C# 获取本地共享目录和网络共享目录
    1.在工程添加对应的cs文件usingSystem;usingSystem.Collections;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.IO;usingSystem.Linq;usingSystem.Net;usingSystem.Runtime.InteropServices;usingSystem.Text;usingSystem.Web;......
  • npm ERR! code EPERM npm ERR! syscall mkdir npm ERR! path C:\Program Files\node
    npm项目初始化代码npminit--yesidea代码安装npmnpmiexperss我输入的时候报错了,如下图所示没关系,只需要手动打开C盘的路径文件找到这个文件,并且把他Ctrl+D删除掉即可之后在运行这串代码就可以啦明显成功了......
  • C# Pdf添加文本水印(iTextSharp)
    第一步通过Nuget添加iTextSharp引用具体实现代码如下:///<summary>///添加文本水印///</summary>///<paramname="pdfPath">pdf文件</param>///<paramname="outPath">输出文件位置</param>......
  • C# 通过iTextSharp实现关键字签字盖章(通过在内容中插入盖章图片的形式)
    此功能通过 iTextSharp 读取PDF文档信息,并循环查找每一页PDF文件,在整个PDF中只要是符合条件的地方都会盖章,如只需要在最后一页盖章,请将方法中For循环去掉,并将PdfContentBytecontentByte=pdfStamper.GetUnderContent(i);parser.ProcessContent<PdfLocation>(i,location);......