利用C#实现Pdf转图片

article/2025/4/23 14:46:07

        这周碰到一个需求,由于公司系统框架的原因,不能直接显示第三方回传回来的pdf(说明一下,第三方回传的pdf是带上了签章信息(即在pdf中加入了签名图片)),需要把pdf转成图片进行显示,但在做的过程中踩了不少雷。最后使用第三方插件PDFRender4NET

1   第三方的插件PdfiumViewer(缺点,丢失签章信息)

          首先试了第三方的插件PdfiumViewer,代码很简单,网上也有很多demo,把代码拷贝过来修改一下,三两下就搞定了,试了一下,确实是可以实现pdf传图片,但当我把业务代码写完了,在业务系统上运行时,发现,妈的,大意了,转换完毕的图片丢失了签章信息。下面是我略作修改后的部分代码:

public class PdfToImageHelper{/// <summary>/// pdf转图片(base64格式的字符串)/// </summary>/// <param name="pdfBase64String">pdf对应的base64字符串</param>/// <returns>Pdf如果有多页,就返回多张图片(base64字符串集合)</returns>public static List<string> GetBase64StringArray(string pdfBase64String){if (pdfBase64String==null|| pdfBase64String.Length==0) return null;List<string> base64StringList = new List<string>();byte[] buffer=Convert.FromBase64String(pdfBase64String);if (buffer == null || buffer.Length == 0) return base64StringList;MemoryStream ms = new MemoryStream(buffer);var pdfDocument = PdfiumViewer.PdfDocument.Load(ms);for (int index = 0; index <pdfDocument.PageCount; index++){Image image = pdfDocument.Render(index, (int)pdfDocument.PageSizes[index].Width, (int)pdfDocument.PageSizes[index].Height, 300, 300, false);string base64Str=ImageToBase64String(image);if (base64Str != null && base64Str.Length > 0){base64StringList.Add(base64Str);}}//释放流资源return base64StringList;}/// <summary>/// Image对象转base64字符串/// </summary>/// <param name="Picture"></param>/// <returns></returns>private static string ImageToBase64String(Image Picture){MemoryStream ms = new MemoryStream();if (Picture == null)return null;Picture.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);byte[] BPicture = new byte[ms.Length];BPicture = ms.GetBuffer();//释放流资源return Convert.ToBase64String(BPicture);}}

调用:List<string>  imageBase64StringList=PdfToImageHelper.GetBase64StringArray("pdf对应的base64字符串");

2  第三方插件Spire.pdf (缺点:收费,有免费版的,但是pdf转换为图片有页数限制(最多3页) ,且转换后的图片很模糊)

使用PdfiumViewer不行后,开始使用Spire.pdf,通过vistual studio的nuget就可以拿到dll,如下图:

第一个Spire.PDF是收费的,转换后的图片左上角会带上如下图的水印信息

 第二个FreeSpire.PDF是免费的,但是pdf如果超过3页,只能转前3页,后面的转换的都是空白页

代码就不贴了,网上有很多demo

3   第三方插件PDFRender4NET(O2S.Components.PDFRender4NET.dll,版本信息如下图)

