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

6 篇文章 0 订阅

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();
        }

实现效果如下:
在这里插入图片描述

参考文章:
方法二参考:C# PDF转Image图片

仅个人记录

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: o2s.components.pdfrender4net是一个用于处理PDF文件的.NET库。其中,o2s.components.pdfrender4net.printing.pdfprintsettings是一个用于设置PDF打印属性的类。尽管这个类提供了一些打印设置选项,但它并不直接支持通过IP地址进行打印。 通常情况下,通过IP地址打印PDF文件需要使用特定的打印机驱动程序或打印组件。这些组件可以使应用程序与打印机进行通信,并将要打印的文件发送到打印机。在这种情况下,o2s.components.pdfrender4net.printing.pdfprintsettings类可以与相应的打印组件配合使用。 具体来说,可以使用o2s.components.pdfrender4net库加载和渲染PDF文件,然后使用其提供的PDF文档对象获取要打印的页面内容。随后,可以将这些内容传递给打印组件,以便通过IP地址将页面发送到打印机进行打印。 总之,o2s.components.pdfrender4net.printing.pdfprintsettings类本身不能直接通过IP地址进行打印,但可以与其他打印组件配合使用,以实现通过IP地址打印PDF文件的功能。 ### 回答2: o2s.components.pdfrender4net.printing.pdfprintsettings 可以通过指定打印机的ip地址进行打印。 在使用 o2s.components.pdfrender4net.printing.pdfprintsettings 进行打印时,可以设置打印机的 IP 地址参数。通过指定打印机的 IP 地址,程序可以将打印任务发送到指定的打印机上进行打印。 要通过 IP 地址打印,首先需要获取要打印的文件的 PDF 数据。然后创建一个实例化的 o2s.components.pdfrender4net.printing.pdfprintsettings 对象,并设置它的属性,如页码范围、打印机名称等。接下来,可以使用打印设置对象的 PrinterIP 属性,将要打印的文件发送到指定的打印机。 示例如下: ```C# string pdfFilePath = "your_pdf_file_path"; var printSettings = new o2s.components.pdfrender4net.printing.pdfprintsettings(); printSettings.PrinterIP = "192.168.1.100"; // 设置打印机的 IP 地址 printSettings.PageRange = "1-5"; // 设置打印页码范围 printSettings.PrinterName = "Your_Printer_Name"; // 设置打印机名称 var renderer = new o2s.components.pdfrender4net.pdfrenderer(); renderer.Open(pdfFilePath); renderer.Print(printSettings); // 将文件发送到指定的打印机进行打印 renderer.Close(); ``` 通过上述代码,我们可以使用 o2s.components.pdfrender4net.printing.pdfprintsettings 对象的 PrinterIP 属性来指定要使用的打印机的 IP 地址。这样,将会把需要打印的文件发送到指定 IP 的打印机上进行打印。 ### 回答3: o2s.components.pdfrender4net.printing.pdfprintsettings 是一个用于打印 PDF 文件的类库,它提供了一些属性和方法来配置打印设置。然而,该类库本身并不直接支持通过 IP 地址进行打印。 要通过 IP 地址打印 PDF 文件,我们需要借助其他的工具或库来实现。一种常见的方式是使用网络打印机,这些打印机可以通过网络连接,并设置了固定的 IP 地址,可以远程打印文档。 首先,我们需要获取网络打印机的 IP 地址,并确保网络连接正常。然后,我们可以通过 o2s.components.pdfrender4net.printing.pdfprintsettings 中的一些属性来设置打印机参数,例如纸张大小、方向、副本数等。 接下来,我们可以使用类库中的某些方法来加载要打印的 PDF 文件,并通过指定 IP 地址将打印任务发送给网络打印机。这些方法可能是类似于以下的示例代码: ``` PdfPrintSettings settings = new PdfPrintSettings(); settings.PrinterSettings.PrinterName = "IP 地址"; settings.PrinterSettings.Copies = 1; settings.PrinterSettings.DefaultPageSettings.PaperSize = new PaperSize("A4", 827, 1169); // 设置纸张大小为 A4 PdfDocument document = new PdfDocument(); document.Load("要打印的 PDF 文件路径"); document.PrintDocumentWithSettings(settings); ``` 通过设置 properties.PrinterSettings.PrinterName 为网络打印机的 IP 地址,我们可以将打印任务发送给对应的网络打印机。 需要注意的是,上述示例代码只是一个大致方向的示例,真正的实现可能因为应用环境和具体需求而有所不同。具体的实现流程和方法需要参考 o2s.components.pdfrender4net.printing.pdfprintsettings 的官方文档,并根据自己的实际情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值