 下面贴出我略做修改后的代码:

using O2S.Components.PDFRender4NET;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Text;namespace iih.gdrmh.ca.PatientSign.bp
{public class PdfToImageHelper{public static List<string> GetBase64StringArrayByPdfPath(string pdfPath){if (pdfPath == null || pdfPath.Length == 0) return null;List<string> base64StringList = new List<string>();PDFFile pdfFile = PDFFile.Open(pdfPath);for (int index =0; index <pdfFile.PageCount; index++){Bitmap pageImage = pdfFile.GetPageImage(index, 56 * 10);string base64Str = BitmapToBase64String(pageImage);if (base64Str != null && base64Str.Length > 0){base64StringList.Add(base64Str);}}pdfFile.Dispose();return base64StringList;}private static string ImageToBase64String(Image Picture){MemoryStream ms = new MemoryStream();if (Picture == null)return null;Picture.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);byte[] BPicture = new byte[ms.Length];BPicture = ms.GetBuffer();return Convert.ToBase64String(BPicture);}private static string BitmapToBase64String(Bitmap bitmap){// 1.先将BitMap转成内存流MemoryStream ms = new MemoryStream();bitmap.Save(ms, ImageFormat.Png);ms.Seek(0, SeekOrigin.Begin);// 2.再将内存流转成byte[]并返回byte[] bytes = new byte[ms.Length];ms.Read(bytes, 0, bytes.Length);ms.Flush();ms.Close();ms.Dispose();return Convert.ToBase64String(bytes);}}
}

调用:List<string>  imageBase64StringList=PdfToImageHelper.GetBase64StringArrayByPdfPath("pdf对应的文件路径");

最后发现,转换后的图片,签章信息还在,转换后的图片清晰度比FreeSpire.PDF还高

拓展:

去stack overflow搜索发现,pdf转换图片的方案有很多,但推荐最多的是Ghostscript.NET. github地址为:https://github.com/jhabjan/Ghostscript.NET   demo代码:https://github.com/jhabjan/Ghostscript.NET/blob/master/Ghostscript.NET.Samples/Samples/RasterizerSample1.cs

stack overflow参考链接:

1  Convert Pdf to Image C# .NET - Stack Overflow

2  Converting pdf to image using c# and Ghostscript - Stack Overflow

3  asp.net - Convert PDF file to images using C# - Stack Overflow


http://chatgpt.dhexx.cn/article/RGaKBKhx.shtml

相关文章

7个值得拥有收藏的免费在线 PDF转图片转换器

PDF 格式在文档演示和交换中无处不在。但是PDF转图片的必要性也在于很多情况。这里我想提几点。 收件人可能没有打开您发送的 PDF 的应用程序&#xff0c;但可以使用系统提供的程序查看图像。图像在浏览器中的显示速度比 PDF 快&#xff0c;因为图像可以流式传输&#xff0c;但…

图片批量合成PDF方法

目录 方法&#xff1a;操作多图合成一个PDF图片文件夹合成PDF批量对每个文件夹中图片合成PDF 如何获取软件 方法&#xff1a; 下载FreePic2Pdf软件&#xff0c;按下面方法操作 操作 多图合成一个PDF 打开FreePic2Pdf.exe软件点击下图1&#xff0c;选择图片添加进来点击下图…

android中pdf转换成图片格式,Android-PDF转图片

场景 将PDF里面的内容渲染到原生的View上面&#xff0c;一直没接触过这部分的技术&#xff0c;所以在网上寻找了下&#xff0c;终于发现了Android原生自带的类&#xff0c;也是今天我们着重讲的内容。 PdfRenderer 从名字上可以看出&#xff0c;这个是和渲染有关系的类型。这里…

Qt 导出pdf文件(表格、图片)

1.需要用的类 pro文件添加 QT printsupport QPdfWriter&#xff1a;写pdf的类 QTextDocument&#xff1a;支持html表格、图片的类 2.需要打印的界面 这里示例打印两个表格&#xff0c;一个水平方向的&#xff0c;一个垂直方向的&#xff0c;加一张图片。 3.保存的pdf效果…

将图片型pdf转成可选中文字型pdf(免费)

在使用pdf过程中我们会遇到有些pdf不能进行标注的问题&#xff0c;这是由于有些pdf是扫描版的&#xff0c; 整个pdf是由一张张图片构成的&#xff0c;这样的pdf是不能选中文字&#xff0c;所以也无法进行标注。 本教程教你如何免费将图片型pdf转成可选中文字型pdf。土豪免入~~利…

怎么把图片变成PDF

在日常办公中&#xff0c;如果我们需要传输图片的话一般是比较简单的&#xff0c;但是如果需要传输很多张图片&#xff0c;不管是发送还是接收的话一张张的处理就比较麻烦了。这种情况下很多朋友或许都会将图片制作成PDF文件。这样技能方便传输也能方便查阅。那么怎么把图片变成…

PHP 实现PDF转图片

目录 1.环境配置&#xff1a; 2.实现原理&#xff1a; 3.安装php扩展imagick 4.安装ghostscript 5.pdf转图片 1.环境配置&#xff1a; 2.实现原理&#xff1a; Php使用扩展插件imagick进行图片处理&#xff0c;处理pdf时使用imagick去调用ghostscript 3.安装php扩展imag…

图片PDF转word

最近需要把PDF转word&#xff0c;试了几个网站发现PDF是图片做成的而不是文本直接做的。 找了些国内的软件都要收费。 直接放网站&#xff1a;https://www.onlineocr.net/ 限制&#xff1a;只有50页的免费权限 使用&#xff1a; 1 点右上角SIGN UP 去注册一个账号&#x…

【PS】免费 使用PS批量将pdf转换成图片 pdf转图片 pdf转jpg pdf转png

将各种各样的pdf转成图片&#xff0c;是比较普遍的需求&#xff0c;不过目前的各种转换器&#xff0c;不是收费&#xff0c;就是限制转换数量&#xff0c;要不就是强制加水印&#xff0c;很烦。 这里我们使用PS打开PDF&#xff0c;然后使用PS的宏&#xff0c;一键将图片保存到…

Python提取PDF中的图片

⚡插播一条老家自产的糖心苹果&#xff0c;多个品种&#xff0c;欢迎选购&#xff01;有问题随时私信我⚡&#xff1a; &#x1f34e;&#x1f34e;来自雪域高原的馈赠——海拔2000米的大凉山高原生态糖心苹果&#x1f34e;&#x1f34e;https://blog.csdn.net/qq_15969343/art…

图片怎么转换成PDF,这三个方法轻松搞定!

图片转PDF是指将图片文件转换为PDF文件的过程。PDF&#xff08;Portable Document Format&#xff09;是一种文件格式&#xff0c;能够保存文本、图像、表格等多种元素。PDF文件具有跨平台性、可打印性和可搜索性等优点&#xff0c;因此被广泛应用在文档分享、文档存储和文档打…

图片转为pdf怎么弄?发送图片安全高效的格式

图片转为pdf怎么弄&#xff1f;pdf文档作为当下最火的一种文档格式之一&#xff0c;我们在日常生活中会经常使用到它。这种格式的文件保密性高&#xff0c;不易被修改。而将图片转换为pdf格式&#xff0c;不仅方便传输图片&#xff0c;而且还能最大程度保证图片的颜色不被改变。…

如何把图片转换成PDF?4种简单快捷的方法,一键将图片转PDF

分享4种图片转PDF的方法&#xff0c;转换速度快&#xff0c;而且能够保持图片画质清晰&#xff0c;不管是单个图片转换还是多个图片转换&#xff0c;都能满足你&#xff01; 一、单张图片转PDF 1、照片查看器 直接使用Win10中自带的图片查看器&#xff0c;就能将图片转换为P…

Pycharm远程开发教程

Pycharm远程开发教程 最近项目中使用到了Pycharm的远程开发&#xff0c;记录一下具体的使用方式&#xff0c;本文涉及到的操作均为Pycharm专业版&#xff08;环境为Win10和Ubuntu16&#xff09;&#xff0c;社区版功能没有这么丰富&#xff0c;使用学生邮箱(.edu后缀)注册Jetbr…

CSS+HTML+JS----开发简单个人网站

今天闲着没事花了几个小时写了个个人网站&#xff1b;在盒子布局上花了点时间。 个人网站共六个静态界面&#xff0c;每个界面都有隐藏的音乐&#xff0c;自动播放。 个人网站分为三个部分&#xff0c;登录界面&#xff0c;主界面&#xff0c;以及分界面。 登陆界面主要核心…

微信机器人开发,个人微信开发

由于自身在机器人方面滚爬多年&#xff0c;现在收藏几个宝藏机器人 推荐一下自己常用的机器人&#xff1a; 不得不吹爆这家伙&#xff0c;适合有技术开发的公司&#xff0c;可以自主开发所需要的功能&#xff01;十分齐全

个人博客开发流程

成品&#xff1a;见公告》个人博客站点 1&#xff1a;列出博客大纲&#xff1a;用来干什么&#xff1b;为什么要做&#xff1b;怎么做&#xff1b; 2&#xff1a;列出博客的需求点 3&#xff1a;根据需求点整理出对应的技术文档 4&#xff1a;用workbench画出数据字典 5&#x…

微信小程序个人中心页面开发

目录 微信小程序创建项目配置底部导航栏 微信小程序滚动播放内容 微信小程序功能中心模块开发 微信小程序个人中心页面开发 微信小程序获取电话号码 微信小程序显示列表数据 微信小程序显示分页列表 微信小程序添加插屏广告 微信小程序添加激励式广告 最终效果可扫码查看 遇…

PHP简单实现个人网站

一、PHP简单实现个人网站 使用的技术&#xff1a; htmlcssjsjQueryphptable响应式布局 项目目录结构&#xff1a; 二、项目运行结果 1、首页 2、个人文章 3、喜欢的动画 4、喜欢的音乐 5、实现视频播放 三、项目总结与下载链接 本个人网站纯属个人开发&#xff0c;没有用到…

如何开发一个系统

文章目录 前言一、流程二、需求分析1、调研2、画图 三、系统设计1、架构2、模块设计3、画图 四、系统开发1、开发2、协作3、测试 总结体会 前言 作为一名大二学生&#xff0c;参加校内比赛做了一个绩效管理系统&#xff0c;所以写一下如何开发一个系统。 一、流程 制作一个系…